Java JDBC基本使用方法详解
本文实例讲述了Java JDBC基本使用方法。分享给大家供大家参考,具体如下:
本文内容: 什么是JDBC JDBC的使用 事务 连接池 DbUtils首发日期:2018-05-27
修改:
2018-07-19:增加了事务、连接池、DBUtils 2018-07-27:对特别情况下的事务进行了描述。对DBUtils增加了关闭资源、关闭流。连接池发现漏了释放连接。什么是JDBC: JDBC全称Java Database Connectivity JDBC可以通过载入不同的数据库的“驱动程序”而与不同的数据库进行连接。JDBC的优点: 使用的驱动不同,即可连接不同的数据库。 使用同一套操作来操作不同的数据库 如果每一个数据库java都制订一套连接方式,那么当不同的数据库更新的时候,java也需要更新自己的代码,而使用jdbc,使用同一套代码来操作,使用不同的驱动程序(驱动程序由数据库厂商提供)来连接,这使得可以连接不同的数据库。JDBC的使用:导入对应数据库的驱动类: 1.在对应的数据库厂商网站获取对应的jar包 2.将对应的jar包添加到引用。 在eclipse中可以将jar包导入一个文件夹后,右键Build Path -> add to path就可以将jar包添加到当前项目引用的库里面。

PS:
在上面的forName中,执行了注册驱动,注册驱动这个代码被定义在驱动类的静态代码块中。 对于一些新手,使用的方法可能是



