基于Hibernate的应用程序的开发过程中,通过Hibernate操作数据库时,在程序执行过程中出现了SQL Grammer Exception,Could not execute JDBC batch update的提示信息。遇到此类问题确实让人感觉摸不着头脑(尤其是第一次遇到),不过解决此类问题并不需要大动干戈地大规模修改代码,也不需要做更改数据库连接方式这样动用牛刀的事。问题的来源还在于细节上出了问题。
此类问题的出现主要来自三个方面。
1、 SQL语句中存在语法错误或是传入的数据有误;
2、 数据库的配置不合法,或者说是配置有误。较容易出现的有数据表的映射文件(,hbm.xml文件)配置有误;Hibernate.cfg.xml文件配置有误;
3、 当前的数据库用户权限不足,不能操作数据库。以是以Oracle 数据库为例,这种情况下在错误提示中会显示java.sql.BatchUpdateException: ORA-01031: insufficient privileges这样的信息。
以下是我在项目中解决SQL Grammer Exception,Could not execute JDBC batch update异常时使用的方法。
首先,根据错误提示信息查看数据表的映射文件是否配置正确,映射的列名、属性是否正确;
其次,如果提示信息中存在insufficient privileges这样的信息则查看当前使用的数据库用户是否有对当前操作的数据库、数据表具有操作权。在解决这个问题是,我也在网上找了这类问题的很多资料,造成此类问题的发生绝大多数情况下是由于数据库配置错误,或者是操作的表、数据库无权限。
再者,如果上述都没问题,那么很可能是传入的数据非法或是SQL语句不合法(比较常见的是在SQL语句中使用了默认的关键字,如Date,User之类)。并采用Debug跟踪的方式查看传入SQL语句中的变量是否正确,是否合法。
以上便是我使用的一些经验和方法。解决这个问题应该说花费了我很长的时间,差不多有一天半吧,最后才发现是由于数据库权限不足造成的。走了很多弯路啊…不过还好,还是解决了。呵呵….
接下来我把当时的出错信息粘出来,希望对遇到此类问题的朋友能有所帮助。
出错提示信息如下:
Hibernate: insert into XT_JYSHQ (ZQJC, ZSP, JKP, ZGJ, ZDJ, YJLX, SPJ, CJL, CJJE, JYRQ, ZQDM) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2007-07-26 09:55:17,000 >> WARN >> org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:71) >> SQL Error: 1031, SQLState: 42000
2007-07-26 09:55:17,000 >> ERROR >> org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:72) >> ORA-01031: insufficient privileges
2007-07-26 09:55:17,000 >> WARN >> org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:71) >> SQL Error: 1031, SQLState: 42000
2007-07-26 09:55:17,000 >> ERROR >> org.hibernate.util.JDBCExceptionReporter.logExceptions(JDBCExceptionReporter.java:72) >> ORA-01031: insufficient privileges
2007-07-26 09:55:17,000 >> ERROR >> org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:299) >> Could not synchronize database state with session
org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:65)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:202)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:230)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
.(有略)
[insert into XT_JYSHQ (ZQJC, ZSP, JKP, ZGJ, ZDJ, YJLX, SPJ, CJL, CJJE, JYRQ, ZQDM) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]; nested exception is java.sql.BatchUpdateException: ORA-01031: insufficient privileges
java.sql.BatchUpdateException: ORA-01031: insufficient privileges
at oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:459)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:3907)
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:294)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:230)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
(有略)
相关推荐
2. **数据操作语言(DML)**: 插入数据(INSERT INTO)、查询数据(SELECT)、更新数据(UPDATE)、删除数据(DELETE)是日常操作中最常用的SQL语句。 3. **数据控制语言(DCL)**: 授权(GRANT)和回收权限...
- 在DOS和Windows 9x/Me等系统中,特定目录下的批处理文件如`AUTOEXEC.BAT`会在系统启动时自动执行。 - 用户可以通过设置系统的搜索路径,使得批处理文件可以被当作外部命令来使用。 ### 三、常用命令及其功能 ###...
English grammer in use
java版本,编译原理——LL1语法分析器
grammer.java
- **异常处理**:通过 DECLARE-BEGIN-EXCEPTION-END 语句进行错误捕获和处理。 - **游标变量**:在 PL/SQL 中使用游标进行数据处理。 以上内容只是 Oracle_grammer 的冰山一角,实际学习中还需要结合具体文件 ...
- **may/might/can/could**:表示可能性、能力、许可等。 #### 详细解释 **1. 现在简单时与现在进行时** - **现在简单时**(I do):这种时态通常用来描述习惯性行为、客观事实或一般真理。例如:“She goes to ...
Python基础学习笔记Day·1中的记录以及代码已创建py文件,方便操作! Python基础学习笔记Day·1中的记录以及代码已创建py文件,方便操作! Python基础学习笔记Day·1中的记录以及代码已创建py文件,方便操作!...
If there is some changes in the database model or the entity database, you can output and update SQL in advance and preview the database rebuilding SQL script. 7.Support across the database platforms...
根据提供的文件信息,我们可以推断出这是一篇与英语语法检查相关的程序代码分析。尽管标题为 "English Grammar System" 并且描述为 "程序和词性",但是具体的内容涉及到了一个C++程序,该程序旨在对英语句子进行语法...
随机地将语法和拼写错误引入页面。 您的同事有没有离开办公桌而没有再次锁定计算机? 安装此微妙的扩展名,使他或她想知道为什么互联网上的语法错误突然暴增。 此扩展将在每个网页中随机引入最烦人的语法错误。...
英语作为一门全球通用的语言,其语法结构的复杂性和准确性对学习者的掌握程度至关重要。本文将结合“English-Grammar-Notes.zip”压缩包文件中的内容,详细探讨英语语法的各个关键部分,以期帮助学习者深入理解并...
《 Grammer Ungooder-crx 插件:挑战传统语法,探索创新表达》 在数字化时代,各种在线工具和浏览器扩展程序为我们的生活带来了极大的便利。"Grammer Ungooder-crx插件"就是这样一款独特且有趣的应用,它旨在打破...
2. **否定形式**:通过在be动词后加not构成否定句。例如: - There isn't any bread on the table. 桌子上没有面包。 - There aren't any cakes on the table. 桌子上没有蛋糕。 3. **疑问形式**:将be动词提前到...
" 或 "Can/Could you (please)...?" 等句型。通过设定情境,让学生意识到在英语中,给予命令通常比提出请求更为直接,而且通常是老板、老师或家长等有权人士才会给出命令。 接下来,教师将总结直接引语转化为间接...
这篇PPT课件是针对七年级下册英语Unit Grammar的内容,主要讲解了使用"why"引导的特殊疑问句以及询问动物来自何处的句型。在课件中,通过展示各种动物如熊猫、考拉、狮子、老虎、大象和长颈鹿的图片,激发学生的学习...
在本课件“8B+Unit2+Grammar(2)”中,主要讲解了英语语法中的两个关键点:一是如何使用“since + 时间点”和“for + 时间段”来表达时间,二是短暂动词与延续性动词的区别及其在不同语境下的应用。 1. **掌握 since...
- "either…or", "neither…nor", "not only…but also" 这些词组连接并列主语时遵循“就近原则”,即谓语动词与最近的主语一致。例如: - "Either you or I am going to the party."(或者你或者我去晚会。) - ...
能够对word里的汉语和英文进行语法检测,并能够提出修改意见,对于写论文有很大的帮助,快速比较简单。
Java_grammer 主题主要涉及的是Java编程语言的基础语法,虽然标签中提到了JavaScript,但这里我们主要聚焦在Java上。Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle收购)于1995年发布...