我想多次使用相同的值。Java中的查詢中的SQL變量
如果我在dbForge
使用MySQL的一個查詢,
SET @v1 = 123, @v2='2014-04-11', @v3 = 'user1', @v4='title1';
INSERT INTO test_table (TID, CREATED, OWNER, TITLE)
VALUES (@v1,@v2,@v3,@v4)
ON DUPLICATE KEY UPDATE
[email protected], [email protected], [email protected]
它正確執行,但在Java中,當我使用的代碼
final String dbQuerry = "SET @v1 = %s, @v2='%s', @v3 = '%s', @v4='%s';\n"+
"INSERT INTO test_table (TID, CREATED, OWNER, TITLE)\n" +
"VALUES (@v1,@v2,@v3,@v4)\n" +
"ON DUPLICATE KEY UPDATE\n" +
"[email protected], [email protected], [email protected]";
String currentQuerry = String.format(dbQuerry, t.getParam("ID"),
t.getParam("Date"),
t.getParam("User"),
t.getParam("Title"));
mDBStatement.execute(currentQuerry);
我有一個例外
SQL異常:你的SQL語法有錯誤;在'INSERT INTO test_table(TID,CREATED,OWNER,TITLE)VALUES (@ v1,@ v2,@ v3,@ v4)ON'處檢查與您的MySQL服務器版本對應的手冊 正確的語法爲 2號線
我可以使用這樣的事情
final String dbQuerry = "INSERT INTO test_table (TID, CREATED, OWNER, TITLE)\n" +
"VALUES (?,?,?,?)\n" +
"ON DUPLICATE KEY UPDATE\n" +
"CREATED=?, OWNER=?, TITLE=?";
PreparedStatement st = mDBConnection.prepareStatement(dbQuerry);
st.setInt(1, Integer.valueOf(t.getParam("ID")));
st.setString(2, t.getParam("Date"));
st.setString(5, t.getParam("Date"));
st.setString(3, t.getParam("User"));
st.setString(6, t.getParam("User"));
st.setString(4, t.getParam("Title"));
st.setString(7, t.getParam("Title"));
但它看起來醜陋。
有沒有辦法解決這個問題?
這似乎是最好的辦法。另一種方式(這是不安全的)就像是使用replaceAll(「@ v1」,t.getParam(「ID」))等 – Woody
Thx。它真的更好。 在我的例子中st.setString(int,String);我不喜歡,我會添加列,在這種情況下,我每次都必須重新檢查索引。 – Esperan