从一个数据库表插入到另一个

Posted

技术标签:

【中文标题】从一个数据库表插入到另一个【英文标题】:Inserting from one database table to another 【发布时间】:2014-02-21 21:19:59 【问题描述】:

我在 mysql 数据库表中有数据。我正在选择此数据并尝试将其插入到 Netezza 数据库表中。我正在使用 spring 框架,并且有一个名为 Student 的实体类。

mySQL 数据库表中的某些字段是整数格式,但 Netezza 中的等效字段是字符格式。

我正在使用 JDBC 模板并从 mySQL 获取数据并将该 Student 对象插入到 Netezza。

这是我的方法:

 String sqlStudent="INSERT INTO STUDENT(STUDENTID,CLASSID,COURSEID,TESTDATE,SCOREDATE) VALUES (?,?,?,?,?)";
 netezzaJDBCTemplate.update(sqlStudent,new Object[] student.getStudentId(),student.getClassId(),student.getCourseId(),student.getTestDate(),student.getScoreDate));

执行此操作时出现错误。我什至尝试对 INSERT 进行硬编码。

 Exception in thread "main" org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [INSERT INTO STUDENT(STUDENTID,CLASSID,COURSEID,TESTDATE,SCOREDATE) VALUES (1521995,134,21,'2014-02-15 00:00:00','2014-02-15 00:00:00') )]; nested exception is org.netezza.error.NzSQLException: Parameter Index out of range: 1    

这是因为2个数据库的列数据类型不同吗?还是我错过了什么?

请帮忙。

【问题讨论】:

为什么new studentMapper()。 JdbcTemplate 的更新方法不接受RowMapper 对吗?您使用任何自定义实现? 好收获!所以我用值硬编码 INSERT 语句,但仍然得到一个错误 - 嵌套异常是 org.netezza.error.NzSQLException: Parameter Index out of range: 1 您似乎在某处设置了preparedStmt.setXXX(1,xxxx),而当前语句中没有任何?。发布您的完整堆栈跟踪,它可能会有所帮助。 @Rp- 我认为这是问题所在(在更新中包含 RowMapper)。您可以将其添加为答案,以便我可以选择它作为答案吗? Netezza 专为批量加载而设计。请不要逐行插入,当他发现时,您的 DBA 会很适合。性能将非常缓慢!使用 ETL 工具,或者生成一个平面文件,然后批量加载,或者将批量数据写入一个 unix 命名管道,然后 Netezza 批量加载器从中读取。 【参考方案1】:

new studentMapper() 可能是问题所在。 JdbcTemplate 的更新方法不接受 RowMapper 对吗?

如果您不使用 NamedParameterJdbcTemplate,请尝试使用它而不是常规的 JdbcTemplate,它可以让您将 sql 参数与名称绑定。

【讨论】:

以上是关于从一个数据库表插入到另一个的主要内容,如果未能解决你的问题,请参考以下文章

通过表单将数据从一个表插入到另一个表

从一个数据库表插入到另一个

SQL 将某些数据从一个表插入到另一个表

如何在展平嵌套字段后将数据​​从一个 bigquery 表流式插入到另一个表?

MYSQL将数据从一个表插入到另一个表中

如何执行存储在 MySQL 中的将 ID 从一个表插入到另一个表的过程?