2016-09-30 18 views
0

私はこのようになりますJavaコードでSQLコードを持っている:エラー1064:SQLの構文エラー

Connection con = null; 
     PreparedStatement pstmt = null; 
     ResultSet rs = null; 
     beforeExerTestDTO dto = new beforeExerTestDTO(); 

     StringBuffer sql = new StringBuffer(); 
     sql.append(" select * "); 
     sql.append(" from n_before_exer "); 
     sql.append(" where id=?"); 
     sql.append(" and reg_date = (select max(reg_date) from n_before_exer where id=?)"); 

     try { 
      con = pool.getLocalConnection(); 
      pstmt = con.prepareStatement(sql.toString()); 
      pstmt.setString(1, id); 
      pstmt.setString(2, id); 
      System.out.println("여기까진 살까??"); 
      rs = pstmt.executeQuery(); 
      /...... 
      ...... some code/
      }catch(SQLException e){ 
      System.out.println("read : " + e); 
      System.out.println("read : " + sql); 
     }catch(Exception e){ 
      System.out.println("read : " + e.getStackTrace().toString()); 
     }finally{ 
      DBClose.close(con, pstmt, rs); 
     } 
     return dto; 
} 

ファイルには、コンソールで次のように声明を形成して実行されます場合は:

select * from n_before_exer where id=? and reg_date = (select max(reg_date) from n_before_exer where id=?) 

とは、私が試した何

java.sql.SQLEXCEPTION

スロー:

  1. 私は、MySQL Workbenchのクエリで同じことを実行しました:

をし、次のエラーました:この方法ではある

  1. :トピックショーの研究の

    Error Code: 1064. 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 '? and reg_date = (select max(reg_date) from n_before_exer where id=?)' at line 1

    ビットを注射攻撃につながる可能性があるため、好ましい方法ではありません。

  2. パラメータとしてプレースホルダを使用することをお勧めしました

誰も私が右の好ましい方法でこの文を構築することができますかどうかはあなたがプリペアドステートメントを使用する必要があり、私のために少し複雑

おかげ

+0

あなたが交換します「?」クエリを実行する前のパラメータ? –

+1

@DanteFañaBadia:エラーステートメントの周りに余分なコードを追加しました。 –

+0

私はパラメータに問題があると思われますが、パラメータが正しく設定されていないようです。 、ちょうどデバッグのために提案する。 –

答えて

0

をしてくださいようだ:

Connection con; // get a connection 
PreparedStatement ps = con.prepareStatement(sql); 
ps.setInt(1, someInt); 
ps.setInt(2, someOtherInt); 

ResultSet rs = ps.executeQuery(); 
while (rs.next()) { 
    // process each record 
} 
+0

SQLエラー文の前後に余分なコードを追加しました。私はすでにあなたが私に尋ねたことをやっていると思います。あなたは更新された質問を見ることができますか?おかげで –

+0

あなたは実際に接続を作成しますか?私はこれがどこで起こっても見ない。 –

0

文中の文章が正しいようです。 Javaファイルにエンコードの問題がありますか?

+0

ファイルはKevinのUTF-8を使用しますが、データも韓国語にすることができます。私はそれが前に働いていたと思います。 –

+0

SQL文に全角文字があると思います。 – Kevin

0

pstmt.setString(1、id);

私はこの問題は、IDの型が文字列ではないということです、あなたは試してみるためにこれを使用することができると思います:

関連する問題