Java 在线程上运行带有返回值的查询
返回值在此行上返回null: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
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 + "';");