未找到 Java Prepared statement 错误表
Posted
技术标签:
【中文标题】未找到 Java Prepared statement 错误表【英文标题】:Java Prepared statement error table not found 【发布时间】:2012-12-27 11:33:59 【问题描述】:我在使用 Talend Open Studio for Data Integration 构建数据迁移作业时遇到问题。 Talend open studio 生成 java 类。我从一个mysql表迁移到另一个。
声明:
String insert_tMysqlOutput_1 = "INSERT INTO `"
+ "workitem"
+ "` (`name`,`type`,`budgetHours`,`deadline`,`dateStart`,`dateEnd`,`dateCreated`,`projectId`,`parentWorkItem`,`description`,`dateUpdated`,`companyId`,`state`,`reporterId`,`assigneeId`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
java.sql.PreparedStatement pstmt_tMysqlOutput_1 = conn_tMysqlOutput_1
.prepareStatement(insert_tMysqlOutput_1);
错误:
Exception in component tMysqlOutput_1 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'dashboard.work_item' doesn't exist
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
at com.mysql.jdbc.Util.getInstance(Util.java:384)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2409)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2327)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2312)
at dashboard_new.copy_of_workitem_2_0.Copy_of_workitem.tMysqlInput_1Process(Copy_of_workitem.java:3677)
at dashboard_new.copy_of_workitem_2_0.Copy_of_workitem.tMysqlConnection_2Process(Copy_of_workitem.java:1109)
at dashboard_new.copy_of_workitem_2_0.Copy_of_workitem.runJobInTOS(Copy_of_workitem.java:7370)
at dashboard_new.copy_of_workitem_2_0.Copy_of_workitem.main(Copy_of_workitem.java:7069)
表结构(编辑#1)
CREATE TABLE `dashboard`.`workitem` (
`workItemId` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`type` varchar(255) NOT NULL,
`projectId` bigint(20) NOT NULL DEFAULT '0',
`companyId` bigint(20) DEFAULT NULL,
`budgetHours` decimal(10,0) DEFAULT NULL,
`deadline` datetime DEFAULT NULL,
`dateStart` datetime DEFAULT NULL,
`dateEnd` datetime DEFAULT NULL,
`parentWorkItem` bigint(20) DEFAULT NULL,
`description` text,
`state` varchar(45) DEFAULT NULL,
`reporterId` bigint(20) DEFAULT NULL,
`assigneeId` bigint(20) DEFAULT NULL,
`dateCreated` datetime DEFAULT NULL,
`dateUpdated` datetime DEFAULT NULL,
`newColumn` varchar(10) DEFAULT NULL,
PRIMARY KEY (`workItemId`),
KEY `fk_project_id_idx` (`projectId`),
KEY `fk_parent_work_item_idx` (`parentWorkItem`),
KEY `fk_workitem_company1_idx` (`companyId`),
KEY `fk_workitem_name` (`name`),
KEY `fk_workitem_assignee` (`assigneeId`),
KEY `fk_workitem_reporter` (`reporterId`),
CONSTRAINT `fk_workitem_company1` FOREIGN KEY (`companyId`) REFERENCES `company` (`companyId`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=2461 DEFAULT CHARSET=latin1
奇怪的是..在代码中找不到work_item
..所以我认为必须对语句进行一些缓存但不知道在哪里..
编辑#1: 当我将一个字段添加到表中不存在的查询中时,我得到一个错误字段未找到..所以以某种方式检查这些字段是否存在。
有人有什么想法吗?
谢谢
【问题讨论】:
很可能,您的代码没有编译,并且您运行的是旧版本的代码,该代码用于引用work_item
而不是 workitem
。
提供你插入记录的表结构..
请检查您的数据库连接。
【参考方案1】:
有东西正在访问work_item
,但表的名称是workitem
。
可能表中有一个触发器,其中存在编码错误。 或者您可能还没有发布最新版本。
【讨论】:
太愚蠢了,我确实有一个触发器,之前的表名是 work_item 所以当我更改表名时我没有更改触发器 谢谢! :) 不不不,这不是你的答案,它是 nipun 的答案,请删除你的答案..诚实以上是关于未找到 Java Prepared statement 错误表的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:未捕获的异常 'mysqli_sql_exception' 带有消息 'No index used in query/prepared statement'
java sql SQLException Can not issue data manipulation statem
JAVA JDBC mySql Prepared statement 更新查询 [重复]
具有 *ANY* 条件的 Java SQL Prepared 语句