web-dev-qa-db-ja.com

Java sql delete row

こんにちは、データベースから行を削除しようとしています。エラーは発生していませんが、何も実行していません。ヘルプやアドバイスをいただければ幸いです。

 public static void DeleteRow(String name)
  {
     try 
     {  
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(url, username, password);

        PreparedStatement st = connection.prepareStatement("DELETE FROM Table WHERE name = " + name + ";");
        st.executeUpdate(); 
     }
     catch(Exception e)
     {
         System.out.println(e);
     }
}
7
user3268379

名前はDBのvarchar型だと思うので、このようにします

PreparedStatement st = connection.prepareStatement("DELETE FROM Table WHERE name = '" + name + "';");

名前を単一引用符で囲みます'

また、これはあなたが使用している方法ではなく、Preparedstatementを使用する適切な方法ではありません

私たち次の方法

PreparedStatement st = connection.prepareStatement("DELETE FROM Table WHERE name = ?");
st.setString(1,name);
st.executeUpdate(); 

適切なPreparedStatementの後の完全なコード

public static void DeleteRow(String name)
  {
 try 
 {  
    Class.forName("com.mysql.jdbc.Driver");
    Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement st = connection.prepareStatement("DELETE FROM Table WHERE name = ?");
st.setString(1,name);
st.executeUpdate(); 

 }
 catch(Exception e)
 {
     System.out.println(e);
 }
}
18
SpringLearner
          Class.forName("Oracle.jdbc.driver.OracleDriver");
          Connection con = DriverManager.getConnection("jdbc:Oracle:thin:@localhost:1521:XE", "MANASH_APPN","MANASH");
          PreparedStatement ps = con.prepareStatement("delete from EMP21 where empid = ?");
           ps.setInt(1,90);
           ps.executeUpdate();
          con.commit();
          System.out.println("Records Delete Successfully....");
         con.close();
1

Javaで文字列を連結してSQLステートメントを作成しないでください。SQLインジェクションに対して脆弱です。このようにしてください。

String selectSQL = "DELETE FROM Table WHERE name = ?";
connection.prepareStatement(selectSQL);
preparedStatement.setString(1, name);
1
jeremyjjbrown

この仲間を試してみてください。ステートメントを使用

Statement stmt = connection.createStatement();
String SQL = "DELETE FROM Table WHERE name = '"+name+"'";
stmt.executeUpdate(SQL);
0
wrecklez

開いているすべての接続を閉じる必要があります。そうしないと、接続は実装されず、エラーは表示されません。最初に学んだ教訓。

public static void DeleteRow(String name)
  {
     try 
     {  
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(url, username, password);

        PreparedStatement st = connection.prepareStatement("DELETE FROM Table WHERE name = " + name + ";");
        st.executeUpdate(); 
        connection.close();
     }
     catch(Exception e)
     {
         System.out.println(e);
     }
}

お役に立てれば

0
Sudharsun