JDBC预编译PreparedStatement支持in参数

JDBC PreparedStatement预编译SQL语句时,需要对传入的SQL语句中对引号中的特殊字符进行转意,下面整理了一个方法,来处理PreparedStatement预编译in的问题,代码如下:
package com.jdbc;
import java.sql.Array;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Test
{
	public static void main(String[] args)
	{
		
		// 声明一个数据库操作对象
		PreparedStatement pstmt = null;
		// 声明一个结果集对象
		ResultSet rs = null;
		// 声明一个SQL变量,用于保存SQL语句
		String sql = null;
		// DataBaseConnection为具体的数据库连接及关闭操作类
		Connection con = null;
		// 连接数据库
		con = ConnectionFactory.getConnection();

		//创建参数列表 
		List<String> list = new ArrayList<String>();
		list.add("zhangsan");
		list.add("lisi");

		//根据参数列表的大小生成in串 
		StringBuffer buffer = new StringBuffer();
		for (int i = 0; i < list.size(); i++)
		{
			buffer.append("?, ");
		}
		buffer.deleteCharAt(buffer.length() - 1);
		buffer.deleteCharAt(buffer.length() - 1);

		// 编写SQL语句
		sql = "SELECT * FROM t_TaskList Where OperatorName in ("
				+ buffer.toString() + ")";
		try
		{

			pstmt = con.prepareStatement(sql);
			// 查询记录 
			//根据参数列表设置sql参数 
			for (int i = 0; i < list.size(); i++)
			{
				pstmt.setString(i + 1, list.get(i));
			}
			rs = pstmt.executeQuery();
			while (rs.next())
			{
				System.out.print(rs.getString("id"));
			}
			// 依次关闭
			rs.close();
			pstmt.close();

		} catch (Exception e)
		{
			System.out.println(e);
		} finally
		{
			// 最后一定要保证数据库已被关闭
			try
			{
				con.close();
			} catch (SQLException e)
			{
				e.printStackTrace();
			}
		}
	}
}

你可能感兴趣的:(java,sql,jdbc)