繁体   English   中英

简单的JDBC SQL查询返回空的ResultSet

[英]Simple JDBC SQL Query returns an empty ResultSet

我一直在尝试获取一个正在使用的插件来与我的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查询不应返回空的ResultSet。

感谢您的输入,事实证明,这显然让我望而却步,QueryL和QueryG各自的查询需要交换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM