【问题标题】:check if record exist in the table with if statement使用 if 语句检查表中是否存在记录
【发布时间】:2015-05-07 21:43:29
【问题描述】:

我的总线表是空的,我正在尝试检查记录是否存在,但程序检索始终为真并跳转到真语句?!我已经用SELECT COUNT(*) FROM bus试过了,我也有同样的问题。

boolean records = stt.execute("SELECT EXISTS(SELECT 1 FROM bus) ");
if (records) {
    //It is always jumping here.
    return insertRecord(mac, route, latD, longD, status, con);

} else {
    // The table exist without records.
    stt.execute("ALTER TABLE bus AUTO_INCREMENT = 1");
    return insertRecord(mac, route, latD, longD, status, con);
}

编辑 我收到此错误,但如果我删除这些行一切正常。

servlet [Jersey Web Application] 在路径 [/serverSide] 的上下文中的 Servlet.service() 引发异常 [java.lang.NullPointerException],根本原因

PreparedStatement recordPrep = con
        .prepareStatement("SELECT COUNT(1) FROM bus");
ResultSet rs = recordPrep.getResultSet();

 if (rs.next()) {

    return insertRecord(mac, route, latD, longD, status, con);

 } else {
    // The table exist without records.
    stt.execute("ALTER TABLE bus AUTO_INCREMENT = 1");
    return insertRecord(mac, route, latD, longD, status, con);
}

【问题讨论】:

  • 使用SELECT COUNT(1) FROM bus 并从ResultSet#getInt 获取结果。使用结果检查表是否为空(0)或是否有数据(> 0)。
  • @LuiggiMendoza:我已经尝试过了,我收到了错误error Column route not found,因为表格是空的,而且我有 route 名称的列

标签: java mysql sql


【解决方案1】:

execute(String) method 不会返回第一行的boolean 值,它会告诉您是否有行。

execute 方法执行一条 SQL 语句并指示第一个结果的形式。然后,您必须使用方法 getResultSet 或 getUpdateCount 检索结果,并使用 getMoreResults 移动到任何后续结果。

返回:

如果第一个结果是 ResultSet 对象,则为真;如果是更新计数或没有结果,则为 false

相反,使用getResultSetStatement 中获取ResultSet,并检查第一行的第一个值(如果存在)。

【讨论】:

  • 我已经尝试过你的解决方案,我从 jersey `Servlet.service() 中得到了一些东西,用于 servlet [Jersey Web Application] 在路径 [/serverSide] 的上下文中抛出异常 [java.lang.NullPointerException]有根本原因`,但我删除了它有效的行
【解决方案2】:

如果您想检查bus 表中是否有任何记录,您应该使用SELECT COUNT(id) FROM bus(假设您有一个id 列,如果没有,请将列名替换为您拥有的ID,或者任何其他列)

【讨论】:

  • 您不应该直接使用execute的结果,查看此链接以获取如何使用mysql支持的示例:zetcode.com/db/mysqljava
猜你喜欢
  • 1970-01-01
  • 2013-04-15
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多