【问题标题】:Simple JDBC SQL Query returns an empty ResultSet简单的 JDBC SQL 查询返回一个空的 ResultSet
【发布时间】:2015-12-09 08:35:30
【问题描述】:

我一直在尝试获取一个我正在开发的插件来与我的 SQL 数据库对话、创建表格和添加行似乎工作正常,但简单的 SELECT 查询返回一个空的 ResultSet。相关代码如下。

        queryL=
                "SELECT RATING"
                        + " FROM USERS"
                        + " WHERE UUID = '"
                        + UUID +"';";
        queryG=
                "SELECT RATING"
                        + " FROM " + Constants.serverName 
                        + "_USERS"
                        + " WHERE UUID = '"
                        + UUID +"';";
        try {
            stmt=con.createStatement();
            rs=stmt.executeQuery(queryL);

            if (rs.next()){
                r.setLocalRating(rs.getInt(1));
            }else{
                r.setLocalRating(0);
                registerPlayer(UUID,false);
                Dungeon.getPlugin(Dungeon.class).log("Player new to server");
            }
            stmt.close();

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        try{
            stmt=con.createStatement();
            rs=stmt.executeQuery(queryG);
            if (rs.next()){
                r.setGlobalRating(rs.getInt(1));
            }else{
                r.setGlobalRating(0);
                registerPlayer(UUID,true);
                Dungeon.getPlugin(Dungeon.class).log("Player new to network");
            }
            stmt.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

如您所见,如果 ResultSet 为空(我的数据库中尚不存在播放器),我调用了 registerPlayer。注册播放器然后抛出主键错误的重复条目,所以我知道我正在寻找的表和行存在。

以下代码显示了 registerPlayer 方法中使用的更新查询。

    if (global){
        query=
                "INSERT INTO"
                //+ Constants.dbName + "."
                + " USERS"
                + " VALUES ('"
                + UUID + "', 0)";

    }else{
        query=
                "INSERT INTO "
                //+ Constants.dbName + "."
                + Constants.serverName
                + "_USERS "
                + "VALUES ('"
                + UUID + "', 0)";
    }

最后,为了完整起见,用于创建表的查询

    String userLocalTable=
            "CREATE TABLE IF NOT EXISTS " //+ Constants.dbName + "."
                    + Constants.serverName +
                    "_USERS " +
                    "(UUID varchar(36) NOT NULL, " +
                    "RATING int NOT NULL, " +
                    "PRIMARY KEY (UUID))";
    String userGlobalTable=
            "CREATE TABLE IF NOT EXISTS " + //Constants.dbName + "."
                    "USERS " +
                    "(UUID varchar(36) NOT NULL, " +
                    "RATING int NOT NULL, " +
                    "PRIMARY KEY (UUID))";

任何对我的问题的见解将不胜感激,据我所知,SELECT 查询不应该返回空的结果集。

【问题讨论】:

  • 您是否碰巧使用 executeQuery 或 executeUpdate 来运行插入?
  • 更新使用 executeUpdate() 运行,但据我所知,它们运行良好。问题是当我知道至少有 1 行时,SELECT 什么也不返回。
  • UUID 是什么数据类型(Java 中)?
  • 我的Java变量是String,数据库中的列定义为varchar(36)
  • 我没有看到任何明显的东西。我会寻找 UUID 的差异(您是从标准输入中读取它...它是否有一个您不期望的换行符?)。等等。我的猜测是 UUID 里面没有你认为它里面有的东西。尝试用 System.out.printf("->%s

标签: java mysql sql-server jdbc


【解决方案1】:

感谢您的意见,事实证明这是很明显的事情,需要交换 QueryL 和 QueryG 各自的查询。

【讨论】:

    猜你喜欢
    • 2014-04-19
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多