2013-03-21 86 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

相关问题