2014-10-11 42 views
0

我手动使用此查询,它工作正常,我失踪了?如果我不使用WHERE,它会很好地执行。MySQL语法异常,手动工作

for (ArrayList<String> match : matches) { 
    System.out.println(match.get(0)); 

    // String 
    // 7412095225787794836 

    String query1 = "SELECT COUNT(*) FROM `matches_players` WHERE `match_id` = ?"; 
    PreparedStatement preparedStmt1 = (PreparedStatement) conn.prepareStatement(query1); 
    preparedStmt1.setString(1, match.get(0)); 
    ResultSet rs1 = preparedStmt1.executeQuery(query1); 
    // 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 '?' at line 1 

    while (rs1.next()) { 
     System.out.println("players=" + rs1.getInt("COUNT(*)")); 
    } 
} 
+0

'match_id'列是否有'INT'类型?你可以试试'prepareStmt1.setInt(1,match.get(0).intValue());' – 2014-10-11 16:21:05

+0

@OllieJones这是一个字符串。我知道,那很愚蠢。但它来自ArrayList 。 – Kenny 2014-10-11 16:22:22

+0

有时整数作为字符串返回,具体取决于所使用的驱动程序。你能看到字段match_id的DDL吗?我敢打赌它是整数。 – 2014-10-11 16:25:19

回答

2

我不认为executeQuery方法需要一个参数。 SQL文本已经在准备中提供。尝试从executeQuery方法中删除参数。

替换此:

ResultSet rs1 = preparedStmt1.executeQuery(query1); 
              ^^^^^^ 

有了这个:

ResultSet rs1 = preparedStmt1.executeQuery(); 

而看到有多大,让烟雾球。

+0

就是这样,非常感谢! – Kenny 2014-10-11 16:31:51