mysql Java SQL查询问题,结果集不包含任何内容
我正在尝试用Java做SQL,这是我第一次。我试图选择一个表的所有部分并将其放入一个结果集,但结果集似乎是空的。MySQL客户端上的同一个查询确实显示了结果,这让我想知道我的代码出了什么问题。这可能是查询的方式,也可能是我试图从结果集中获取数据的方式
命令行MySQL客户端中的查询
mysql> SELECT * FROM accounts.sites;
+----------+-----------------------+--------------------------+--------------+----------------+
| username | domain | directory | fpm-template | nginx-template |
+----------+-----------------------+--------------------------+--------------+----------------+
| cyrus | cyrustheg.org | /var/www/sites/cyrustheg | standard | drupal |
| cyrus | tornews.org | /var/www/sites/tornews | standard | standard |
| cyrus | oletf.org | /var/www/sites/oletf | standard | standard |
| taf | theabsolutefinest.org | /var/www/sites/taf | standard | wordpress |
| taf | bitsplit.org | /var/www/sites/bitsplit | bitsplit | bitsplit |
+----------+-----------------------+--------------------------+--------------+----------------+
5 rows in set (0.00 sec)
我正在使用这段代码构建一个带有该查询的结果集
private void read() throws Exception {
try {
Class.forName("com.mysql.jdbc.Driver");
String dburl = "jdbc:mysql://" + dbHost + "/" + dbName +
"?user=" + dbUser + "&password=" + dbPass;
connect = DriverManager.getConnection(dburl);
resultSet = statement.executeQuery("SELECT * from accounts.sites");
} catch (Exception e) {
throw e;
}
}
这段代码遍历resultSet,为每个用户查找每个域。我知道问题要么出在前一段代码中,要么出在这段代码中,要么出在前一段代码中,因为我已经在while循环中添加了一个print语句,它从未被调用过。这就是为什么我得出结论,结果集是空的
public HashSet<String> listSites(String user)
throws Exception, ExcSiteNosites {
HashSet<String> list = new HashSet<String>();
boolean exists = false;
try {
read();
while (resultSet.next()) {
if (resultSet.getString("username").equals(user)) {
exists = true;
list.add(resultSet.getString("domain"));
}
}
if (!exists) {
throw new ExcSiteNosites(user);
}
} catch (Exception e) {
throw e;
} finally {
resultSet.close();
statement.close();
connect.close();
}
return list;
}
整个班级:http://pastebin.com/0DSbFey7 该类的单元测试:http://pastebin.com/9UYLEeMB
我在运行单元测试时发现了一个bug,它产生了以下输出
Listing cyrus's sites...
Listing taf's sites...
java.lang.NullPointerException
at database.Sites.listSites(Sites.java:96)
at test.dbSites.listall(dbSites.java:28)
at test.dbSites.main(dbSites.java:51)
java.lang.NullPointerException
at database.Sites.listSites(Sites.java:96)
at test.dbSites.listall(dbSites.java:28)
at test.dbSites.main(dbSites.java:53)
我认为NullPointerException可能是一个无关的问题。我已经有一段时间没有使用Java了,我也没有解决这个问题。尽管我需要帮助的问题(除非相关)只是结果集似乎是空的
# 1 楼答案
您从未在代码中初始化
statement
,它是一个私有变量,并且没有setter,因此我认为您也没有注入它所以,当你调用
read()
时,你将有一个NullPointerException
打开这将被你的^{再次捕捉并抛出
所以,在你的}
listSites()
中,你会抓住它,然后再把它扔出去,在finally
中,你会有另一个{这是你的堆栈跟踪中的一个
# 2 楼答案
在将连接用于executeQuery()之前,需要从该连接创建一条语句