2014-02-04 3 views
2

Здравствуйте, я пытаюсь удалить строку из моей базы данных. Я не получаю ошибок, но ничего не делает, любая помощь или совет будут замечательными!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); 
    } 
} 
+0

Что вы ожидаете, что делать? –

ответ

10

Я думаю имя тип 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); 
} 
} 
+1

@jeremyjjbrown не нужно избегать одиночных кавычек – SpringLearner

+0

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с таблицей WHERE name = 'UserTest' ' – user3268379

+0

@ user3268379 Какое имя вашей таблицы? Таблица является зарезервированным ключевым словом в mysql – SpringLearner

-1

Каждое открытое соединение должно быть закрыто, или он не будет реализован и не будет отображаться без ошибок. Сначала усвоил урок.

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

Ваш код уязвим для инъекций SQl. https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java – jeremyjjbrown

1

Вы никогда не должны создавать SQL заявления в Java с конкатенацией, а это будет уязвимо для SQL инъекций. Пожалуйста, сделайте это так.

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

попробуйте этот брат. Использование Заявление

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

это будет работать Строка дель = "DELETE FROM таблицы WHERE имя = ('" + имя + "')";

:)

1
  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();