我有一个 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客户端执行的每个语句之后。然后问题就消失了。
如果有人想添加一些技术细节,那么他们非常欢迎!