MysqlDataTruncation:Java将SQL日期对象作为表达式进行计算

MysqlDataTruncation:Java将SQL日期对象作为表达式进行计算,java,mysql,date,Java,Mysql,Date,我需要将日期插入数据库,所以我将从用户收到的日期转换为SQL日期,然后尝试将日期插入数据库。但在处理过程中,SQL date对象被求值为整数,因此插入失败 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String enrollNo = request.getParameter("enroll_no

我需要将日期插入数据库,所以我将从用户收到的日期转换为SQL日期,然后尝试将日期插入数据库。但在处理过程中,SQL date对象被求值为整数,因此插入失败

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String enrollNo = request.getParameter("enroll_no");
    String name = request.getParameter("name");
    String age = request.getParameter("age");

    java.util.Date date = null;
    try {
        date = new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("dob"));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Date SqlDate = new Date(date.getTime());

    process(enrollNo, name, age, SqlDate);
    response.sendRedirect("listing.jsp");
}

void process(String enrollNo, String name, String age, Date date) {
    DatabaseOperations db = new DatabaseOperations("java", "root", "", "jsp");
    db.insert(enrollNo, name, age, date);
}
DatabaseOperations类的插入方法

public int insert(Object...objects) {
    int rowsAffected = 0;
    String query = "INSERT INTO " + tableName + " VALUES (";

    for(int i=0; i<objects.length-1; i++)
        query += "'" + objects[i] + "',";

    query += objects[objects.length-1] + ")";

    try {
        rowsAffected = statement.executeUpdate(query);
    } catch (SQLException e) {
        printSQLExceptions(e);
    } 
    return rowsAffected;
}

这就是为什么应该使用参数化SQL而不是将值直接嵌入SQL本身的原因之一。请查看
PreparedStatement
并使用它。谢谢@JonSkeet,但我需要开发一个通用方法。所以可以被不同的类使用。我不明白这是如何阻止使用参数化SQL的。我假设您不想看到转换问题和SQL注入漏洞?
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: '1987' for column 'Dob' at row 1