2013-03-21 99 views
3

我在網上搜索了好幾次,但沒有找到任何可以幫助我的東西(在java中)。用連字符替換帶連字符的查詢

事實上,我需要在一個sql表中搜索一些包含連字符的引用。所做的問題是,sql通過減法的結果來替換我的引用。列的類型是字符串。

Statement stmt = con.createStatement(); 
String query = "SELECT * FROM WAREHOUSE WHERE REF LIKE('96-18')" ; 
Statement statement = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 

ResultSet rs = statement.executeQuery(query); 
while (rs.next()) { 
    System.out.println(rs.getString("S_FAMILY")); 
} 

在這段代碼中,它將我的引用替換爲78,並且不會自然地返回好結果。

我搜索了一個逃逸字符,但沒有找到。

+0

表達了'LIKE'操作後不需要括號。 – 2013-03-21 15:59:28

+0

根據你的SO歷史,請不要忘記標記最能幫助你的帖子作爲答案。請參閱http://meta.stackexchange.com/a/5235/182862 – 2013-03-21 16:24:17

回答

2

嘗試發送String作爲查詢的參數。這樣做需要改變StatementPreparedStatement

String query = "SELECT * FROM WAREHOUSE WHERE REF LIKE(?)" ; 
PreparedStatement pstatement = con.prepareStatement(query, 
      ResultSet.TYPE_FORWARD_ONLY, 
      ResultSet.CONCUR_READ_ONLY); 
pstatement.setString(1, "96-18"); 
ResultSet rs = pstatement.executeQuery(); 

注意:您要發送"96-18"String變量的值,不要硬編碼。

+0

不,它不起作用,executeQuery()方法不接受PreparedStatement或CallableStatement的任何參數。 即使我在沒有參數的情況下嘗試它,它也無法正常工作,我已經以這種方式工作,而且我從來沒有遇到任何問題。 我使用SqlServer Driver工作,在其他使用H2的軟件中,我不認爲它提出了同樣的問題。 – pidel 2013-03-21 18:08:51

+0

@ pidel對,我的錯誤。我已經修復了代碼。 – 2013-03-21 18:55:34

+0

沒問題,非常感謝您的幫助,但問題仍未解決 – pidel 2013-03-21 18:59:26

0

您可以嘗試

SELECT * FROM WAREHOUSE WHERE REF LIKE('96\-18') ESCAPE '\' 

希望它可以幫助

+0

我在發佈此問題之前已經嘗試過 – pidel 2013-03-21 18:00:09