Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL-PreparedStatement-Efficiency-JDBC_Java_Sql_Oracle_Jdbc - Fatal编程技术网

Java SQL-PreparedStatement-Efficiency-JDBC

Java SQL-PreparedStatement-Efficiency-JDBC,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,在JDBC中执行查询的更好方法是什么 案例1 sql = "SELECT * FROM TABLE_1 WHERE ID = 1"; conn.prepareStatement(sql); ps.executeQuery(); 案例2 sql = "SELECT * FROM TABLE_1 WHERE ID = ?"; conn.prepareStatement(sql); ps.setInt(1,1); ps.executeQuery(); 注意 ps is PreparedStatem

在JDBC中执行查询的更好方法是什么

案例1

sql = "SELECT * FROM TABLE_1 WHERE ID = 1";
conn.prepareStatement(sql);
ps.executeQuery();
案例2

sql = "SELECT * FROM TABLE_1 WHERE ID = ?";
conn.prepareStatement(sql);
ps.setInt(1,1);
ps.executeQuery();
注意

ps is PreparedStatement 
sql is String
我每次都要查询1300个ID(0到1299)。 请说明为什么这种情况更好

我已经读到PreparedStatement预编译查询第二种方法使用
PreparedStatement
要好得多,因为它可以利用PreparedStatement池来提高性能

在第一部分中,使用
语句
将语句绑定到单个数据,每次都必须为不同的数据创建一个新语句

对于准备好的语句,可以使用不同的数据多次执行同一语句

编辑:

你能详细说明一下“通过缓存重用”吗

缓存
PreparedStatement
s是一种透明机制,其中
连接
维护一个准备语句池,当您使用相同的SQL查询请求准备语句时,将返回一个缓存语句。如果没有缓存,那么每次都必须创建一个新的缓存。该功能取决于驾驶员

更少的验证开销 当您使用准备好的语句时,查询只验证一次,但当您使用语句时,每次都验证一次

防止SQL注入 不一定是性能提升,但使用
PreparedStatement
也可以避免SQL注入攻击

创建
OraclePreparedStatement
OracleCallableStatement
时,JDBC驱动程序会自动在缓存中搜索匹配的语句。匹配标准如下所示:

  • 语句中的SQL字符串必须与缓存中的SQL字符串相同(区分大小写)

  • 语句类型必须相同(已准备或可调用)

  • 语句生成的结果集的可滚动类型必须相同(仅向前或可滚动)。您可以在创建语句时确定可滚动性。(有关完整的详细信息,请参阅“指定结果集可滚动性和可更新性”。)


如果在缓存搜索期间找到匹配项,则返回缓存语句。如果未找到匹配项,则创建并返回一条新语句。调用语句对象的
close()
方法时,新语句及其游标和状态将被缓存。

最有效的方法是使用PreparedStatement

"SELECT * FROM TABLE_1 WHERE ID IN (?,?,?,?,?,.....)"

使用100个参数并并行运行13个任务100个ID

他没提过身份证总是0-1299的吗。如果是这样的话,ID>=0和ID@Sami Korhonen如果他想要固定ID>=我已经添加了一个来自Oracle文档的链接,解释了语句深度缓存。您使用的是哪种DBMS?博士后?Oracle?我们使用Oracle作为后端。