Java 没有为参数1指定值
我正在使用Hibernate连接postgres数据库。我正在尝试向数据库中插入一条记录。我有一个字符串数组中记录的值,该数组是从csv文件中获取的。这是我的dao代码Java 没有为参数1指定值,java,database,hibernate,postgresql,Java,Database,Hibernate,Postgresql,我正在使用Hibernate连接postgres数据库。我正在尝试向数据库中插入一条记录。我有一个字符串数组中记录的值,该数组是从csv文件中获取的。这是我的dao代码 StringBuffer query=new StringBuffer("insert into t_wonlist values("); for(int i=0;i<67;i++){ query.append(values[i]+","); } qu
StringBuffer query=new StringBuffer("insert into t_wonlist values(");
for(int i=0;i<67;i++){
query.append(values[i]+",");
}
query.deleteCharAt(query.lastIndexOf(","));
query.append(");");
sessionfactory.getCurrentSession().createSQLQuery(query.toString()).executeUpdate();
System.out.println("Query executed");
sessionfactory.getCurrentSession().flush();
我确信参数的数量是正确的。有人能帮我吗。谢谢你正在以一种奇怪的、倒退的方式处理这个问题 直接的问题可能是未能转义/引用a?在其中一个输入字符串中,因此PgJDBC认为它是一个查询参数。这并不意味着你应该通过逃避/引用问号来解决问题,这表明你采取了完全错误的方法 请阅读和阅读 您使用的是Hibernate ORM,因此通常使用JPA接口或直接Hibernate接口来创建新的域对象并持久化它们。典型的方法是新建一个对象,如果使用JPA,则使用EntityManager.persist方法;如果直接使用Hibernate来持久化实体,则使用Session.save方法 如果您想改用直接JDBC,您应该创建一个JDBC PreparedStatement,设置它的参数,然后应用它。看见由于您正在加载CSV,所以通常会在JDBC批处理中执行此操作,尽管这在PostgreSQL中实际上并没有什么好处
更好的是,由于您要导入CSV,您可能只需通过PgJDBC使用PostgreSQL内置的COPY命令,就可以将更改高效地流式传输到目标表中。您正在以一种奇怪的向后方式处理此问题 直接的问题可能是未能转义/引用a?在其中一个输入字符串中,因此PgJDBC认为它是一个查询参数。这并不意味着你应该通过逃避/引用问号来解决问题,这表明你采取了完全错误的方法 请阅读和阅读 您使用的是Hibernate ORM,因此通常使用JPA接口或直接Hibernate接口来创建新的域对象并持久化它们。典型的方法是新建一个对象,如果使用JPA,则使用EntityManager.persist方法;如果直接使用Hibernate来持久化实体,则使用Session.save方法 如果您想改用直接JDBC,您应该创建一个JDBC PreparedStatement,设置它的参数,然后应用它。看见由于您正在加载CSV,所以通常会在JDBC批处理中执行此操作,尽管这在PostgreSQL中实际上并没有什么好处
更好的是,由于您要导入CSV,您可能只需通过PgJDBC使用PostgreSQL的内置COPY命令,就可以将更改高效地流式传输到目标表中。请阅读,然后切换到使用参数化查询语句。您不应该需要使用字符串生成器构建简单的插入查询,这样做是非常不安全的-请参阅。如果您想获得有关当前代码的任何帮助,您需要显示与该错误对应的SQL的确切文本。其中一个值[i]是问号,不是吗?@dasblinkenlight。。。可能没有正确引用。请阅读,然后切换到使用参数化查询语句。您不应该需要使用字符串生成器构建简单的插入查询,这样做是非常不安全的-请参阅。如果您想获得有关当前代码的任何帮助,您需要显示与该错误对应的SQL的确切文本。其中一个值[i]是问号,不是吗?@dasblinkenlight。。。而且可能没有被正确引用。
org.postgresql.util.PSQLException: No value specified for parameter 1.