如何将变量设置为JDBC语句?

时间:2018-01-09 13:45:44

标签: java mysql jdbc

当我尝试插入变量时,它会起作用:

String insertStr="INSERT INTO  table1(username1,password1) VALUES(\"john\",\"password\")";

但无法使用变量

插入
String a=username.getText();
String b=password.getText();

try {
    Class.forName("com.mysql.jdbc.Driver");  
    Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/java_db1","root","");  

    Statement stmt=con.createStatement();        
    String insertStr="INSERT INTO  table1(username1,password1) VALUES(a,b);";
    stmt.executeUpdate(insertStr);
} catch (Exception e) { }

3 个答案:

答案 0 :(得分:2)

使用PreparedStatement代替您的方式,因为您的方式可能是SQL注入或语法错误的受害者:

String insertStr = "INSERT INTO  table1(username1,password1) VALUES(?, ?)";
try (PreparedStatement pst = con.prepareStatement(insertStr);) {
    pst.setString(1, a);
    pst.setString(2, b);
    pst.executeUpdate();
}

出于安全考虑,我建议不要使用getText()获取密码,而是使用getPassword(),以便您可以使用:

pst.setString(1, username.getText());
pst.setString(2, new String(passwordField.getPassword()));

看看这个:

答案 1 :(得分:0)

因为你正在插入" a"和" b" as String,而不是它们的变量值。

String insertStr="INSERT INTO  table1(username1,password1) VALUES("+a+","+b+");"; 

应该这样做,但我建议在这里使用准备好的声明:https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

答案 2 :(得分:0)

将变量值插入sql的最常用方法是使用PreparedStatement Object

使用此对象,您可以将变量值添加到SQL查询中,而不必担心SQL注入。 这是 PreparedStatement

的示例
//[Connection initialized before]
String insertStr="INSERT INTO  table1(username1,password1) VALUES(?,?);";
PreparedStatement myInsert = myConnectionVariable.prepareStatement(insertStr); // Your db will prepare this sql query
myInsert.setString(1, a); //depending on type you want to insert , you have to specify the position of your argument inserted (starting at 1)
myInsert.setString(2, b); // Here we set the 2nd '?' with your String b
myInsert.executeUpdate(); // It will returns the number of affected row (Works for UPDATE,INSERT,DELETE,etc...)
//You can use executeQuery() function of PreparedStatement for your SELECT queries

这比使用字符串连接更安全:VALUES("+a+","+b+");

查看Java Doc以获取更多信息;)