Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 选择使用语句编写的语句。executeQuery无法选择具有-(破折号)的值_Java_Sql_Jdbc_Oracle11g - Fatal编程技术网

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

Java 选择使用语句编写的语句。executeQuery无法选择具有-(破折号)的值,java,sql,jdbc,oracle11g,Java,Sql,Jdbc,Oracle11g,我有一个Oracle数据库表MyTable,它有一个数据类型为varchar240字节的XYZ列 该表中还有一行具有XYZ列的值,如“12345678-1234” 当我使用Oracle SQL client并运行select语句时:从MyTable中选择*,其中XYZ='12345678-1234';,它返回一条记录 但当我使用下面给出的java执行相同的select语句时,它不会返回任何行 在这里,它总是不打印任何值 编辑:当我使用表行中没有破折号的值作为示例:“12345678”时,上述两个

我有一个Oracle数据库表MyTable,它有一个数据类型为varchar240字节的XYZ列

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

当我使用Oracle SQL client并运行select语句时:从MyTable中选择*,其中XYZ='12345678-1234';,它返回一条记录

但当我使用下面给出的java执行相同的select语句时,它不会返回任何行

在这里,它总是不打印任何值

编辑:当我使用表行中没有破折号的值作为示例:“12345678”时,上述两个值给出相同的结果-一行

请指出我在这里遗漏了什么。

您应该使用PreparedStatement


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

他是罪魁祸首

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

然后我用承诺;在我在Oracle Sql客户机中执行的每条语句之后。然后问题消失了


如果有人想添加一些技术细节,那么他们是最受欢迎的

@MichaelPeacock:他已经提到查询返回Oracle SQL客户端上的行。他说它返回Oracle客户端上的数据。是否从MyTable中选择*返回数据?如果Oracle客户端和Java客户端之间的查询是相同的,那么很可能两者之间的连接信息不同。@MichaelPeacock:我同意你的看法;OP需要验证连接信息是否相同。连接信息是否相同。我检查了很多次。请参见编辑。您可能需要转义破折号字符。尝试以下操作:从MyTable中选择*,其中XYZ='12345678 \-1234'escape'\'我将尝试此操作并返回。谢谢如果在SQL客户端中添加了数据,则只有在提交数据时,其他会话才能看到该数据。这就是交易所做的。这是我忽略的部分。。交易。。。。谢谢@Markveel
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")); 
}
PreparedStatement stmt = con.prepareStatement("select * from MyTable where XYZ = ?");
preparedStatement.setString(1, "12345678-1234");
ResultSet rs = preparedStatement.executeQuery();