Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在线程上运行带有返回值的查询_Java_Sql_Multithreading_Bukkit - Fatal编程技术网

Java 在线程上运行带有返回值的查询

Java 在线程上运行带有返回值的查询,java,sql,multithreading,bukkit,Java,Sql,Multithreading,Bukkit,返回值在此行上返回null: public String getCurrentGuild(final String playername) { Thread t = new Thread(new Runnable() { @Override public void run() { try { Class.forName("com.mysql.jdbc.Dri

返回值在此行上返回null:

public String getCurrentGuild(final String playername) {

        Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    Class.forName("com.mysql.jdbc.Driver");
                    conn = DriverManager.getConnection(DB_URL, USER, PASS);
                    DatabaseMetaData dbm = conn.getMetaData();
                    stmt = conn.createStatement();

                    ResultSet set = stmt.executeQuery("SELECT CurrentGuild FROM Players WHERE Username='" + playername + "';");
                    if (set.next()) {
                        guildss = set.getString("CurrentGuild");
                    }
                } catch (SQLException se) {
                    //Handle errors for JDBC
                    se.printStackTrace();
                } catch (Exception e) {
                    //Handle errors for Class.forName
                    e.printStackTrace();
                } finally {
                    //finally block used to close resources
                    try {
                        if (stmt != null) {
                            conn.close();
                        }
                    } catch (SQLException se) {
                    }// do nothing
                    try {
                        if (conn != null) {
                            conn.close();
                        }
                    } catch (SQLException se) {
                        se.printStackTrace();
                    }//end finally try
                }//en

            }
        });
        t.start();
        try {
            t.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return guildss;
    }

还有什么方法可以让我更快地得到结果吗?

在查询中尝试
而不是
=

像这样的-

if(!gs.getCurrentGuild(p.getName()).equalsIgnoreCase("-"))

你在哪里定义公会?如果它是在runnable中访问的,它必须是最终的并且不能更改,您是否编译了代码?以这种方式使用
线程
有什么好处?如果您“拥有”一个
对象
监视器锁或
可重入锁
可能是一个更好的选择,那么
加入
(因为在您调用它时线程可能还没有实际启动),则与!gs.getCurrentGuild与提供的代码相对应。。
ResultSet set = stmt.executeQuery("SELECT CurrentGuild FROM Players WHERE Username like '" + playername + "';");