2016-11-27 65 views
-1

我有一个SQLite数据库连接到Eclipse中的Java项目。当我给出一个硬编码的指定ID如'3'时,我可以从数据库中删除条目。我试图改变代码,以便让用户手动传递任何数字并让它删除该条目。从SQLite Databse中删除

public static String deleteRecords(String NumberDelete){ 
Connection dbConnection = null; 
Statement statement = null; 
try{ 
dbConnection = getDBConnection(); 
dbConnection.setAutoCommit(false); 
statement = dbConnection.createStatement(); 
String sql = "DELETE from employees where ID='NumberDelete';"; 
statement.executeUpdate(sql); 
dbConnection.commit(); 
statement.close(); 
dbConnection.close(); 
} catch(Exception e) { 
System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
System.exit(0); 
} 
return NumberDelete; 
} 

回答

-1

用户输入,你可能想看看扫描仪类:https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

一旦你得到来自用户的整数,解析它,并将其存储在一个变量,你可以简单地使用字符串连接:

String sql = "DELETE from employees where ID='" + userInput + "';"; 
+0

感谢您的支持!知道这将是一个简单的解决方案。 –

+0

不要串连SQL查询;它会导致SQL注入的风险。使用查询参数。 –

0

您需要使用PreparedStatement传递参数进行查询并执行它,该方法将是这样的:

public static String deleteRecords(String NumberDelete) { 
    Connection dbConnection = null; 
    PreparedStatement statement = null; 
    String sql = "DELETE from employees where ID= ? ;"; 
    try { 
     dbConnection = getDBConnection(); 
     dbConnection.setAutoCommit(false); 
     statement = dbConnection.prepareStatement(sql); 
     statement.setString(1, NumberDelete); 
     statement.executeUpdate(sql); 
     dbConnection.commit(); 
     statement.close(); 
     dbConnection.close(); 
    } catch (Exception e) { 
     System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
     System.exit(0); 
    } 
    return NumberDelete; 
} 

这将设置查询的数量和执行它。如果数字是int,那么您需要使用setInt来设置该值。 HerePreparedStatement的javadoc。