
java连接数据库的问题
没有添加成功驱动,获得不了连接,应该把sql的驱动的jar文件加进去,仅此而已
Java连接几种数据库的方法汇总比较
第一种普通的方式,利用java原生jdbc连接数第二种用properties.properties配置文件形式,利用java原生jdbc连接数据库第三种:利用c3p0-congig.xml配置文件形式,利用c3p0连接库第四种:利用dbcp.properties配置文件形式,利用dbcp连接数据库第五种:利用mybatis-config.xml配置文件形式,利用MyBatis连接数据库第六种:利用hibernate.cfg.xml配置文件形式,利用hibernate连接数据库
为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用
HiKariCP是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他连接池。
为何要使用HiKariCP
这要先从BoneCP说起:什么
不是有C3P0\\\/DBCP这些成熟的数据库连接池吗
一直用的好好的,为什么又搞出一个BoneCP来
因为,传说中BoneCP在快速这个特点上做到了极致,官方数据是C3P0等的25倍左右。
不相信
其实我也不怎么信。
可是,有图有真相啊(图片来自BoneCP官网:):而且,网上对于BoneCP是好评如潮啊,推荐的文章一搜一大堆。
然而,上Maven Repository网站()查找有没有最新版本的时候,你会发现最新的是2013年10月份的(这么久没新版本出来了
)。
于是,再去BoneCP的Githut()上看看最近有没有提交代码。
却发现,BoneCP的作者对于这个项目貌似已经心灰意冷,说是要让步给HikariCP了(有图有真相):……什么
又来一个CP
……什么是Hikari
Hikari来自日文,是“光”(阳光的光,不是光秃秃的光)的意思。
作者估计是为了借助这个词来暗示这个CP速度飞快。
不知作者是不是日本人,不过日本也有很多优秀的码农,听说比特币据说日本人搞出来的。
。
。
这个产品的口号是“快速、简单、可靠”。
实际情况跟这个口号真的匹配吗
又是有图有真相(Benchmarks又来了):这个图,也间接地、再一次地证明了boneCP比c3p0强大很多,当然,跟“光”比起来,又弱了不少啊。
那么,这么好的P是怎么做到的呢
官网详细地说明了HikariCP所做的一些优化,总结如下:字节码精简:优化代码,直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码;优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一;自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描;自定义集合类型(ConcurrentBag):提高并发读写的效率;其他针对BoneCP缺陷的优化,比如对于耗时超过一个CPU时间片的方法调用的研究(但没说具体怎么优化)。
很多优化的对比都是针对BoneCP的……哈哈。
(参考文章:)几个连接池的代码量对比(代码量越少,一般意味着执行效率越高、发生bug的可能性越低):
java 连接数据库mysql的语句怎么写 详细点
总结起来就是加载驱动,建立连接。
import java.sql.*;public class DB {public static Connection getConn() {Connection conn = null;try {Class.forName(com.mysql.jdbc.Driver);conn = DriverManager.getConnection(jdbc:mysql:\\\/\\\/localhost\\\/shopping?user=root&password=123456);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return conn;}public static PreparedStatement prepare(Connection conn, String sql) {PreparedStatement pstmt = null; try {if(conn != null) {pstmt = conn.prepareStatement(sql);}} catch (SQLException e) {e.printStackTrace();}return pstmt;}public static PreparedStatement prepare(Connection conn, String sql, int autoGenereatedKeys) {PreparedStatement pstmt = null; try {if(conn != null) {pstmt = conn.prepareStatement(sql, autoGenereatedKeys);}} catch (SQLException e) {e.printStackTrace();}return pstmt;}public static Statement getStatement(Connection conn) {Statement stmt = null; try {if(conn != null) {stmt = conn.createStatement();}} catch (SQLException e) {e.printStackTrace();}return stmt;}\\\/*public static ResultSet getResultSet(Connection conn, String sql) {Statement stmt = getStatement(conn);ResultSet rs = getResultSet(stmt, sql);close(stmt);return rs;}*\\\/public static ResultSet getResultSet(Statement stmt, String sql) {ResultSet rs = null;try {if(stmt != null) {rs = stmt.executeQuery(sql);}} catch (SQLException e) {e.printStackTrace();}return rs;}public static void executeUpdate(Statement stmt, String sql) {try {if(stmt != null) {stmt.executeUpdate(sql);}} catch (SQLException e) {e.printStackTrace();}}public static void close(Connection conn) {try {if(conn != null) {conn.close();conn = null;}} catch (SQLException e) {e.printStackTrace();}}public static void close(Statement stmt) {try {if(stmt != null) {stmt.close();stmt = null;}} catch (SQLException e) {e.printStackTrace();}}
为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用
那么,这么好的P是怎么做到的呢
官网详细地说明了HikariCP所做的一些优化,总结如下:字节码精简:优化代码,直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码;优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一;自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描;自定义集合类型(ConcurrentBag):提高并发读写的效率;其他针对BoneCP缺陷的优化,比如对于耗时超过一个CPU时间片的方法调用的研究(但没说具体怎么优化)。
很多优化的对比都是针对BoneCP的……哈哈。
java数据库的连接始终不行
楼上的,说的什么乱七八糟的,人家都说是SQL Server了
如果java连接数据库失败,一共有以下几种方式(个人总结绝对原创 呵呵):1.数据库没有打sp3以上的补丁。
2.数据库驱动有问题。
你需要把那三个包放到web-info下的lib里3.数据库端口没有打开,我家里的机器一直都这样,非常郁闷,还不能重装系统。
这个可以cmd-》netstat -an来看端口。
4.连接驱动那写错了
JAVA连接数据库登陆不了
筛查一下吧:(当时我学JDBC时总结的,感觉挺管用的)①SQL2000需要装pack3或以上补丁②端口号确定1433(SQL网络实用工具里面TCP\\\/IP-属性查看)③local服务器右键-属性-安全性-身份验证-SQL和Win勾选④服务管理器,确定已经启动⑤登陆用户名sa密码空可以登陆(或者新建用户并授权)⑥SQL2000\\\/2005\\\/2008等版本的驱动的路径不一样,jar包别用错了
java与数据库连接问题
最近,我在使用jdbc连接oracle 9i数据库时,发生如下错误:Error occured while trying to connect to the databaseError connecting to database: (using class racle.jdbc.driver.OracleDriver)Listener refused the connection with the following error:ORA-12505, TNS:listener does not currently know of SID given in connect descriptorThe Connection descriptor used by the client was:192.168.1.1:1521:bbcd----解决办法,经查找,以上的bbcd并不是sid_name,而是SERVICE_NAME改用sid_name后,运行正常。
2006.07.17服务器上的相关name:listener.ora: GLOBAL_NAME,SID_NAMEinit.ora :db_name附:有关资料关于ORACLE的ora-12505报错以及连接问题的问答资料1:配置JDBC Connection Pool时出错原文:问题描述:我安装weblogic8.1后,准备连接oracle9i,创建JDBC Connection Pool时出错,错误提示:Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=153093120)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))Driver Classname: oracle.jdbc.driver.OracleDriverURL:jdbc:oracle:thin:@145.32.16.1:1521:zzltoracle的日志:TNS-12505: TNS:listener could not resolve SID given in connect descriptorsql plus使用都很正常。
------------------解答1:我也遇到这个问题,但是幸运的是我刚刚解决。
错误码一样。
你看看如下几个问题: 1、zzlt 是你的数据库名还是数据库的实例名。
比如我在SQL PLUS里面连接的是finance数据库实例,一切正常,但是Oracle的Url是 finance.ora,那么在端口后面就应该写ora而不是finance. 2、到你的Oracle数据上去看看,修改一下一个配置文件,具体文件我忘了,反正我把里面的ora全部换成了IP地址,然后通过,现在应用良好。
------------解答2: 在 ORACLE 里用tnsping 看看listener启动了吗
再看看listener config file 里面有没有写上你的SID解答3: 到服务器上看一下,listener.oraSID_LIST_LISTENER = (SID_DESC = (GLOBAL_DBNAME = oracle9i) (ORACLE_HOME = \\\/opt\\\/oracle9i\\\/product\\\/9.2.0) (SID_NAME = ORCL) ) )你的url里面可能用的是上面的GLOBAL_DBNAME 的值,就是用的是SERVICE_NAME, 替换成SID_NAME后面的值试试看你可以用sqlplus登陆到服务器$sqlplus \\\/ as sysdbaSQL> select * from v$instance;看一下你的机器正在跑的SID的名字是什么=================================2:关于SID_NAME,SERVICE_NAME,db_name的疑问原文::(SID_DESC =(GLOBAL_DBNAME = e3dup)(ORACLE_HOME = d:\\\\oracle\\\\ora92)(SID_NAME = e3dup2))tnsname.ora:E3_DUP =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = jiangxs)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = e3dup2)))SQL> conn \\\/@e3_dup as sysdbaERROR:ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME但如果我把tnsname.ora里的SERVICE_NAME = e3dup2 改成 SERVICE_NAME = e3dup(和GLOBAL_DBNAME相同),就可以。
那是不是说tnsname里的SERVICE_NAME 和向GLOBAL_DBNAME关联
原来还以为SERVICE_NAME 指向 SID_NAME,那listener里的SID_NAME 名有什么用
------------------------解答:SID_NAME跟安装oracle时的ORACLE_SID相同,SERVICE_NAME=DBNAME.DB_DOMAINDB_NAME即是数据库名,它是oracle数据库的内部标识,安装以后轻易不要修改===========================3:在Oracle网络结构中解决连接问题来源:不详 (2006-06-29 15:14:21)来源:最近看到好多人说到tns或者数据库不能登录等问题,就索性总结了下面的文档。
首先来说Oracle的网络结构,往复杂处说能加上加密、LDAP等等。
。
这里不做讨论,重点放在基本的网络结构也就是我们最常用的这种情况三个配置文件listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOME\\\ etwork\\\\admin目录下。
重点:三个文件的作用和使用#-----------------------sqlnet.ora-----作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串,例如我们客户端输入sqlplus sys\\\/oracle@orcl假如我的sqlnet.ora是下面这个样子SQLNET.AUTHENTICATION_SERVICES= (NTS)NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名如果我是这个样子NAMES.DIRECTORY_PATH= (TNSNAMES)那么客户端就只会从tnsnames.ora查找orcl的记录括号中还有其他选项,如LDAP等并不常用。
#------------------------Tnsnames.ora------这个文件类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。
例子中有两个,ORCL 对应的本机,SALES对应的另外一个IP地址,里边还定义了使用主用服务器还是共享服务器模式进行连接,一句一句说#你所要连接的时候输入得TNSNAMEORCL =(DESCRIPTION =(ADDRESS_LIST =#下面是这个TNSNAME对应的主机,端口,协议(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA =#使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式#自动调节(SERVER = DEDICATED)#对应service_name,SQLPLUS>show parameter service_name;#进行查看(SERVICE_NAME = orcl)))#下面这个类似SALES =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = sales)))#----------------------客户端完了我们来看服务器端listener.ora------listener监听器进程的配置文件关于listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。
所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。
Listener.ora文件的例子#listener.ora Network Configuration File: #E:\\\\oracle\\\\product\\\\10.1.0\\\\Db_2\\\\NETWORK\\\\ADMIN\\\\listener.ora# Generated by Oracle configuration tools.#下面定义LISTENER进程为哪个实例提供服务#这里是ORCL,并且它对应的ORACLE_HOME和GLOBAL_DBNAME#其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做数据库连接SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = boway)(ORACLE_HOME = E:\\\\oracle\\\\product\\\\10.1.0\\\\Db_2)(SID_NAME = ORCL)))#监听器的名字,一台数据库可以有不止一个监听器#再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,并且使#用的是主机名LISTENER =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521)))上面的例子是一个最简单的例子,但也是最普遍的。
一个listener进程为一个instance(SID)提供服务。
监听器的操作命令$ORACLE_HOME\\\/bin\\\/lsnrctl start,其他诸如stop,status等。
具体敲完一个lsnrctl后看帮助。
上面说到的三个文件都可以通过图形的配置工具来完成配置$ORACLE_HOME\\\/netca 向导形式的$ORACLE_HOME\\\/netmgr本人比较习惯netmgr,profile 配置的是sqlnet.ora也就是名称解析的方式service name 配置的是tnsnames.ora文件listeners配置的是listener.ora文件,即监听器进程具体的配置可以尝试一下然后来看一下配置文件。
这样一来总体结构就有了,是当你输入sqlplus sys\\\/oracle@orcl的时候1. 查询sqlnet.ora看看名称的解析方式,发现是TNSNAME2. 则查询tnsnames.ora文件,从里边找orcl的记录,并且找到主机名,端口和service_name3. 如果listener进程没有问题的话,建立与listener进程的连接。
4. 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。
默认是专用服务器模式,没有问题的话客户端就连接上了数据库的server process。
5. 这时候网络连接已经建立,listener进程的历史使命也就完成了。
#---------------几种连接用到的命令形式1.sqlplus \\\/ as sysdba 这是典型的操作系统认证,不需要listener进程2.sqlplus sys\\\/oracle 这种连接方式只能连接本机数据库,同样不需要listener进程3.sqlplus sys\\\/oracle@orcl 这种方式需要listener进程处于可用状态。
最普遍的通过网络连接。
以上连接方式使用sys用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,普通用户因为是数据库认证,所以数据库必需处于open状态。
Java学习心得
学习感想——思路决定出路人的学习是无止境的,只有不断的学习,才能给自己更丰富,更开阔的思路,经过两天的学习,让我感悟到很多事情,都是有两面性的,穷则变,变则通,出路在于变通,当目前的想法不能成功,说明你的想法有可能是错的,或者是由于没有改变自己的思路或者是懒于改变自己的思路或者是根本不想改变自己的思路,成功总有方法,想成功就要找方法,而思考是一切正确策略和方法的起源,思考其实就是问与答的过程,当你做一件事情没有达到目标时,问自己一个为什么
问自己问题出在了哪里,然后自己给出答案,学会反思学会换位思考。
“没有不好的孩子,只有不好的教育”,例如,在课堂中,在一日生活中孩子没有如我们所预想的那样做一些正确的事情,不能达到我们所要求的目标时,我们只能对孩子着急吗
与其对孩子发脾气,不如改变自己的教育观点理念,反思自己为什么,不能懒于改变自己的思路,就要求别人去适应自己的思路,我们何不反思自己从事情的另一个角度开始着手,可能会有意外收获,就像我们经常说的,给孩子机会孩子就会给你惊喜。
从中,我还深刻的理解到一个道理,大凡世界上能做大事的人,都能把小事做细,做好,做好了每件小事逐渐积累就会发生质变,小事就会变成大事,任何一件小事只要你把它做规范了,做到位了,做透了,你就会从中发现机会,找到规律,从而成就大事,也就是说,一件事情我会做了,但做好了吗,做精了吗,一个人无论从事何种职业,都应该尽心尽责



