JDBC进阶

来源:互联网 发布:sql where and 编辑:程序博客网 时间:2024/05/22 05:15

JDBC进阶使用技巧


1.PreparedStatement-灵活指定SQL语句中的变量

为了解决Statement构建sql语句中容易出错的参数传递问题,可以使用PreparedStatement来传递参数
pstmt = conn.prepareStatement("insert into dept2 vaules(?, ?, ?)");pstmt.setInt(1, deptno);pstmt.setString(2, dname);pstmt.setString(3, loc);pstmt.executeUpdate();

?表示占位符,用set***(1,**)表示向某个位置传递哪个参数。

2.CallableStatement-处理存储过程

Class.forName("oracle.jdbc.driver.OracleDriver");Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT", "scott", "tiger");CallableStatement cstmt = conn.prepareCall("{call p(?, ?, ?, ?)}");cstmt.registerOutParameter(3, Types.INTEGER);cstmt.registerOutParameter(4, Types.INTEGER);cstmt.setInt(1, 3);cstmt.setInt(2, 4);cstmt.setInt(4, 5);cstmt.execute();System.out.println(cstmt.getInt(3));System.out.println(cstmt.getInt(4));cstmt.close();conn.close();

3.批处理

import java.sql.*;public class TestBatch {public static void main(String[] args) throws Exception {Class.forName("oracle.jdbc.driver.OracleDriver");Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.1:1521:SXT", "scott", "tiger");/*Statement stmt = conn.createStatement();stmt.addBatch("insert into dept2 values (51, '500', 'haha')");stmt.addBatch("insert into dept2 values (52, '500', 'haha')");stmt.addBatch("insert into dept2 values (53, '500', 'haha')");stmt.executeBatch();stmt.close();*/PreparedStatement ps = conn.prepareStatement("insert into dept2 values (?, ?, ?)");ps.setInt(1, 61);ps.setString(2, "haha");ps.setString(3, "bj");ps.addBatch();ps.setInt(1, 62);ps.setString(2, "haha");ps.setString(3, "bj");ps.addBatch();ps.setInt(1, 63);ps.setString(2, "haha");ps.setString(3, "bj");ps.addBatch();ps.executeBatch();ps.close();conn.close();}}

4.事务处理

注意要恢复现场
import java.sql.*;public class TestTransaction {public static void main(String[] args) {Connection conn = null;Statement stmt = null;try {Class.forName("oracle.jdbc.driver.OracleDriver");conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:SXT", "scott", "tiger");conn.setAutoCommit(false);stmt = conn.createStatement();stmt.addBatch("insert into dept2 values (51, '500', 'haha')");stmt.addBatch("insert into dept2 values (52, '500', 'haha')");stmt.addBatch("insert into dept2 values (53, '500', 'haha')");stmt.executeBatch();conn.commit();conn.setAutoCommit(true);} catch (ClassNotFoundException e) {e.printStackTrace();} catch(SQLException e) {e.printStackTrace();try {if(conn != null){conn.rollback();conn.setAutoCommit(true);}} catch (SQLException e1) {e1.printStackTrace();}}finally {try {if(stmt != null)stmt.close();if(conn != null)conn.close();} catch (SQLException e) {e.printStackTrace();}}}}