2012-08-22 11 views
7

Do tej pory mogłem wstawiać dane do mojej tabeli SQL tylko wtedy, gdy zadeklarowałem wartości wewnątrz wykonywanej instrukcjiUpdate. To, co chciałem wiedzieć, czy istnieje sposób, że mogę przekazać te wartości jako zmienne, które będą Oświadczam jako parametrów w metodzie wykonującego tak:Wstawianie wartości zmiennych do SQL Server przy użyciu Javy

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

Próbowałem kilka różnych rzeczy, ale bez powodzenia tak daleko. Czy ktoś wie, czy można to zrobić?

Odpowiedz

12

Możesz użyć PreparedStatement zamiast Statement.

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

Użycie tej metody zapobiega iniekcji SQL.

+1

powinno to być 'stmt.executeUpdate()' [tutaj] (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#executeUpdate%28%29) –

+0

Edytowane, dzięki. – fonini

3

Sprawdźcie tutaj:

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 pomogą Ci zrozumieć.

Powiązane problemy