我有一个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'),上面两个都给出相同的结果 - 一行。
请指出我在这里缺少的东西。
答案 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; 。 然后问题就消失了。
如果有人想为此添加一些技术细节,那么非常欢迎他们!