私はこのようになります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
スロー:
- 私は、MySQL Workbenchのクエリで同じことを実行しました:
をし、次のエラーました:この方法ではある
- :トピックショーの研究の
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
ビットを注射攻撃につながる可能性があるため、好ましい方法ではありません。
- パラメータとしてプレースホルダを使用することをお勧めしました
誰も私が右の好ましい方法でこの文を構築することができますかどうかはあなたがプリペアドステートメントを使用する必要があり、私のために少し複雑
おかげ
あなたが交換します「?」クエリを実行する前のパラメータ? –
@DanteFañaBadia:エラーステートメントの周りに余分なコードを追加しました。 –
私はパラメータに問題があると思われますが、パラメータが正しく設定されていないようです。 、ちょうどデバッグのために提案する。 –