如何获取java日期

3b6akqbq  于 2021-08-13  发布在  Java
关注(0)|答案(2)|浏览(193)

如何修复此代码?在处理日期时,应该使用什么来代替整数%d?

public static void entryAdd()
    {
        Scanner scan= new Scanner(System.in);
        System.out.print(" Student Number  :");
        int newNumber= scan.nextInt();
        System.out.print(" Entry no  :");
        int entryNumber=scan.nextInt();
        System.out.print(" Borrow Date :");
        int borrowDate=scan.nextInt();
        System.out.print("Return Date :");
        int returnDate=scan.nextInt();
        try{
            Statement stmt=con.createStatement(); 
            String query=String.format("insert into entry values( %d, %d, %d, %d, %d)", newNumber,entryNumber,borrowDate, returnDate);
            int add = stmt.executeUpdate(query);
            System.out.println("Entry Added");
        }catch(Exception e){ System.out.println(e);}

    }
qltillow

qltillow1#

可以用字符串代替日期,在mysql中可以插入字符串date。mysql将把它改为real date。

public static void entryAdd()
{
    Scanner scan= new Scanner(System.in);
    System.out.print(" Student Number  :");
    int newNumber= scan.nextInt();
    System.out.print(" Entry no  :");
    int entryNumber=scan.nextInt();
    System.out.print(" Borrow Date :");
    String borrowDate =scan.next();
    System.out.print("Return Date :");
    String returnDate =scan.next();
    try{
        PreparedStatement stmt=con.prepareStatement("insert into entry values( ?, ?, ?, ?)");
        stmt.setInt(1, neNumber);
        stmt.setInt(2, entryNumber);
        stmt.setString(3, borrowDate);
        stmt.setString(4, returnDate);
        int i=stmt.executeUpdate();   
        System.out.println("Entry Added");
    }catch(Exception e){ 
        System.out.println(e);
    } finally() {
        try {
            stmt.close();
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
9w11ddsr

9w11ddsr2#

你不应该使用 String.format 构造查询字符串。当与字符串值(或其他对象)一起使用时,它会使您的代码易受sql注入的影响或难以诊断语法错误。
正确的解决方案是:

// ...
// You may need to use `DateTimeFormatter` with a specific format, this will use yyyy-MM-dd
LocalData borrowDate = LocalDate.parse(scan.next())
LocalData returnDate = LocalDate.parse(scan.next())
try (Statement stmt = con.prepareStatement(
        "insert into entry (newNumber, entryNumber, borrow, return) values (?, ?, ?, ?)")) {
    stmt.setInt(1, newNumber);
    stmt.setInt(2, entryNumber);
    stmt.setObject(3, borrowDate);
    stmt.setObject(4, returnDate);
    stmt.executeUpdate();
}

这假设您正在插入 DATE 列,并且您的驱动程序符合JDBC4.2。
我还显式地指定要插入的列(我根据变量名猜出了列名)。这样可以防止在重新排序的列中插入数据或在添加了(可为空的)列的表更改时出现问题。

相关问题