MYSQL

2016-05-27 3 views
0

から選択してライン上MYSQLから選択して、エラーを取得ResultSet rs = st.executeQuery(fetch_title);MYSQL

エラーMSGがエラーを取得する:あなたは、あなたのSQL構文でエラーが発生しています。近く 使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアル をチェック「:09:53」行1

String test = "27-May-2016 11:09:53"; 
String fetch_title = "SELECT title FROM competitor_analysis WHERE cron_date_time="+test+""; 
Statement st = conn.createStatement(); 
ResultSet rs = st.executeQuery(fetch_title); 
+0

によって管理されるので、あなたが他のパラメータ化クエリを使用して起動する必要があり、もはや、発生しやすい小さい誤差であります。 –

答えて

5

でクエリ内の音声符であなたの日付を包みます。

String fetch_title = "SELECT title FROM competitor_analysis WHERE cron_date_time='"+test+"'"; 
+0

あなたは早かったです;) – Otterbein

3

文字列としてMySQLクエリの文字列を宣言する必要があります。あなたはこれをやっていないのでエラーになります。

あなたの場合は''に挿入する必要があります。

だから、あなたはこのようにそれを行うことができます:それはSQL Injection attacksを助長しているので、

String fetch_title = "SELECT title FROM competitor_analysis WHERE cron_date_time='"+test+"'"; 
3

あなたのコードは安全ではない、あなたは次のように代わりにPreparedStatementを使用する必要があります。

String test = "27-May-2016 11:09:53"; 
PreparedStatement ps = connection.prepareStatement(
    "SELECT title FROM competitor_analysis WHERE cron_date_time=?" 
); 
ps.setString(1, test); 
ResultSet rs = ps.executeQuery(); 

このアプローチが持っています2つの主な利点:

  1. 上記のように安全です
  2. 明示的に値をエスケープする必要はありませんとしてそれはあなたがつもりSQLインジェクションを招待、それはサイドノートにドライバ自体