[英]Set Prepare and execute query in 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代碼??? (不確定是否可以做這樣的事情?)
generateQuestion = getDb().getConnection().prepareStatement(
"SET @totalQuestion = (SELECT QuestionVolume FROM rules ORDER BY QuestionVolume DESC LIMIT 1);\n"
+ "\n"
+ "PREPARE STMT FROM 'SELECT * FROM question ORDER BY RAND() LIMIT ?';\n"
+ "EXECUTE STMT USING @totalQuestion;");
誰能解釋為什么最好用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(false);
totalQuestion = result.getInt("QuestionVolume");
totalQuestion
值而不是在mysql級別使用動態sql而是在程序端編寫sql來執行第二個查詢: String sql = "SELECT * FROM question ORDER BY RAND() LIMIT ?";
PreparedStatement st = con.prepareStatement(sql); st.setInt(1,totalQuestion); ResultSet res = st.executeQuery();
con.setAutoCommit(true)
。 否:這是兩個語句,除非將它們分組在存儲過程中,否則不能一次執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.