JDBC 批处理

PreparedStatement 批处理

  1. 批处理就是一批一批的处理,而不是一个一个的处理!
  2. 当你有 100 条 SQL 语句要执行时,一次向服务器发送一条 SQL 语句,这么做效率上很差!处理的方案是使用批处理,即一次向服务器发送多条 SQL 语句,然后由服务器一次性处理。
  3. PreparedStatement 的批处理有所不同,因为每个 PreparedStatement 对象都绑定一条 SQL 模板。所以向 PreparedStatement 中添加的不是 SQL 语句,而是给“?”赋值。
  4. 示例代码(完整代码见文末):
    JDBC基础(9)_JDBC批处理_批处理
  5. 结果图:
    JDBC基础(9)_JDBC批处理_sql_02

源码

package com.wyx;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class JDBCUpdate3
{

	public static void main(String[] args)
	{
		savePersonBatch();
	}

	public static void savePersonBatch()
	{
		// 定义oracle数据库的驱动的类
		String driverClass = "oracle.jdbc.OracleDriver";
		// 定义连接的oracle的url
		String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
		// 用户名
		String username = "scott";
		// 密码
		String password = "tiger";

		// 定义Connection连接
		Connection conn = null;
		// 定义数据库的sql执行对象
		PreparedStatement ps = null;
		// 定义要执行的sql
		String addSql = "insert into person values(personid.nextval,?,?,?)";

		try
		{
			// 注册数据库的驱动程序
			Class.forName(driverClass);
			// 获得数据库的连接
			conn = DriverManager.getConnection(url, username, password);
			// 创建sql执行对象
			ps = conn.prepareStatement(addSql);

			for (int i = 0; i < 100; i++)
			{
				ps.setString(1, "魏宇轩");
				ps.setString(2, "1");
				ps.setDate(3, new Date(new java.util.Date().getTime()));
				ps.addBatch();
			}
			ps.executeBatch();

		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
			try
			{
				if (ps != null)
				{
					ps.close();
				}
				if (conn != null)
				{
					conn.close();
				}
			} catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}
}

如有错误,欢迎指正!