2016-08-14 78 views
0

我需要你的帮助。我不知道为什么我的代码没有更新数据事件,尽管我使用了正确的代码和正确的数据输入。我希望你能帮助我。这是我的任务。谢谢!用准备好的语句和用户输入更新数据

顺便提一下,这里是我的代码:

package assignment;

import java.sql.*; 
import java.util.Scanner; 

public class assignment_prepared { 

    public static void main(String[] args) throws SQLException{ 
     updateTable(); 
    } 
    private static void updateTable() throws SQLException{ 

     Connection conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/studentdatabase", "root", "password"); 

     PreparedStatement preparedStatement2 =null; 

     String UpdateSQL= "Update studentrecord set lastname = ? where studentid = ?"; 

     try{ 
      preparedStatement2 =conn.prepareStatement(UpdateSQL); 

      Scanner scan =new Scanner(System.in); 

      System.out.println("Updating..."); 

      System.out.println("Enter StudentId: "); 
      int studentid=scan.nextInt(); 

      System.out.println("Enter Lastname: "); 
      String lastname=scan.next(); 

      preparedStatement2.setInt(1, studentid); 
      preparedStatement2.setString(2, lastname); 

      preparedStatement2.executeUpdate(); 

      ResultSet myRs2= preparedStatement2.executeQuery("Select * from studentrecord"); 

      while(myRs2.next()){ 
       System.out.println(myRs2.getInt("studentid") + " " +myRs2.getString("lastname") + " " + 
         myRs2.getString("firstname") + " " +myRs2.getInt("tfee") + " " +myRs2.getDouble("fee_per_unit") + 
         " " +myRs2.getInt("total_unit") + " " +myRs2.getString("year") + " " +myRs2.getString("course") 
         + " " +myRs2.getString("section")); 

      } 

     }catch(Exception exc){ 
      exc.printStackTrace(); 
     } 
    } 
} 

输出的截图:
enter image description here

回答

2

你倒参数:

Update studentrecord set lastname = ? where studentid = ? 
            ↑     ↑ 
            1     2 

但你写道:

preparedStatement2.setInt(1, studentid); 
preparedStatement2.setString(2, lastname); 

当它应该是:

preparedStatement2.setString(1, lastname); 
preparedStatement2.setInt(2, studentid); 

除此之外,你应该隔离用户提示代码的JDBC代码,您应该使用try-与资源,因为你当前的泄漏资源(不好)。

private static void updateTable() { 
    try { 
     Scanner scan =new Scanner(System.in); 
     System.out.println("Updating..."); 
     System.out.println("Enter StudentId: "); 
     int studentid=scan.nextInt(); 
     System.out.println("Enter Lastname: "); 
     String lastname=scan.next(); 

     try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/studentdatabase", "root", "password")) { 
      updateTable(conn, studentid, lastname); 
      listRecords(conn); 
     } 
    } catch(Exception exc){ 
     exc.printStackTrace(); 
    } 
} 
private static void updateTable(Connection conn, int studentid, String lastname) throws SQLException { 
    String updateSQL = "UPDATE studentrecord SET lastname = ? WHERE studentid = ?"; 
    try (PreparedStatement stmt = conn.prepareStatement(updateSQL)) { 
     stmt.setString(1, lastname); 
     stmt.setInt(2, studentid); 
     stmt.executeUpdate(); 
    } 
} 
private static void listRecords(Connection conn) throws SQLException { 
    String selectSQL = "SELECT * FROM studentrecord"; 
    try (
     Statement stmt = conn.createStatement(); 
     ResultSet rs = stmt.executeQuery(selectSQL) 
    ) { 
     while (rs.next()) { 
      System.out.println(rs.getInt("studentid") + " " + 
           rs.getString("lastname") + " " + 
           rs.getString("firstname") + " " + 
           rs.getInt("tfee") + " " + 
           rs.getDouble("fee_per_unit") + " " + 
           rs.getInt("total_unit") + " " + 
           rs.getString("year") + " " + 
           rs.getString("course") + " " + 
           rs.getString("section")); 
     } 
    } 
}