执行SQL语句
执行普通SQL语句
应用程序通过执行SQL语句来操作数据库的数据(不用传递参数的语句),需要按以下步骤执行。
支持对XML类型数据进行SELECT、UPDATE、INSERT、DELETE等操作。
- 调用Connection的createStatement方法创建语句对象。
1 2 3 4 5 6 7
// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); String sourceURL = "jdbc:mysql://$ip:$port/database"; Connection conn = DriverManager.getConnection(sourceURL,userName,password); Statement stmt = conn.createStatement();
- 调用Statement的executeUpdate方法执行SQL语句。
1int rc = stmt.executeUpdate("CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));");
- 关闭语句对象。
1stmt.close();
执行预编译SQL语句
预编译语句是只编译和优化一次,可以通过设置不同的参数值多次使用。由于已经预先编译好,后续使用会减少执行时间。因此,如果多次执行一条语句,请选择使用预编译语句。可以按以下步骤执行:
- 调用Connection的prepareStatement方法创建预编译语句对象。
1PreparedStatement pstmt = con.prepareStatement("UPDATE customer_t1 SET c_customer_name = ? WHERE c_customer_sk = 1");
- 调用PreparedStatement的setShort设置参数。
1pstmt.setShort(1, (short)2);
- 调用PreparedStatement的executeUpdate方法执行预编译SQL语句。
1int rowcount = pstmt.executeUpdate();
- 调用PreparedStatement的close方法关闭预编译语句对象。
1pstmt.close();
执行批处理
用一条预处理语句处理多条相似的数据,数据库只创建一次执行计划,节省了语句的编译和优化时间。可以按如下步骤执行:
- 调用Connection的prepareStatement方法创建预编译语句对象。
1 2 3 4 5 6 7
// 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); String sourceURL = "jdbc:mysql://$ip:$port/database"; Connection conn = DriverManager.getConnection(sourceURL,userName,password); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO customer_t1 VALUES (?)");
- 针对每条数据要调用对应接口设置参数,以及调用addBatch将SQL语句添加到批处理中。
1 2
pstmt.setShort(1, (short)2); pstmt.addBatch();
- 调用PreparedStatement的executeBatch方法执行批处理。
1int[] rowcount = pstmt.executeBatch();
- 调用PreparedStatement的close方法关闭预编译语句对象。
1pstmt.close();
在实际的批处理过程中,通常不终止批处理程序的执行,否则会降低数据库的性能。因此在批处理程序时,应该关闭自动提交功能,每几行提交一次。关闭自动提交功能的语句为:conn.setAutoCommit(false);。
暂不支持服务端PBE,应用程序在连接参数中设置useServerPrepStmts参数为true,则不生效。