如何获取日期java

问题描述 投票:1回答:3

如何修复此代码?在处理日期时,我应该使用什么代替整数%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);}

    }
java mysql sql jdbc
3个回答
-1
投票

您可以使用字符串代替日期,在MySQL中,您可以插入字符串日期。 MySQL会将其更改为实际日期。

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 borrow=scan.next();
    System.out.print("Return Date :");
    String return=scan.next();
    try{
        Statement stmt=con.createStatement(); 
        String query=String.format("insert into entry values( %d, %d, %d, %s, %s)", newNumber,entryNumber,borrow, return);
        int add = stmt.executeUpdate(query);
        System.out.println("Entry Added");
    }catch(Exception e){ System.out.println(e);}

}

0
投票

您不应该使用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列,并且您的驱动程序符合JDBC 4.2。

我还明确指定要插入的列(我已经根据您的变量名猜测了列名)。这样可以防止您在插入重新排序的列或添加(可空)列的表更改中遇到问题。


0
投票

您不应该使用String.format构造查询字符串。当与字符串值(或其他对象)一起使用时,它会使您的代码容易受到SQL注入的影响或难以诊断语法错误。

正确的解决方案类似于:

© www.soinside.com 2019 - 2024. All rights reserved.