2016-12-14 34 views
0

下面我显示了我在Java中使用动态查询的sql查询。当数据库中没有记录时Resultset引发语法错误

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DAY_OF_YEAR, -365); 

调整至12个月当前月前用0小时和MIN

cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 1, 0, 0, 0); 
String lastYearTime = String.valueOf(cal.getTimeInMillis()/1000); 

while(iterator.hasNext()) 
    { 
     tablename = Database.getTableName((String)iterator.next()); 
     fields = "status,count(*) as count"; 
     query.append("select " + fields + " from " + tablename + " where"); 
     query.append(" toid ='" + collegeId + "'"); 
     query.append(" and dtstamp >='" + lastYearTime + "'"); 
     query.append(" group by status"); 
     if(i.hasNext()) 
      query.append(" UNION "); 
    } 
    StringBuffer countquery = new StringBuffer("select status, SUM(count) as count from (" + query + ")as temp group by status "); 

    ResultSet rs = Database.executeQuery(countquery.toString(), connection); 

在上面的查询,表名将基于其他因素是随机的。 collegeId可以是任何ID。状态可以像辍学,追求或任何随机状态。

当我执行我的上述查询时,结果集正常工作并显示数据。但是当数据库中没有记录时,它会抛出一个sql语法错误1064,说明

您的SQL语法错误;检查对应于你的MySQL服务器版本为“按状态)为临时组”在行使用近1

+1

您不应将值连接到查询中。使用带参数占位符的准备语句。您当前的代码易受SQL注入攻击。 –

+0

数据库中数据的存在与否应该没有区别,因为在执行查询之前语法错误发生。当'iterator'没有任何结果时,当你构造一个查询时,更可能发生问题,因为'query'可能是一个空字符串。不幸的是,你没有显示足够的代码来证实这一点。您首先调试代码,打印出结果查询,然后使用更多代码和实际生成的查询更新您的问题。 –

回答

1

问题1正确的语法手册

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')as temp group by status' at line 1 

你有一个问题,你的查询:

select status, SUM(count) as count from (" + query + ")as temp group by status 

你应该做你的查询这里的空间:

from (" + query + ")as 

替换此")as") as

编辑

Problem2

SQL Exception : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') as temp group by status' at line 1 SQL State : 42000 Error Code : 1064 

您的查询是String所以你应该把它放在之间的两个'query'

现在替换此:

select status, SUM(count) as count from (" + query + ")as temp group by status 

通过这样的:

select status, SUM(count) as count from ('" + query + "') as temp group by status 

好运。

+0

它不起作用。无论如何感谢您的帮助。 – Tatkal

+0

我认为现在的错误是变化的,你可以请你发布你现在得到的,或者你有同样的问题? –

+0

语法错误1064 – Tatkal

0

结果集抛出语法错误时,有在数据库中没有记录

不,它不需要。如果查询中有语法错误,它会引发语法错误异常。

+0

语法错误1064 – Tatkal