解析SQLDate、java.util.Date和LocalDate
我很困惑如何处理日期。有人能给我指出正确的方向吗?对于下面的代码,它会引发以下异常: org.h2.jdbc.JdbcSQLException:参数的值“11”无效 “参数索引”[90008-193] 下面是我的SQL语句,用于创建具有列类型的表:解析SQLDate、java.util.Date和LocalDate,java,h2,java-time,sql-date-functions,date,Java,H2,Java Time,Sql Date Functions,Date,我很困惑如何处理日期。有人能给我指出正确的方向吗?对于下面的代码,它会引发以下异常: org.h2.jdbc.JdbcSQLException:参数的值“11”无效 “参数索引”[90008-193] 下面是我的SQL语句,用于创建具有列类型的表: CREATE TABLE IF NOT EXISTS data " +"(id INT NOT NULL AUTO_INCREMENT," //int + " fullnam
CREATE TABLE IF NOT EXISTS data "
+"(id INT NOT NULL AUTO_INCREMENT," //int
+ " fullname varchar(30)," //String
+ " regNum varchar(10)," //String
+ " itemName varchar(30)," //String
+ " note varchar(30)," //String
+ " zHemjee int," //int
+ " fee number," //int
+ " time INT," //int
+ " date DATE," //Date
+ " totalPay BIGINT," //int
+ " expirationDate DATE);"); //Date
问题是,如果您输入了错误的索引,您就不会这样做。 您应该从1开始,而不是从2开始。
只有10个“?”,您有第11个参数,但该参数不存在。
此代码应适用于:
String sql = "INSERT INTO data
(ovogNer,regNum,itemName,note,zHemjee,hvv,
hugatsaa,date,totalPay,expirationDate)"
+ "VALUES"
+ "(?,?,?,?,?,?,?,?,?,?)";
pst = conn.prepareStatement(sql);
pst.setString(1, getFullName());
pst.setString(2, getRegNum());
pst.setString(3, getItemName());
pst.setString(4, getNote());
pst.setInt(5, getzHemjee());
pst.setInt(6, getFee());
pst.setInt(7, getTime());
pst.setDate(8, java.sql.Date.valueOf(LocalDate.now()));
pst.setDouble(9, getTotalPay());
pst.setDate(10, expirationDate);
pst.executeUpdate();
此外,在设置整数时,还出现了奇怪的“+” 问题是您输入了错误的索引。 您应该从1开始,而不是从2开始。
只有10个“?”,您有第11个参数,但该参数不存在。
此代码应适用于:
String sql = "INSERT INTO data
(ovogNer,regNum,itemName,note,zHemjee,hvv,
hugatsaa,date,totalPay,expirationDate)"
+ "VALUES"
+ "(?,?,?,?,?,?,?,?,?,?)";
pst = conn.prepareStatement(sql);
pst.setString(1, getFullName());
pst.setString(2, getRegNum());
pst.setString(3, getItemName());
pst.setString(4, getNote());
pst.setInt(5, getzHemjee());
pst.setInt(6, getFee());
pst.setInt(7, getTime());
pst.setDate(8, java.sql.Date.valueOf(LocalDate.now()));
pst.setDouble(9, getTotalPay());
pst.setDate(10, expirationDate);
pst.executeUpdate();
此外,在设置整数时,还出现了奇怪的“+” 博扬·佩特科维奇的回答是正确的。话虽如此,每当我有两个或三个以上的参数时,我总是使用索引变量来防止错误。像这样:
int index = 1;
String sql = "INSERT INTO data
(ovogNer,regNum,itemName,note,zHemjee,hvv,
hugatsaa,date,totalPay,expirationDate)"
+ "VALUES"
+ "(?,?,?,?,?,?,?,?,?,?)";
pst = conn.prepareStatement(sql);
pst.setString(index++, getFullName());
pst.setString(index++, getRegNum());
pst.setString(index++, getItemName());
pst.setString(index++, getNote());
pst.setInt(index++, getzHemjee());
pst.setInt(index++, getFee());
pst.setInt(index++, getTime());
pst.setDate(index++, java.sql.Date.valueOf(LocalDate.now()));
pst.setDouble(index++, getTotalPay());
pst.setDate(index++, expirationDate);
pst.executeUpdate();
当然,这种方法论取决于你把每件事都按正确的顺序排列(你做到了)。另一个选择是使内部常数计算成数字。但是,当您达到这一点时,您已经到了一个真正需要为SQL访问使用框架的位置。:)
[编辑]或者至少代码是“正确的”,即代码按照描述的方式工作。Bojan Petkovic的回答是正确的。话虽如此,每当我有两个或三个以上的参数时,我总是使用索引变量来防止错误。像这样:
int index = 1;
String sql = "INSERT INTO data
(ovogNer,regNum,itemName,note,zHemjee,hvv,
hugatsaa,date,totalPay,expirationDate)"
+ "VALUES"
+ "(?,?,?,?,?,?,?,?,?,?)";
pst = conn.prepareStatement(sql);
pst.setString(index++, getFullName());
pst.setString(index++, getRegNum());
pst.setString(index++, getItemName());
pst.setString(index++, getNote());
pst.setInt(index++, getzHemjee());
pst.setInt(index++, getFee());
pst.setInt(index++, getTime());
pst.setDate(index++, java.sql.Date.valueOf(LocalDate.now()));
pst.setDouble(index++, getTotalPay());
pst.setDate(index++, expirationDate);
pst.executeUpdate();
当然,这种方法论取决于你把每件事都按正确的顺序排列(你做到了)。另一个选择是使内部常数计算成数字。但是,当您达到这一点时,您已经到了一个真正需要为SQL访问使用框架的位置。:)
[编辑]或者至少代码在某种意义上是“正确的”,即代码按照所描述的方式工作。感谢您的评论,可能是重复的,但我尝试将其转换为字符串,并且我使用PreparedStatement作为我的原始代码版本。@AshfordTulgaa 2011=2017-4-2。你的“日期”被解释为一个数学表达式。上面的链接解决了这个问题。如果您使用的代码与您发布的代码不同,请发布您的实际代码…@assyslias非常感谢您这里是您告诉我的链接?这一个?可能是“谢谢你的评论”的副本,但我尝试将其转换为字符串,并使用PreparedStatement作为原始版本的代码。@AshfordTulgaa 2011=2017-4-2。你的“日期”被解释为一个数学表达式。上面的链接解决了这个问题。如果您使用的代码与您发布的代码不同,请发布您的实际代码…@assyslias非常感谢您这里是您告诉我的链接?这一个?谢谢你的回复,但是第一个索引是ID,它是自动递增的,所以我故意留下了它。你的插入查询中没有ID。因此,不应插入它。我刚刚注意到ovegner也应该是全名(猜一个拼写错误-请修复它)。在插入时,根本不需要添加id。它将由数据库自动递增。请随意从参数中删除id。感谢您的回复,但第一个索引是id,并且它是自动递增的,所以我特意留下了它。您的插入查询中没有id。因此,不应插入它。我刚刚注意到ovegner也应该是全名(猜一个拼写错误-请修复它)。在插入时,根本不需要添加id。它将由数据库自动递增。请随意从参数中删除id。