java - 更新方法未在 CRUD 应用程序中更新

标签 java mysql jdbc crud

我已经用Java和MySQL制作了CRUD应用程序,但它不会更新。

  • StudentManager.displayAllStudents(); 显示所有学生。

  • 然后使用 int studentId = InputHelper.getIntegerInput("Select row to update: "); 我选择要更新的 Sudent ID,

  • 然后使用 StudentManager.update(student); 它应该更新 学生,但由于某种原因没有

这是输入的辅助类:

public class InputHelper {

    public static String getInput(String prompt) {
        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        System.out.print(prompt);
        System.out.flush();

        try {
            return stdin.readLine();
        } catch (Exception e) {
            return "Error: " + e.getMessage();
        }
    }

    public static double getDoubleInput(String prompt) {
        String input = getInput(prompt);
        return Double.parseDouble(input);
    }

    public static int getIntegerInput(String prompt) {
        String input = getInput(prompt);
        return Integer.parseInt(input);
    }

    public static Date getDateInput(String prompt) {
        String input = getInput(prompt);
        return Date.valueOf(input);
    }

    public static boolean getBooleanInput(String prompt) {
        String input = getInput(prompt);
        return Boolean.parseBoolean(input);
    }
}

这是学生经理类(class):

public class StudentManager {

    private static final Student student = new Student();
    private static final Connection conn = DBConnectionUtil.getConnection();
    private static ResultSet rs = null;


      public static Student getRow(int studentId){
        String sql = "SELECT * FROM student WHERE id = ?";


        try(PreparedStatement ps = conn.prepareStatement(sql);){

            ps.setInt(1, studentId);
            rs = ps.executeQuery();

            if(rs.next()){

                student.setStudentId(studentId);
                student.setFirstName(rs.getString(2));
                student.setLastName(rs.getString(3));
                student.setDateOfBirth(rs.getDate(4));
                student.setOnBudget(rs.getBoolean(5));
                return student;
            }else{
                System.err.println("No rows found");
                return null;
            }
        } catch (SQLException ex) {
            DBConnectionUtil.proccessException(ex);
        }finally{
            if(rs != null){
                try {
                    rs.close();
                } catch (SQLException ex) {
                   DBConnectionUtil.proccessException(ex);
                }
            }
        }
        return null;

    }
    ........

    public static void update(Student student){
        String sql = "UPDATE student SET firstName = ?, lastName = ?, dateOfBirth = ?, onBudget = ? WHERE id = ?";
        try(PreparedStatement ps = conn.prepareStatement(sql);){

            ps.setString(1, student.getFirstName());
            ps.setString(2, student.getLastName());
            ps.setDate(3, student.getDateOfBirth());
            ps.setBoolean(4, student.isOnBudget());
            ps.setInt(5, student.getStudentId());

            int rowsUpdated = ps.executeUpdate();
            if(rowsUpdated > 0){
                System.out.println("User updated");
            }else{
                System.err.println("Something went wrong.");
            }
        } catch (SQLException ex) {
            DBConnectionUtil.proccessException(ex);
        }
    }
}

这是主类:

public class Main {

    public static void main(String[] args) throws SQLException {

        StudentManager.displayAllStudents();


        int studentId = InputHelper.getIntegerInput("Select row to update: ");

        Student student = StudentManager.getRow(studentId);
        if(student == null){
            System.err.println("Row not found");
        }


         student.setFirstName(InputHelper.getInput("Enter new first name: "));
         student.setLastName(InputHelper.getInput("Enter new last name: "));
         student.setDateOfBirth(InputHelper.getDateInput("Enter new date of birth: "));
         student.setOnBudget(InputHelper.getBooleanInput("Is on budget? "));

         StudentManager.update(student);

    }

}

最佳答案

在主类中,我更改了以下内容......来自:

  student.setFirstName(InputHelper.getInput("Enter new first name: "));
  student.setLastName(InputHelper.getInput("Enter new last name: "));
  student.setDateOfBirth(InputHelper.getDateInput("Enter new date of birth: "));
  student.setOnBudget(InputHelper.getBooleanInput("Is on budget? "));

  StudentManager.update(student);

对此:

    String firstName = InputHelper.getInput("Enter new first name: ");
    student.setFirstName(firstName);

    String lastName = InputHelper.getInput("Enter new last name: ");
    student.setLastName(lastName);

    Date dob = InputHelper.getDateInput("Enter new date ");
    student.setDateOfBirth(dob);

    boolean onBudget = InputHelper.getBooleanInput("Is on budget? ");
    student.setOnBudget(onBudget);


    StudentManager.update(student);

现在更新方法有效,数据库已更新,我可以显示更改。

关于java - 更新方法未在 CRUD 应用程序中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42875610/

相关文章:

mysql - 如何在 Node js中返回嵌套的JSON

mysql - Windows 8.1 上 MySQL 的 CodeBlocks 链接器问题

mysql - 如何从我的 liferay 自定义 portlet 使用自定义 mysql 查询?

java - 如何使用Spark java从mariadb读取数据

java - Spring JpaRepository getOne() 用于 PK 为字符串的表

java - 重新加载 xml 文件后重新加载 GUI

java - 如何使用 JAVA 在 Selenium WebDriver 中打开 Chrome 开发者控制台

java - 带注释的时间线 GWT 中的日期和时间

SQLite 通过 JDBC : SQLITE_BUSY when inserting after selecting

java - DataSource.getConnection 方法在数据库重新启动或理想超时后返回已关闭的连接