JDBC SQL 准备语句调用函数但出现表达式错误

JDBC SQL prepared statement calling function but getting expression error

我正在尝试将 TIMESTAMP 插入 table,但插入的时间戳始终距现在 X 天。这是我的代码:

ps = c.prepareStatement("INSERT INTO tablename (uuid, pool, expires) VALUES (?, ?, DATE_ADD(NOW(), INTERVAL ? DAY)");
ps.setString(1, player.getUniqueId().toString());
ps.setInt(2, plugin.s.DEFAULT_POOL);
ps.setInt(3, plugin.s.PAYMENT_DAYS);

但是执行时出现语法错误。如果有更好的方法来做到这一点,或者解决这个问题,我想知道。谢谢!

首先请注意,您的查询末尾缺少结束符 ),即:

VALUES (?, ?, DATE_ADD(NOW(), INTERVAL ? DAY)

应该是:

VALUES (?, ?, DATE_ADD(NOW(), INTERVAL ? DAY))

那么您可能需要使用 new Date() 并为日期类型添加 PAYMENT_DAYS,请尝试以下操作:

public static Date addDaysToCurrentDate(int days) {
     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
     Calendar c = Calendar.getInstance();
     c.setTime(new Date()); 
     c.add(Calendar.DATE, days); 
     return sdf.parse(c.getTime());
}

ps = c.prepareStatement("INSERT INTO tablename (uuid, pool, expires) VALUES (?, ?, ?)");
ps.setString(1, player.getUniqueId().toString());
ps.setInt(2, plugin.s.DEFAULT_POOL);
ps.setInt(3, addDaysToCurrentDate(plugin.s.PAYMENT_DAYS));

尝试使用 select 而不是值

insert into ... select ?,?, DATE_ADD(NOW(), INTERVAL ? DAY))

或按照建议替换为 java 代码:

Calendar c = Calendar.getInstance();
c.setTime(new Date()); 
c.add(Calendar.DATE, days); 
ps.setDate(3, new java.sql.Date(c.getTime().getTime()));
ps = c.prepareStatement("INSERT INTO tablename (uuid, pool, expires) VALUES (?, ?, DATE_ADD(NOW(), INTERVAL ? DAY)");

? DAY,这个问号需要是一个整数。 你需要计算一下。