JDBC:无法创建语句

Posted

技术标签:

【中文标题】JDBC:无法创建语句【英文标题】:JDBC: Could not create statement 【发布时间】:2013-10-10 07:40:06 【问题描述】:

我正在尝试通过 JDBC 对 Oracle DB 执行查询。我已经验证它在 SQL Developer 中工作。 但是当我通过 JDBC 运行它时,我在

上得到一个“null”值
ps = con.prepareStatement(sql.toString());

我尝试了不同的语句和 SQL 查询,所有这些都在 SQL 开发人员中工作,而不是在 JDBC 中。另外,我没有任何堆栈跟踪可以调试到..

查询1

      sql.append("SELECT * FROM Tabel WHERE (ID1=" + id + " AND ORG=" + org + ") OR (ID2=" + id + " AND ORG=" + org + ")");

查询2

sql.append("SELECT * FROM Tabel WHERE (ID1=" + id + " OR ID2=" + id + ") AND ORG=?" + org);

查询3

sql.append("SELECT * FROM Tabel WHERE (ID1=? OR ID2=?) AND ORG=?");
ps = con.prepareStatement(sql.toString());
ps.setString(1, id);
ps.setString(2, id);
ps.setString(3, org);

代码

try 
  log.debug("Creating Query");
  StringBuffer sql = new StringBuffer();
  sql.append("SELECT * FROM Table WHERE (ID1=? OR ID2=?) AND ORG=?");
  log.debug("Query created: " + sql.toString()); //Don't get here
  ps = con.prepareStatement(sql.toString());
  ps.setString(1, id);
  ps.setString(2, id);
  ps.setString(3, org);
  log.debug("Query Created!!!!");
  con = getConnection();
 catch (Exception e) 
  log.error("Could not create statement in methodXXX");
  //Returns null in e.getMessage()
  throw new Exception("Could not create query: " + e.getMessage()); 

//亨里克

【问题讨论】:

您到底想在哪里执行?据我所知,您只是设置了参数值。 在添加之前sql 是什么? 查询 3 是很好的做法,它应该可以工作 你能展示使用更多代码吗?创建连接等。 'SELECT * FROM TabelWHERE ....' 语句中的 Table 和 Where 子句之间应该有空格。 【参考方案1】:

只需使用以下方式

ps = con.prepareStatement("SELECT * FROM Tabel WHERE (ID1=? OR ID2=?) AND ORG=?");
ps.setString(1, id);
ps.setString(2, id);
ps.setString(3, org)
ResultSet rs=ps.executeQuery();
while(rs.next())

//use your code to retrieve like rs.getString(1);

【讨论】:

以上是关于JDBC:无法创建语句的主要内容,如果未能解决你的问题,请参考以下文章

JDBC连接后在Eclipse中执行准备语句后无法检索数据

使用 JDBC 时如何为 SQL 语句启用日志记录

INSERT 语句上的 Spring JDBC NullPointerException [重复]

雪花 JDBC 驱动程序内部错误:无法检索第一个箭头块的行数:null - 仅发生在 SELECT 语句上

在哪里使用 JDBC 创建准备好的语句?

Spring JDBC 在运行 SQL 脚本时无法处理 DECLARE 语句