从一个数据库表插入到另一个
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 参数与名称绑定。
【讨论】:
以上是关于从一个数据库表插入到另一个的主要内容,如果未能解决你的问题,请参考以下文章