Java Mysql JDBC-不输入结果集+;行数不正确
我在使用MySQL数据库生成的结果集时遇到了一个问题。我的查询应该在每个表中最多返回一行(我正在按员工编号搜索多个表)。我在一些表格中输入了数据;但是我的测试o/p说resultset包含0行,根本不经过resultset。应该打印的o/p行从未出现。在我意识到它最多只能返回一行之前,它是在一个while循环中,此时我将while(rs.next())替换为if(rs.first())。还是不走运。有什么建议吗? 我的代码如下所示:Java Mysql JDBC-不输入结果集+;行数不正确,java,mysql,netbeans,jdbc,Java,Mysql,Netbeans,Jdbc,我在使用MySQL数据库生成的结果集时遇到了一个问题。我的查询应该在每个表中最多返回一行(我正在按员工编号搜索多个表)。我在一些表格中输入了数据;但是我的测试o/p说resultset包含0行,根本不经过resultset。应该打印的o/p行从未出现。在我意识到它最多只能返回一行之前,它是在一个while循环中,此时我将while(rs.next())替换为if(rs.first())。还是不走运。有什么建议吗? 我的代码如下所示: try { rsTablesList = stmt.e
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});
}
}
}
我的输出如下所示:
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;
select 'eventname','lastrenewaldate', 'expdate' from dgr where 'empno'=17;
select 'eventname','lastrenewaldate', 'expdate' from eng_prof where 'empno'=17;
select 'eventname','lastrenewaldate', 'expdate' from frtol where 'empno'=17;
执行的查询
行数为0
我在dgr
疑问是
select 'eventname','lastrenewaldate', 'expdate' from crm where 'empno'=17;
select 'eventname','lastrenewaldate', 'expdate' from dgr where 'empno'=17;
select 'eventname','lastrenewaldate', 'expdate' from eng_prof where 'empno'=17;
select 'eventname','lastrenewaldate', 'expdate' from frtol where 'empno'=17;
执行的查询
行数为0
不是在EMP中
我在英语系,教授
疑问是
select 'eventname','lastrenewaldate', 'expdate' from crm where 'empno'=17;
select 'eventname','lastrenewaldate', 'expdate' from dgr where 'empno'=17;
select 'eventname','lastrenewaldate', 'expdate' from eng_prof where 'empno'=17;
select 'eventname','lastrenewaldate', 'expdate' from frtol where 'empno'=17;
执行的查询
行数为0
我在法国
疑问是
select 'eventname','lastrenewaldate', 'expdate' from crm where 'empno'=17;
select 'eventname','lastrenewaldate', 'expdate' from dgr where 'empno'=17;
select 'eventname','lastrenewaldate', 'expdate' from eng_prof where 'empno'=17;
select 'eventname','lastrenewaldate', 'expdate' from frtol where 'empno'=17;
执行的查询
行数为0
(以此类推,最多17张表。)
查询中的“17”是我从用户那里提取的empno。
问题是,我已经在前两个表(crm和dgr)中输入了数据。命令行界面中的同一查询工作;今天早上,我试用了这个程序,它返回了一个包含数据的表(crm)的数据。下一次继续,什么都没有
背景:我正在做一个学校项目,为我爸爸的办公室创建一些软件,它将帮助他们为员工组织培训等日程安排。(我想有点像谷歌日历。)我在LinuxMint上使用Netbeans和Mysql。数据库中大约有17个表。用户选择员工姓名,程序搜索数据库中与“事件”(测试/培训/其他所需事件的通用名称)对应的所有条目,并将其放入JTable中。在创建查询时,列名和表名周围的单引号似乎导致了问题。将它们更改为backticks后,检索工作正常,数据按预期输入
谢谢你,@juergend(特别是对这个好的解释)和@nalkun 在创建查询时,列名和表名周围的单引号似乎导致了这个问题。将它们更改为backticks后,检索工作正常,数据按预期输入
谢谢你,@juergend(特别是对这个好的解释)和@nalkun 不要在列名或表名周围使用引号。如果你需要避开其中的一些,可以使用反勾号。因此使用
where'empno'=17
转换为:获取所有记录,其中字符串empno
等于数字17
,这显然总是false
@juergend实际上我之前在创建没有单引号的查询时遇到了问题。它将返回一个错误,说明找不到这样的列。这里有几篇同样有问题的帖子得出结论说,这是让它工作的方法。我的错误消失了,所以我认为它解决了问题。这是像你说的那样逃离他们吗?在这种情况下,我将改为backticks...columnName'而不是columnName'是go@nailgun好的,谢谢!我会做出改变。:)@juergend刚刚看到了第二部分,感谢您的清晰解释!知道了。我现在得睡觉了,明天早上我会测试一下,然后告诉你我发现了什么!不要在列名或表名周围使用引号。如果你需要避开其中的一些,可以使用反勾号。因此使用where'empno'=17
转换为:获取所有记录,其中字符串empno
等于数字17
,这显然总是false
@juergend实际上我之前在创建没有单引号的查询时遇到了问题。它将返回一个错误,说明找不到这样的列。这里有几篇同样有问题的帖子得出结论说,这是让它工作的方法。我的错误消失了,所以我认为它解决了问题。这是像你说的那样逃离他们吗?在这种情况下,我将改为backticks...columnName'而不是columnName'是go@nailgun好的,谢谢!我会做出改变。:)@juergend刚刚看到了第二部分,感谢您的清晰解释!知道了。我现在得睡觉了,明天早上我会测试一下,然后告诉你我发现了什么!