限制准备好的语句一次执行一个查询

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(),只有这样,更改才会传递到数据库。

【讨论】:

以上是关于限制准备好的语句一次执行一个查询的主要内容,如果未能解决你的问题,请参考以下文章

Kohana 准备好的语句或查询构建?

限制最大准备好的语句计数

单个 mysqli 查询语句来获取总行数和限制

PDO 准备语句限制不起作用 [重复]

索引限制

在 PHP 中到处使用准备好的语句? (PDO)