2017-04-23 7 views
0

PLSは、下記のエラーを解決するために役立つとき:MySQLエラーの選択のような

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:あなたはあなたのSQL構文でエラーが発生しています。 NOW>「r.Username LIKE '%のusernameanswer%' およびr.Createtime近くで使用するために右の構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください() - INTERVAL 30 SECOND

コード

あなたのコードで
+1

我々は完全にあなたのためにそれをデバッグすることはできないかもしれませんそれ以外の場合は、完全なSQL文を共有してください。 –

+0

私は完全なコードを追加しました。ログには「usernameanswer」が表示されます。しかし、私はSQLのように使用できませんでした。 –

+2

'のように': 'の前にスペースを入れてください:' "r.Username LIKE '%usernameanswer%' ..." 'しかし、本当に必要なのは、r.Username LIKE '% "+ usernameanswer +"% "と..." ' – zedfoxus

答えて

1

私は誰かがこの質問時につまずく場合には答えとしてこれを追加するつもりだ...

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; 
} 
、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.Variant where r.Username ... 

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.Variantwhere r.Username ... 

whereの前にスペースを追加:現在の形では、クエリがこれを行います、それはusernameanswerのように見える変数です。もしそうであれば、where句は次のようになります。

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