2012-08-22 44 views
7

到目前为止,只有当我在executionUpdate语句中声明值时,才能够将数据插入到SQL表中。我想知道,如果有我可以通过这些值,我将宣布作为参数的执行方法,像这样的变量的方式:使用Java将变量值插入到SQL Server中

public void updateSQL(String name, String dnsName, String ipV4, String ipV6, int statusCode) 
{ 
    try 
    { 
     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
     Connection connection = DriverManager.getConnection("jdbc:sqlserver://servername;database=databasename;integratedSecurity=true"); 

     System.out.println("Database Name: " + connection.getMetaData().getDatabaseProductName()); 

     Statement statement = connection.createStatement(); 

     statement.executeUpdate("INSERT INTO ComputerStatus(Name, DNSName, IPAddressV4, IPAddressV6, StatusCodeID)" + "VALUES(@Name, @DNSName, @IPAddressV4, @IPAddressV6, @StatusCodeID)"); 
     System.out.println("Data Inserted"); 

     ResultSet resultSet = statement.executeQuery("SELECT Name FROM ComputerStatus"); 

     while(resultSet.next()) 
     { 
      System.out.println("Computer Name: " + resultSet.getString("Name")); 
     } 

     connection.close(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
     System.err.println("Problem Connecting!"); 
    } 
} 

我试过几个不同的事情,但没有运气远。任何人都知道这是可以做到的吗?

回答

12

您可以使用PreparedStatement而不是Statement

PreparedStatement stmt = connection.prepareStatement("insert into test (firstname, lastname) values (?, ?"); 
stmt.setString(1, name); 
stmt.setString(2, lname); 
stmt.executeUpdate(); 

使用这种方法可以防止SQL注入。

+1

它应该是'stmt.executeUpdate()'[这里](http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#executeUpdate%28%29) –

+0

编辑,谢谢。 – fonini

3

看一看这里:

PreparedStatement prep = conn.prepareStatement("INSERT INTO ComputerStatus(Name, DNSName, IPAddressV4, IPAddressV6, StatusCodeID) VALUES(?, ?, ?, ?, ?)"); 
prep.setString(1, name); 
prep.setString(2, dnsName); 
prep.setString(3, ipV4name); 
prep.setString(4, ipV6); 
prep.setInt(5, statusCode); 
prep.executeUpdate(); 

this会帮助你理解。