我遇到了一个问题,我正在通过我的MySQL数据库生成一个ResultSet。我的查询应该每个表最多返回一行(我循环遍历几个表,按员工编号搜索)。我在一些表中输入了数据;但我的测试o / p表示结果集包含0行,并且根本不会通过ResultSet。它应该打印的o / p线永远不会出现。在我意识到它最多只返回一行之前,它处于一个while循环中,此时我只是将while(rs.next())替换为if(rs.first())。仍然没有运气。有什么建议? 我的代码如下所示:
try
{
rsTablesList = stmt.executeQuery("show tables;");
while(rsTablesList.next())
{
String tableName = rsTablesList.getString(1);
//checking if that table is a non-event table; loop is skipped in such a case
if(tableName.equalsIgnoreCase("emp"))
{
System.out.println("NOT IN EMP");
continue;
}
System.out.println("i'm in " + tableName); //tells us which table we're in
int checkEmpno = Integer.parseInt(empNoLbl.getText()); //search key
Statement s = con.createStatement();
query = "select 'eventname','lastrenewaldate', 'expdate' from " + tableName + " where 'empno'=" + checkEmpno + ";"; // eventname,
System.out.println("query is \n\t" + query + "");
rsEventDetails = s.executeQuery(query) ;
System.out.println("query executed\n");
//next two lines for the number of rows
rsEventDetails.last();
System.out.println("no. of rows is " + rsEventDetails.getRow()+ "\n\n");
if(rsEventDetails.first())
{
System.out.println("inside the if");
// i will add the row now
System.out.println("i will add the row now");
// cdTableModel.addRow(new Object[] {evtname,lastRenewalDate,expiryDate});
}
}
}
我的输出如下:
我在crm
查询是
select 'eventname','lastrenewaldate', 'expdate' from crm where 'empno'=17;
执行查询
没有。行是0
我在dgr
查询是
select 'eventname','lastrenewaldate', 'expdate' from dgr where 'empno'=17;
执行查询
没有。行是0
不在EMP中
我在eng_prof
查询是
select 'eventname','lastrenewaldate', 'expdate' from eng_prof where 'empno'=17;
执行查询
没有。行是0
我在frtol
查询是
select 'eventname','lastrenewaldate', 'expdate' from frtol where 'empno'=17;
执行查询
没有。行是0
(等等,最多17个表。)
查询中的“17”是我从用户处获取的内容。 问题是我已经在前两个表中输入了数据,crm和dgr。命令行界面中的相同查询有效;今天早上,我尝试了程序,它返回了一个包含数据的表(crm)的数据。下一次,没什么。
背景:我正在开展一个学校项目,为我父亲的办公室创建一些软件,它将帮助他们为员工组织培训等计划。 (有点像谷歌日历我猜。)我在Linux Mint上使用Netbeans和Mysql。数据库中大约有17个表。用户选择员工姓名,程序搜索数据库中与“事件”(我的测试/培训/其他必需事件的通用名称)对应的所有条目,并将它们放入JTable中。
答案 0 :(得分:0)
在创建查询时,列名和表名周围的单引号似乎导致了问题。在将它们更改为反引号时,检索工作正常,数据按预期进入。
谢谢@juergend(特别是对于很好的解释)和@nailgun!