2012-08-22 12 views
7

Bisher habe ich in der Lage gewesen Daten in meine SQL-Tabelle nur einfügen, wenn ich Werte innerhalb der executedUpdate Anweisung deklarieren. Was ich wollte wissen, ob es einen Weg gibt, dass ich diese Werte als Variablen passieren kann, dass ich als Parameter in der Ausführung Methode deklarieren wird in etwa so:Einfügen von Variablenwerten in SQL Server mit Java

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!"); 
    } 
} 

Ich habe versucht paar verschiedene Dinge, aber kein Glück so weit. Wer weiß, ob das möglich ist?

Antwort

12

können Sie PreparedStatement statt Statement verwenden.

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

Auf diese Weise verhindern Sie SQL-Injektion.

+1

sollte es sein 'stmt.executeUpdate()' [hier] (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#executeUpdate%28%29) –

+0

Bearbeitet, danke. – fonini

3

Werfen Sie einen Blick hier:

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 hilft Ihnen zu verstehen.