2017-04-23 60 views
0

请帮助解决下面提到的错误:MySQL错误时,选择像

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法错误;检查对应于你的MySQL服务器版本正确的语法使用近“r.Username LIKE '%usernameanswer%' 和r.Createtime>手动NOW() - 间隔30秒

代码

public List <CorrekctanswerModel> answerlist(String usernameanswer) throws Exception { 
     log.info("daomimpl" + usernameanswer); 
    List<CorrekctanswerModel> answerarray = new ArrayList<CorrekctanswerModel>(); 

    Connection c = null; 
    PreparedStatement ps = null; 
    ResultSet rs = null; 

    String sql = " select s.NAME as Subject, d.value as variant, r.Username, r.UserAnswer, r.Correctanswer, r.Createtime from resultlog r " + 

       " inner join test_table t on t.ID = r.QuestionId " + 

       " inner join subject s on s.ID= t.SUBJECT " + 

       " inner join dictionary d on d.ID = t.Variant" + 

       "where r.Username LIKE '%usernameanswer%' and r.Createtime > NOW() - INTERVAL 30 SECOND " ; 

    try { 

     c = DbHelper.getConnection(); 

     if (c != null) { 

      ps = c.prepareStatement(sql); 

      rs = ps.executeQuery(); 



      while (rs.next()) { 

       CorrekctanswerModel rep = new CorrekctanswerModel(); 
       rep.setSubject(rs.getString("Subject")); 
       rep.setVariant(rs.getString("variant")); 
       rep.setUsername(rs.getString("Username")); 
       rep.setUseranswer(rs.getString("UserAnswer")); 
       rep.setCorrekctanswer(rs.getString("Correctanswer")); 
       rep.setCreatedate(rs.getDate("Createtime")); 


        answerarray.add(rep); 


      } 
     } 

    } catch (Exception ex) { 
     ex.printStackTrace(); 


    } finally { 
     JdbcUtility.close(c, ps, rs); 
    } 

    return answerarray; 
} 
+1

请分享完整的SQL语句,否则我们可能无法完全为您调试它。 –

+0

我已添加完整的代码。在日志中,你会看到我获得“usernameanswer”。但我不能在sql中使用。 –

+2

在'where'之前放置一个空格,如下所示:'“其中r.Username LIKE'%usernameanswer%'...”'。然而,你真正需要的是哪里?'用户名LIKE'%“+ usernameanswer +”%'和...“' – zedfoxus

回答

1

我要添加为以防有人绊倒在这个问题的答案...

在你的代码,用这些行生成的SQL:

String sql = " select <fields> from resultlog r " + 
      " inner join test_table t on t.ID = r.QuestionId " + 
      " inner join subject s on s.ID= t.SUBJECT " + 
      " inner join dictionary d on d.ID = t.Variant" + 
      "where r.Username LIKE '%usernameanswer%' and ... " ; 

where之前应该有一个空格或之后有一个空格。在其目前的形式,查询将做到这一点:

... inner join dictionary d on d.ID = t.Variantwhere r.Username ... 

where前添加一个空格,像这样:

String sql = " select <fields> from resultlog r " + 
      " inner join test_table t on t.ID = r.QuestionId " + 
      " inner join subject s on s.ID= t.SUBJECT " + 
      " inner join dictionary d on d.ID = t.Variant" + 
      " where r.Username LIKE '%usernameanswer%' and ... " ; 

将导致您的查询写成这样:

... inner join dictionary d on d.ID = t.Variant where r.Username ... 

而且,它看起来像usernameanswer是一个变量。如果是,where子句将如下所示:

   " where r.Username LIKE '%" + usernameanswer + "%' and ... " ;