下面我显示了我在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
您不应将值连接到查询中。使用带参数占位符的准备语句。您当前的代码易受SQL注入攻击。 –
数据库中数据的存在与否应该没有区别,因为在执行查询之前语法错误发生。当'iterator'没有任何结果时,当你构造一个查询时,更可能发生问题,因为'query'可能是一个空字符串。不幸的是,你没有显示足够的代码来证实这一点。您首先调试代码,打印出结果查询,然后使用更多代码和实际生成的查询更新您的问题。 –