【问题标题】:Not able to get count using JDBC connection无法使用 JDBC 连接获得计数
【发布时间】:2018-01-03 20:13:31
【问题描述】:

我无法通过查询获得行数。我已经为此使用了 JDBC 连接。但是,它没有显示任何错误,而是停止执行该过程。

这是我的代码

Transaction transaction=null;
    Connection c = null;
    Statement stmt = null;
    ResultSet result;
    try {
         Class.forName("org.postgresql.Driver");
         c = DriverManager.getConnection(
         "jdbc:postgresql://192.168.1.7:5432/"+userDB,
     "postgres", "openerp");
     } catch (Exception e) {
         e.printStackTrace();
         System.err.println(e.getClass().getName() + ": " + e.getMessage());
         System.exit(0);
     }
    int count = 0;
    try {   
        LOGGER.info("In try of get");
        factory = HibernateUtil.connectDB(userDB);
        LOGGER.info("Connected to DB");
        //Open Session
        session = factory.openSession();
        //Begin Transaction
        transaction = session.beginTransaction();
        LOGGER.info("Beginning the transaction");
        stmt = c.createStatement();
        String sql = "SELECT COUNT(*) FROM mycontent_messages where status = '0'";

        count = stmt.executeUpdate(sql);
        LOGGER.info("successfully got count : "+count);
        c.commit();
        stmt.close();
        c.close();   

我得到的例外是

org.postgresql.util.PSQLException: A result was returned when none was expected.
at    org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:307)
at net.vsspl.mycontent.daoimpl.contentImpl.getUnreadCount(contentImpl.java:379)
at net.vsspl.mycontent.services.countUnreadMessages.main(countUnreadMessages.java:49)

它会记录到“开始交易”。之后它什么都没有显示。我的代码有问题吗?

【问题讨论】:

  • 你知道不会抛出异常吗?您是否记录了try 块中引发的任何异常?
  • 你确定 status 是 varchar 类型的吗?
  • 此外,我不认为 executeUpdate 对那个 sql 是正确的 :-)
  • 我认为将executeUpdate 更改为executeQuery
  • org.postgresql.util.PSQLException:返回结果时没有预期。在 org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:307) 在 net.vsspl.mycontent.daoimpl.contentImpl.getUnreadCount(contentImpl.java:379) 在 net.vsspl.mycontent.services.countUnreadMessages.main(countUnreadMessages .java:49)

标签: java jdbc


【解决方案1】:

您希望从查询中获取结果集并以这种方式处理它,而不是获取受影响的行数..

ResultSet rs =  stmt.executeQuery(sql);
 int count = 0;
 if(rs.next())
 {
    count = rs.getInt(1);
  }

【讨论】:

    【解决方案2】:

    count = stmt.executeUpdate(sql);

    您没有执行更新;你正在执行一个查询。

    【讨论】:

      【解决方案3】:

      这里你正在执行一个查询来获取记录的数量,所以你应该使用

      resultSet = stmt.executeQuery(sql);
      

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 2016-10-28
        • 2016-04-21
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        • 2018-06-04
        • 2017-11-09
        • 2012-10-27
        相关资源
        最近更新 更多