在java中设置准备和执行查询
我可以使用prepareStatement在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代码???
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
使操作原子化:
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()代码>
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);