`

JDBC预编译PreparedStatement支持in参数

    博客分类:
  • Java
阅读更多
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之JDBC连接MySQL数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement)

    Java之JDBC连接数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement) 配置文件 db.properties(保存数据库账号和密码等) 工具类 JDBCUtil.java(抽取公共部分,解决硬...

    JDBC之PreparedStatement类中预编译的综合应用解析

    SQL 语句被预编译并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句

    jdbc 增删改查事物处理, 批处理,以及预编译示例代码

    内容为JDBC增删改查 ,事物处理, 批处理,以及预编译示例代码

    MySQL预编译功能详解

     大家平时都使用过JDBC中的PreparedStatement接口,它有预编译功能。什么是预编译功能呢?它有什么好处呢?  当客户发送一条SQL语句给服务器后,服务器总是需要校验SQL语句的语法格式是否正确,然后把SQL语句编译...

    利用JDBC的PrepareStatement打印真实SQL的方法详解

    PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程,下面这篇文章主要给大家介绍了关于利用JDBC的PrepareStatement打印真实SQL的方法,需要的朋友可以参考借鉴,下面来一起看看吧。

    JDBC笔记 JDBC笔记

    java.sql.PreparedStatement 继承Statement接口,表示预编译的SQL语句的对象,SQL语句被预编译并且存储在PreparedStatement对象中。然后可以使用此对象高效地多次执行该语句。 java.sql.CallableStatement 用来...

    JDBC 3.0数据库开发与设计

    4.1.2 传递IN参数 4.1.3 传递对象参数 4.1.4 传递大型数据参数 4.2 调用存储过程对象 4.2.1 CallableStatement对象的创建 4.2.2 IN、OUT及INOUT参数的使用 4.2.3 执行CallableStatement Object对象 4.2.4 ...

    jdbc连接数据库的方式2

     Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理,尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值,也不支持利用setCharacterStream()方法...

    JSP中的PreparedStatement对象操作数据库的使用教程

    IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。 由于 PreparedStatement 对象已预编译过...

    每天十道面试题(五)——JDBC数据库编程部分

    1)性能方面,PreparedStatement有预编译过程,一旦绑定SQL语句就可以执行多次,Statement执行多少次就要编译多少次SQL语句。PreparedStatement用来执行动态的SQL语句,即包含参数的SQL语句,而Statement用

    java面向对象核心知识点,独门大法

    都会包含语法,语法个数如何定义,然后语法下面就是使用方式,能够起到活学活用的帮助,比如在讲解jdbc的时候我会列举出来 Statement(执行简单的sql语句,不支持预编译) PreparedStatement(可带入参数,...

    JDBC连接MySQL数据库实现增删改查(Dao层实现 解决硬编码 配置连接池获得连接对象 )

    实现类 UserDaoImpl.java(实现增删改查功能 使用预编译对象PreparedStatement 安全、便捷不需要我们去拼接字符串,特别是字段很多的时候 同时效率比Statement更高 ) 测试类 UserDaoTest.java(做测试增删改查功能...

    mssql-jdbc-8.4.0.jre8.jar

    jdk1.8可使用的jdbc驱动... DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用...PreparedStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)

    sqlserver各版本jdbc驱动.zip

    sqlserver各版本驱动 DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回...PreparedStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)

    JDBC的常用方法

    在上一篇文章我们讲了一些基本使用JDBC-DBCP-MYBATIS。 1.防止SQL注入 我们在写sql语句时,为了方便可能会进行拼接字符串,这样做的...//使用预编译对象进行预编译,就不使用原始的Statement对象 PreparedStatement pr

    JDBC版本的增删改查

    这次写的还是对单表的增 删 改 查 ,与version1.0版本不同的是PreparedStatement 接口,它是预编译的Sql语句对象,与 Statement 不同的是 PreparedStatement ...

    Java数据库技术详解 DOC简版

    6.1 PreparedStatement预编译对象 6.2 CallableStatement存储过程对象 6.3 BatchedUpdate对象 6.4 Rowset行集合对象 6.5 JDBC的事务 6.6 本章小结 第7章 JDBC结合Servlet与JSP 的应用 7.1 Servlet概述...

    jdbc基础和参考

    提供预编译的功能,某种程度上可以避免sql注入的问题 4.提前做语法检查,在给?赋值的过程中要求数据类型一定要匹配,这样在某种程度上可以避免因为数据类型不匹配而发生的异常 CallableStatement:主要用来执行...

    JDBCTM 指南:入门6-PreparedStatement

    6 – PreparedStatement本概述是从《JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference 》这本书中摘引来的。...PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句

    MySQL数据库

    - PreparedStatement预编译的SQL执行对象 1. 可以避免SQL注入 因为在编译的时候已经把SQL的逻辑固定,不会因为替换进去的内容改变逻辑 2. 如果SQL中涉及变量 相比Statement的字符串拼接的方式,代码可读性提高,并且...

Global site tag (gtag.js) - Google Analytics