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
,这个问号需要是一个整数。
你需要计算一下。
我正在尝试将 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
,这个问号需要是一个整数。
你需要计算一下。