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



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

该表中还有一行具有XYZ列的值,例如'12345678-1234'

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

但是当我使用 java 执行相同的 select 语句(如下所示(时,它返回任何行。

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"(,那么以上两个都会给出相同的结果 - 一行。

请指出我在这里缺少什么。

你应该使用PreparedStatement

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

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

COMMIT是罪魁祸首。

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

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

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

最新更新