当 Statement 与 Java 和 Oracle 一起使用时,Prepared Statement 不起作用

Posted

技术标签:

【中文标题】当 Statement 与 Java 和 Oracle 一起使用时,Prepared Statement 不起作用【英文标题】:Prepared Statement not working while Statement is working with Java and Oracle 【发布时间】:2017-07-14 09:33:10 【问题描述】:

我正在尝试使用 Java 1.6 和 Oracle 9i 运行一个简单的查询来获取数据。 即使我通过语句获得结果,但在使用 preaparedstatement 结果集时返回空行。有没有人遇到过同样的问题?

我的 JDBC 驱动版本是 10.1.0.5.0 DB 是 Oracle9i Enterprise Edition Release 9.2.0.8.0 - 64bit Production

下面是程序。

String query = "SELECT count(SEVERITY) as CNT FROM TICKET_TABLE where upper(customerid)=?" ;
PreparedStatement pst =null;
ResultSet lResultSet = null;
pst = con.prepareStatement(query);      
pst.setString(1, "CUST_A");
lResultSet = pst.executeQuery();                
while(lResultSet.next())                       
  i = lResultSet.getInt("CNT");

lResultSet.close();
pst.close();
con.close();

【问题讨论】:

如果您希望只有一行,应将while 替换为if... 错误 - 虽然很好。没有解释为什么 PreparedStatement 没有结果。 不是答案,只是评论... 顺便说一句,“空行”是什么意思? 你能告诉我们你使用“语句”的代码吗? 【参考方案1】:

您可以检查您正在使用的oracle驱动程序与java版本和数据库版本的兼容性。

其次,通过首先通过任何 Oracle 客户端工具运行查询条件来确认查询条件假设返回记录。

【讨论】:

与 sqldeveloper 4.2 相同的查询返回数据 确认您使用的jdbc驱动与db版本、java版本和操作系统的兼容性。 Oracle 驱动程序有时会很有趣。 APP-1 [Not Working] Java 1.5 ,JDBC driver version is 9.2.0.1.0 DB is Oracle DB Ver is Oracle9i Enterprise Edition Release 9.2.0.8.0 - Solaris 5.10 上安装的 64 位生产 Oracle APP-2 [工作] ======== Java 1.5,JDBC 驱动程序版本是 9.2.0.1.0,DB 是 Oracle DB Ver 是 Oracle9i Enterprise Edition Release 9.2.0.8.0 - 安装在 Solaris 5.10 上的 64 位生产 Oracle App3 [已工作] ==== Java 1.5,JDBC 驱动程序版本是 9.2.0.1.0 DB 是 Oracle DB Ver 是 Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 生产 Oracle 安装在 Windows Enterprise 2003 上

以上是关于当 Statement 与 Java 和 Oracle 一起使用时,Prepared Statement 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

java中对数据库的操作Statement和PrepareStatement这两个方法有啥不同?它们是一个类还是一个方法?

Java基础——Statement与PrepareStatement

PreparedStatement 与 Statement

在Java中 Connection、Statement、ResultSet 、PreparedSta

JDBC中PrepareStatement 和Statement

java中PreparedStatement与Statement相比具有啥优势?