Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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中设置准备和执行查询_Java_Mysql - Fatal编程技术网

在java中设置准备和执行查询

在java中设置准备和执行查询,java,mysql,Java,Mysql,我可以使用prepareStatement在java中立即执行以下查询吗 SET @totalQuestion = (SELECT QuestionVolume FROM rules ORDER BY QuestionVolume DESC LIMIT 1); PREPARE STMT FROM 'SELECT * FROM question ORDER BY RAND() LIMIT ?'; EXECUTE STMT USING @totalQuestion; 我正在考虑的Java代码???

我可以使用prepareStatement在java中立即执行以下查询吗

SET @totalQuestion = (SELECT QuestionVolume FROM rules ORDER BY QuestionVolume DESC LIMIT 1);
PREPARE STMT FROM 'SELECT * FROM question ORDER BY RAND() LIMIT ?';
EXECUTE STMT USING @totalQuestion;
我正在考虑的Java代码???(不确定我是否能做这样的事?)

谁能解释一下用Java执行查询的最佳理由是什么

更新

我把我的陈述改为如下

 getQuestionRule = getDb().getConnection().prepareStatement(""
                + "SELECT QuestionVolume FROM rules ORDER BY QuestionVolume DESC LIMIT 1", Statement.RETURN_GENERATED_KEYS);
 generateQuestion = getDb().getConnection().prepareStatement(
                "SELECT * FROM question ORDER BY RAND() LIMIT ?", Statement.RETURN_GENERATED_KEYS);

使用Java变量存储
totalQuestion
使操作原子化:

  • 将JDBC auto commmit设置为false:
    con=getDb().getConnection()
    con.setAutoCommit(假)
  • 执行第一个查询并将其结果加载到局部变量
    totalQuestion=result.getInt(“QuestionVolume”)
  • 使用
    totalQuestion
    value执行第二个查询,不要在mysql级别使用动态sql,而是在程序端编写sql:
    String sql=“按RAND()限制从问题顺序选择*”
    PreparedStatement st=con.prepareStatement(sql);st.setInt(1,总问题);ResultSet res=st.executeQuery()
  • 将自动提交设置为true,从而提交事务:
    con.setAutoCommit(true)

  • 否:这是两条语句,它们不能同时执行,除非它们被分组到一个存储过程中。

    我认为他可以在同一事务中对两条语句进行分组,以获得原子操作。是的,但是它仍然需要执行两条语句。
    commit
    如何影响
    select
    ?而且,OP也没有提到关于池连接的任何内容。所以基本上我需要执行两个要求。感谢您的回复。@Ravinder第一个设置为false用于确保第一个和第二个select查询以原子方式执行。我可以说第二个设置为true可能不起作用,应该使用
    con.commit()
     getQuestionRule = getDb().getConnection().prepareStatement(""
                    + "SELECT QuestionVolume FROM rules ORDER BY QuestionVolume DESC LIMIT 1", Statement.RETURN_GENERATED_KEYS);
     generateQuestion = getDb().getConnection().prepareStatement(
                    "SELECT * FROM question ORDER BY RAND() LIMIT ?", Statement.RETURN_GENERATED_KEYS);