2016-04-05 30 views
1

私はJavaを使い慣れていません。データベーステーブルの列を更新したいと思います。このコードを実行するとこのエラーが発生します。Mysqlデータベーステーブルが更新されません

execom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:あなたはあなたのSQL構文で エラーが発生しています。私は1週間試してみました ライン1

に近い「Mcgreth」を使用する権利構文については、お使いの MySQLサーバのバージョンに対応するマニュアルを確認してください。私はどこが間違っていると思うことはできません。 plzzは私を助けます.. help.thisのための多くのおかげで私のコードです。

public boolean update(File2nd dt) { 

    try {    
     con = (Connection) DriverManager.getConnection(url, username, password);//get the connection 
     String query = "UPDATE file1 SET name='" + dt.getName()+ "',age='" + dt.getAge()+ "',color="+dt.getColor()+ "" 

       + " WHERE name=" + dt.getName(); 

     pst = (com.mysql.jdbc.PreparedStatement) con.prepareStatement(query);    
     pst.executeUpdate(); 
     System.out.println("Updated queries: "); 
     return true; 
     } catch (Exception e) { 
     System.out.println("exe" + e); 
     return false; 
     } finally { 
     try { 
       if (pst != null) { 
       pst.close(); 
       } 
       if (con != null) { 
       con.close(); 
       } 
      } catch (Exception e) { 
      } 
     } 
} 

答えて

3

colorフィールドとwhere句には、一重引用符がありません。

"UPDATE file1 SET name='" + dt.getName()+ "',age='" + dt.getAge()+ "',color='"+dt.getColor()+ "'" 
+ " WHERE name='" + dt.getName() + "'"; 

また、あなたは多くの理由のために、paramaterizedステートメントを使用する必要があります。SQLインジェクションに対する保護、改善された読みやすさと、多くの場合、より効率的なクエリの実行をお使いのDBMSで。

"UPDATE file1 SET name=?,age=?,color=? WHERE NAME =?"; 

pst.setString(1, dt.getName()); 
pst.setInt(2, dt.getAge()); 
(etc...) 
+0

私はPreparedStatementに「?」プレースホルダを含む回答を追加しようとしていました。理由としては、保守容易性とSQLインジェクション攻撃からの保護が挙げられます。 – NickJ

+0

ああ、すごくNickJに感謝しています...それは働いていました...そして、私は選択された行を色づけされたjtableに保つ方法を知りたいと思います。 plzはこれで私を助けます。 –

関連する問題