JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
JDBC 编程基本步骤
一、装载驱动程序
String DriveName="net.sourceforge.jtds.jdbc.Driver" Class.forName(DriveName)
在使用JDBC之前必须引入 相应的驱动jar包,不同的数据库产品会有各自的jar包。 DriveName为驱动jar包中的类。
例如连接 sybase 可以使用 jtds-1.2.6.jar 和 jconn4.jar, 不同的数据库厂家都会对jdbc类做一些扩展,以便实现特殊功能。不过一般情况下使用标准的jdbc接口能满足大部分需求 。
二、建立连接
String ServerUrl="jdbc:sybase:Tds:HOSTNAME:5000/testdb"; String UserName="sa"; String Password="123456"; Connection conn=DriverManager.getConnection(ServerUrl, UserName, Password);
ServerUrl 为连接字符串, 连接字符串包含jdbc使用的 subprotocol, 服务起地址和端口信息, 以及需要连接的数据库。连接字符串一般由驱动程序产家提供。 UserName 为用户名, Password为相应的密码 三、创建操作对象
Statement stment=conn.createStatement();ResutlSet rset=stment.executeQuery("SELECT * FROM T_SALES");
Statement对象提供了执行SQL的方法executeXXXX(), 对应查询有 executeQuery(String sql)方法. 另外,还有PreparedStatement对象,可以预先对SQL做处理。
PreparedStatement ppstment = conn.prepareStatement("insert into TXN_LOG values (?, ?)"); ppstment.setString(1, "first_field_content_here" ); // 1 对应第1个 ? 号 ppstment.setString(2, "second_field_content_here" ); // 1 对应第1个 ? 号 ppstment.execute();
四、处理结果
JDBC 使用 ResultSet对象存取select 语句返回的结果
ResultSet rst=null; rst=stment.executeQuery("SELECT * FROM TXN_LOG"); while(rst.next()) { String outline=null; outline=rst.getString(1) +"|" ; // 通过序号1 找到Field中的内容 outline+=rst.getString("TXN"); // 通过字段名字找到Field中的内容 System.out.println(outline); }
五、关闭连接
conn.close()
完成数据库操作之后,一般需要显示调用close方法,关闭连接。
JDBC事务处理
一般JDBC连接数据库之后,默认设置为“自动提交”,即每次SQL操作都commit. 如果需要手动提交,则必须将自动提交功能设置为false.
conn.setAutoCommit(false); .... .... conn.commit() // 提交
非自动提交模式下,代码中必须 调用 commit方法。
JDBC 批量处理
对于大批量的数据插入、数据更新操作, 一般需要使用JDBC批量提交的方式处理。Statement 对象和 PreparedStatement 提供了 addBatch() 和 executeBatch方法来实现批量提交。
// Statement实现 stment.addBatch("SQL1"); stment.addBatch("SQL2"); ...... stment.executeBatch(); // 执行批量处理 // PreparedStatement 方式 ppstment.setString(1, sb.toString()); ppstment.setString(2, sb.toString()); ppstment.addBatch();
采用 批量处理的方式,可以大大提高处理性能
JDBC 连接字符串对处理性能的影响
今天测试Sybase的插入性能时,发现不同的连接字符串,处理性能不一样
同一个jar中的驱动程序名 "net.sourceforge.jtds.jdbc.Driver" jtds-1.2.6.jar
1、"jdbc:jtds:sybase://ZHOUSHUANG02:5000/testdb"
2、“jdbc:sybase:Tds:ZHOUSHUANG02:5000/testdb”
采用同样的程序测试,批量提交方式每次 500条, 插入10w 条数据
标号 | 1 | 2 | 3 | AVG |
1 "jdbc:jtds:sybase://ZHOUSHUANG02:5000/testdb" | 28s | 71s | 72s | 5 |
2 “jdbc:sybase:Tds:ZHOUSHUANG02:5000/testdb” | 14s | 11s | 11 | 13s |
从统计数据可以看出,不同的连接字符串的处理时间不一致。
JDBC 基础