JDBC的一般流程:
1、加载数据库驱动类:Class.forName(driverclass),其中driverclass为驱动类,如"com.mysql.jdbc.Driver"。
2、通过DriverManager获取数据库连接:
Collection conn = DriverManager.getConnection(String url,String user,String passwd),参数分别为数据库地址(有格式),用户名和密码。
3、通过Connection创建Statement对象,有以下三个方法:
a. createStatement():创建基本的Statement对象;跳到第四步。
b. prepareStatement(String sql):创建预编译的Statement对象;跳到第八步。
c. prepareCall(String sql):存储过程,这里不讲理。
4、Statement stmt = conn.createStatement();
5、用Statement执行sql语句,常用:
a. executeUpdate(String sql);涉及增删改的sql,返回受影响行数
b. executeQuery(String sql);涉及查询的sql,返回结果集ResultSet对象。
6、管理结果集:
a. next(),previous(),first(),last(),absolute()等方法移动记录指针;
b. getXxx获取记录指针指向行、特定列的值。
常用的遍历方法:
while(rs.next()){
System.out.println(rs.getInt(1) + "\t" + rs.getString(2));
}
7、回收数据库资源,在Java 7中能用try来关闭数据库资源,所用对象都继承了AutoCloseable接口。
8、如果用的预编译,则:PreparedStatement pstmt = conn.prepareStatement(String sql);
注意,在sql参数中,注意将不确定的值设为?。
9、创建了预编译对象后,用setXxx配合exec等方法操作。
使用预编译SQL语句有如下好处:
1、预编译SQL,性能更好;
2、无需拼接SQL语句,编程简单;
3、防止SQL注入,安全性更好。
因此,通常更推荐用预编译方法。
补充:管理结果集——可滚动/可更新
可以在声明PreparedStatement对象时传入可滚动和可更新参数(略),这样就可以用UpdateXxx修改记录指针所指记录、特定列的值,最后调用UpdateRow()方法提交修改。
补充:事务支持
由Connection提供,默认是自动提交,即关闭事务。若要开启事务支持,在生成Connection对象和Statement对象之间,加上:conn.setAutoCommit(false)关闭自动提交,开启事务支持。
执行完多条sql后,再来一句:conn.commit()提交事务即可。
补充:数据库连接池的概念
在应用中,数据库连接经常开启和关闭,这是非常耗费系统资源的,对系统性能有很大影响。于是提出连接池的解决方案:每次请求数据库连接时无需重新打开连接,而是从连接池中取出已有的连接使用,用完后不再关闭数据库连接,而是直接将连接归还给连接池。通过连接池的统一管理,大大提高系统运行效率。常用参数:
数据库初始连接数;
连接池最大连接数;
连接池最小连接数;
连接池每次增加的容量等等……
实际使用中,连接池是一种工具类,常用的开源数据源(DataSource,即连接池)有DBCP和C3P0。