【问题标题】:Pull string from sql to java将字符串从sql拉到java
【发布时间】:2015-04-29 22:26:37
【问题描述】:

我正在尝试从我的 SQL 数据库中的表中提取名字和姓氏。在没有“as First”部分的情况下,查询在 SQL 中工作正常,我知道数据库连接很好,因为它在代码的所有其他部分都工作。

我收到的错误是 table "First" does not exist,但它应该查看表名的 firstName 和 lastName,而不是 FirstName 和 LastName。

它在带有“i”的 for 循环内,但这些值是正确的,playerid = i 存在。

try {
    String query2 = " SELECT firstName as First from player "
            + "WHERE playerid = ?";
    PreparedStatement st2 = db.conn.prepareStatement(query);
    st2.setInt(1, i);
    ResultSet rs2 = st2.executeQuery();
    if (rs2.next()) {
        setFirstName(rs2.getString("First"));
    }

    String query3 = " SELECT lastName as Last from player "
            + "WHERE playerid = ?";
    PreparedStatement st3 = db.conn.prepareStatement(query);
    st3.setInt(1, i);
    ResultSet rs3 = st3.executeQuery();

    if (rs3.next()) {
        setLastName(rs3.getString("Last"));
    }
}
catch (SQLException e) {
    e.printStackTrace();
}

【问题讨论】:

  • 请发布您收到的确切错误消息。
  • 您每次都在准备query,而不是query2query3query 是什么?
  • 你是对的。我正在准备错误的查询。它来自早期的代码。这解决了问题。不知道为什么我没有注意到。错误消息说该表不存在,因为它正在准备的查询引用了另一个表,而不是我需要的那个。感谢您的帮助。

标签: java mysql sql


【解决方案1】:

把你的代码改成这样:

PreparedStatement ps = null;
try {
    ps = db.conn.prepareStatement("SELECT firstName, lastName from player "
        + "WHERE playerid = ?");

    for (int i = 0; i < MAX_PLAYERS /*<- or what is the loop condition?*/; i++) {

        ps.setInt(1, i);
        ResultSet rs = ps.executeQuery();

        if (rs.next()) {
            // should these methods really be called within a loop?
            setFirstName(rs.getString("firstName"));
            setLastName(rs.getString("lastName"));
        }
        rs.close();
    }
} catch (SQLException e) {
   throw new RuntimeException(e);
} finally {
    if (ps != null) {
        ps.close();
    }
}

一些注意事项:

当您在循环中使用PreparedStatement 时,您应该在循环之外创建一次语句,在循环之外,然后只在每次迭代期间重新分配绑定变量。

您应该尽量减少对数据库运行的查询次数;在您的情况下,您应该在单个查询中同时选择名字和姓氏列。

关闭您打开的资源(在本例中为PreparedStatement)很重要。我的示例展示了在 Java 7 之前通常如何完成此操作(在 finally 块中)。如果您使用的是较新的 Java 版本,请使用 try-with-resources statement

【讨论】:

  • 事实证明我的错误很简单,但这段代码绝对比我做的更好。太多的 SQL 查询使代码难以跟踪。这更简单。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 2012-10-06
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
相关资源
最近更新 更多