2010-03-04 112 views
1

我正在使用Java包裝來訪問Sqlite,但我認爲這是一個普通的Sqlite問題。Sqlite:如何在準備好的語句中將變量插入到字符串中

String stmt = "SELECT foo FROM bah WHERE foo='%/?/%'; 
PreparedStatement a = myConn.prepareStatement(stmt); 

a.setString(1, "hello"); 
a.executeQuery(); 

...拋出一個異常 - 它不喜歡?在引號內。一切都很好,如果我做

...WHERE foo=? 

但這不是我想要的聲明。

如何將變量插入此準備好的語句中?如果您忘記了我正在使用Sqlite的事實,那麼如何使用其他數據庫技術來完成這項工作?

+0

不知道答案了我的頭頂部,但你有沒有嘗試做了setString(1,「%/你好%」)?你可能不得不闖入你的輸入字符串來包圍它w% – 2010-03-04 13:58:22

+0

我想我可以做 ...哪裏foo =? 和 a.setString(1,「\'%/ hello%/ \'」); 作爲最後的手段。 – 2010-03-04 14:00:03

+0

在我看到您的建議SB之前發佈了我的評論 - 謝謝。我可以這樣做,但我仍然想知道是否有更好的方法! – 2010-03-04 14:01:16

回答

4

我遇到讓你把一個參數字符串文字裏面沒有數據庫。如果支持這種方式,那麼您必須在不是參數的字符串中每隔?字符都逃脫。

你可以,但是,使用字符串連接來支持你所追求的:

SELECT foo FROM bah WHERE foo = '%/' || ? || '/%' 
4

設定值時,您可以添加通配符:

String stmt = "SELECT foo FROM bah WHERE foo= ?" 
PreparedStatement a = myConn.prepareStatement(stmt); 
a.setString(1, "%hello%"); 
相關問題