限制准备好的语句一次执行一个查询
Posted
技术标签:
【中文标题】限制准备好的语句一次执行一个查询【英文标题】:limiting prepared statement to execute one query at a time 【发布时间】:2017-03-14 05:27:04 【问题描述】:我将选择查询传递给准备好的语句以获取记录列表。 问题是如果我将查询附加到插入或截断表,准备好的语句将执行所有查询。 例子
SELECT INDEX.*
,item.*
FROM cust_sales_order_index AS INDEX
INNER JOIN (
SELECT pkid AS item_pkid
,index_id
,item_code
,NAME
,quantity AS item_quantity
FROM cust_sales_order_item
) AS item
ON INDEX.pkid = item.index_id
WHERE (pkid = 100001);
CREATE TABLE temp_cust_sales_order_index_temp (LIKE cust_sales_order_index);
WITH temp1
AS (
DELETE
FROM cust_sales_order_index returning *
)
INSERT INTO temp_cust_sales_order_index_temp (SELECT * FROM temp1);-- ) ORDER BY time_update
如何限制 sql 查询只执行选择查询或至少在 Java 中一次只执行一个查询。
【问题讨论】:
不要...追加查询?? 我使用 prepStmt = con.prepareStatement(selectStmt);结果集 rs = prepStmt.executeQuery();这将执行内部 sql 查询 你的java代码是什么样子的? 一个兼容的 JDBC 驱动程序甚至不应该允许执行多个这样的语句(尽管一些驱动程序提供了一个明确的属性来启用它)。 【参考方案1】:我认为我以错误的方式使用了准备好的语句。这是一个在prepared statement中使用的select示例。
String selectSQL = "SELECT USER_ID, USERNAME FROM DBUSER WHERE USER_ID = ?";
PreparedStatement preparedStatement = dbConnection.prepareStatement(selectSQL);
preparedStatement.setInt(1, 1001);
ResultSet rs = preparedStatement.executeQuery(selectSQL )
【讨论】:
【参考方案2】:我认为这是采用事务驱动方法的不错选择。
收到连接后,请确保禁用自动提交属性(如果我没记错的话,默认情况下启用)
然后,在将每条语句传递给连接之后,制作connection.commit()
,只有这样,更改才会传递到数据库。
【讨论】:
以上是关于限制准备好的语句一次执行一个查询的主要内容,如果未能解决你的问题,请参考以下文章