JDBC执行SQL语句的方式主要有三种:
1.使用Statement执行sql语句
2.使用PreparedStatement执行sql语句
3.使用CallableStatement执行sql语句
上面的Statement、PerPareStatement、Callalestatement都可以使用连接对象来获取。
定义的存储过程示例:
使用:
不了解事务是什么的,可以看一下我的另外一篇博文:mysql之事务管理
设置事务管理:连接对象.setAutoCommit(boolean)【当参数为true时,代表允许自动提交(事务管理是关闭的,每一条命令都会自动提交);当为false时,代表不允许自动提交,命令会在执行commit之后再统一提交(开启事务管理的)】
提交事务:连接对象.commit()
回滚事务:连接对象.rollback()
例子:以银行转账为例,张三转给李四100元,执行事务后,如果运行出错将不会提交数据到数据库:
连接池可以自定义,当然常用的一般都是选择采用第三方开源的连接池,想了解如何自定义连接池的可以自查,下面给出的是两个常用的连接池的用法。
DBCP:首先,使用DBCP连接池需要导入包:commons-dbcp.jar和commons-pool.jar【如果需要日志功能,还需要commons-logging-1.2.jar ,这里不讲述】
DBCP根据配置方式,下面给出两种使用方法:
1.手动配置法:
创建BasicDataSource对象: BasicDataSource dataSource = new BasicDataSource(); 配置BasicDataSource对象:(少用)调用对应函数配置,例如dataSource.setDriverClassName('com.mysql.jdbc.Driver'); 得到连接对象:Connection conn = ds.getConnection(); 操作数据库。(得到数据库连接对象后,就可以像以前一样去操作数据库了)2.配置文件配置法:
创建BasicDataSourceFactory对象:BasicDataSourceFactory factory = new BasicDataSourceFactory(); 利用BasicDataSourceFactory对象的createDataSource函数读取配置文件配置DataSource对象:DataSource dataSource = factory.createDataSource(properties);【配置文件能用哪些参数可以参考这个文档:http://commons.apache.org/proper/commons-dbcp/configuration.html】 得到连接对象:Connection conn = ds.getConnection(); 操作数据库。(得到数据库连接对象后,就可以像以前一样去操作数据库了)当使用完毕后,像往常一样调用close关闭连接即可【这里通过连接池获取的Connection对象已经封装过了,使用close函数相当于放回连接池中】
常用的dbcp.properties的配置信息:#连接设置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/jdbcusername=rootpassword=
#<!-- 初始化连接 -->initialSize=10
#最大连接数量maxActive=50
#<!-- 最大空闲连接 -->maxIdle=20
#<!-- 最小空闲连接 -->minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] #注意:'user' 与 'password' 两个属性会被明确地传递,因此这里不需要包含他们。connectionProperties=useUnicode=true;characterEncoding=gbk
#指定由连接池所创建的连接的自动提交(auto-commit)状态。defaultAutoCommit=true
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLEdefaultTransactionIsolation=READ_UNCOMMITTED
C3P0:首先,使用C3P0连接池需要导入包:c3p0-0.9.1.2.jar【还有扩展包如c3p0-oracle-thin-extras-0.9.1.2.jar,这里不讲】
手动配置法:
创建ComboPooledDataSource对象:ComboPooledDataSource dataSource = new ComboPooledDataSource(); 调用对应函数配置对应属性配置文件配置法:
创建配置文件,c3p0的配置文件名字是固定的,必须是c3p0.properties或c3p0-config.xml,否则识别不了。配置文件的写法看下面【配置文件存储的位置:1.能在classpath中获取到的目录(比如工程的src目录)、2.WEB-INF/classes、3.某些类似功能的路径】 创建ComboPooledDataSource对象【如果有配置文件,那么会读取配置文件来配置ComboPooledDataSource对象】 获取连接 执行sql语句当你使用完后,Connection对象调用close函数,就会把连接释放会连接池中【这里通过连接池获取的Connection对象已经封装过了,使用close函数相当于放回连接池中】
配置文件c3p0-config.xml的写法:
<c3p0-config> <default-config> <property name='driverClass'>com.mysql.jdbc.Driver</property> <property name='jdbcUrl'>jdbc:mysql://localhost/bank</property> <property name='user'>root</property> <property name='password'>123456</property> <!-- 下面的是额外的配置,如最大连接数,连接池大小。。 <property name='initialPoolSize'>10</property> <property name='maxIdleTime'>30</property> <property name='maxPoolSize'>100</property> <property name='minPoolSize'>10</property> <property name='maxStatements'>200</property> --> </default-config> <!-- 上面是默认的,如果不给参数,默认是上面的; --> <!-- 下面的是单独的,在创建对象时把下面name中的那个值赋给对象的构造函数,那么将使用下面的配置 --> <named-config name='student'> <property name='driverClass'>com.mysql.jdbc.Driver</property> <property name='jdbcUrl'>jdbc:mysql://localhost/student</property> <property name='user'>root</property> <property name='password'>123456</property> </named-config></c3p0-config>
配置文件c3p0.properties的写法:
c3p0.driverClass=com.mysql.jdbc.Driverc3p0.jdbcUrl=jdbc:mysql://localhost/bankc3p0.user=rootc3p0.password=123456
想更详细的了解c3p0,可以参考官方文档:https://www.mchange.com/projects/c3p0/index.html
怎样去配置c3p0连接池,什么英语代表什么意思,具体请参考:https://www.mchange.com/projects/c3p0/index.html
补充: 事实上DBCP和c3p0还有不少使用方法,上面只讲解了常用的。DbUtils DbUtils是apache旗下的一个操作数据库的工具 DbUtils可以简化我们对数据库的CRUD操作,一个常用功能是能把查询到的数据自动封装起来,而不再需要我们操作ResultSet。要想使用DBUtils,首先要导入包:commons-dbutils-1.4.jar
增、删、改: DbUtils的写操作是一类,读操作是一类 写操作主要是调用update函数1.新建QueryRunner对象【如果传入一个连接池对象,那么后续操作的数据库连接就是这个连接池的连接;如果不设置,那么执行update时要给一个连接对象】
2.调用update函数.
update()有多个重构函数,可以依据情况来选择使用:
补充:对于封装成对象的,需要提供一个bean类.class参数,这是为了能创建对象
关闭流、释放资源:DbUtils中提供了可以关闭各种资源的静态方法
更多关于java相关内容感兴趣的读者可查看本站专题:《Java使用JDBC操作数据库技巧总结》、《Java+MySQL数据库程序设计总结》、《Java数据结构与算法教程》、《Java文件与目录操作技巧汇总》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
相关文章:
