使用statement.executeQuery编写的select语句无法选择具有的值 - (破折号)

时间:2018-06-12 14:27:03

标签: java sql jdbc oracle11g

我有一个Oracle数据库表MyTable,其列XYZ的数据类型为varchar2(40 Byte)

该表中还有一行XYZ列的值类似于'12345678-1234'

当我使用Oracle SQL客户端并运行select语句:select * from MyTable where XYZ='12345678-1234';时,它返回一个记录。

但是当我使用java(下面给出)执行相同的select语句时,它返回 no 行。

Connection con = DriverManager.getConnection(url,user,pass);//I have proper parameters here
Statement stmt = con.createStatement();  
String query= "select * from MyTable where XYZ='12345678-1234'";
ResultSet rs = stmt.executeQuery(query);
if (rs.next()){
 System.out.println(rs.getString("XYZ")); 
}else {
 System.out.println("No Value")); 
}

此处始终打印无价值

编辑:当我在表格行中使用没有短划线的值时(例如:'12345678'),上面两个都给出相同的结果 - 一行。

请指出我在这里缺少的东西。

2 个答案:

答案 0 :(得分:1)

您应该使用PreparedStatement

PreparedStatement stmt = con.prepareStatement("select * from MyTable where XYZ = ?");
preparedStatement.setString(1, "12345678-1234");
ResultSet rs = preparedStatement.executeQuery();

答案 1 :(得分:0)

这不是我发现的java代码的问题。

COMMIT是罪魁祸首。

我同时从Oracle Sql客户端和Java访问数据库,这导致了上述问题。

然后我在Oracle Sql客户端中执行的每个语句之后使用 Commit; 然后问题就消失了。

如果有人想为此添加一些技术细节,那么非常欢迎他们!