mybatis持久化操作“无效的类型111解决”

mybatis持久化操作时,如果插入数据为null的情况下,由于内部机制问题,会导致报错,导致出现:“无效的类型:1111”示例如下:

org.springframework.jdbc.UncategorizedSQLException: Error setting null parameter.  Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: java.sql.SQLException: 无效的列类型: 1111
; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 无效的列类型: 1111; nested exception is java.sql.SQLException: 无效的列类型: 1111
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:71)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:360)
    at $Proxy10.update(Unknown Source)

解决方案:数据库插入、更新操作需要对where后条件做处理具体处理示例如下:

<insert id="insert" parameterType="daSysYgtbl">
		insert into
		DA_SYS_YGTBL(
				ygId,
				ygName,
				ygDm,
				sortId,
				passWord,
				PHONE,
				TEL,
				loginXz,
				ipMac,
				STATUS
			)VALUES (
				#{ygId,jdbcType=NUMBER},
				#{ygName,jdbcType=VARCHAR},
				#{ygDm,jdbcType=VARCHAR},
				#{sortId,jdbcType=VARCHAR},
				#{passWord,jdbcType=VARCHAR},
				#{phone,jdbcType=VARCHAR},
				#{tel,jdbcType=VARCHAR},
				#{loginXz,jdbcType=VARCHAR},
				#{ipMac,jdbcType=VARCHAR},
				#{status,jdbcType=VARCHAR}
			)
	</insert>

<update id="update" parameterType="daSysYgtbl">
		UPDATE DA_SYS_YGTBL
		<set>
			<if test="ygId!=null and ygId!=‘‘">
				ygId = #{ygId,jdbcType=NUMBER},
			</if>
			<if test="ygName!=null and ygName!=‘‘">
				ygName = #{ygName,jdbcType=VARCHAR},
			</if>
			<if test="ygDm!=null and ygDm!=‘‘">
				ygDm = #{ygDm,jdbcType=VARCHAR},
			</if>
			<if test="sortId!=null and sortId!=‘‘">
				sortId = #{sortId,jdbcType=VARCHAR},
			</if>
			<if test="passWord!=null and passWord!=‘‘">
				passWord = #{passWord,jdbcType=VARCHAR},
			</if>
			<if test="phone!=null and phone!=‘‘">
				PHONE = #{phone,jdbcType=VARCHAR},
			</if>
			<if test="tel!=null and tel!=‘‘">
				TEL = #{tel,jdbcType=VARCHAR},
			</if>
			<if test="loginXz!=null and loginXz!=‘‘">
				loginXz = #{loginXz,jdbcType=VARCHAR},
			</if>
			<if test="ipMac!=null and ipMac!=‘‘">
				ipMac = #{ipMac,jdbcType=VARCHAR},
			</if>
			<if test="status!=null and status!=‘‘">
				STATUS = #{status,jdbcType=VARCHAR}
			</if>
		</set>
		WHERE ygId = #{ygId}
	</update>

  

时间: 2024-11-08 21:44:35

mybatis持久化操作“无效的类型111解决”的相关文章

关于mybatis如何返回list&lt;Object&gt;类型的解决

很多时候HashMap会满足不了我们的需求,所以我们可以使用自定义的方式来定义属于自己的list集合. 首先,直接在配置文件中定义一个关于student的list type 写相关model的全路径.id是这个resultMap的唯一标识,方便待会我们调用这个定义好的 resultMap <resultMap type="model.Student" id="studentList"> <result column="stu_id&quo

异常详细信息: System.InvalidOperationException: 对象的当前状态使该操作无效 真正的解决办法

源错误: 执行当前 Web 请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息. 堆栈跟踪: [InvalidOperationException: 对象的当前状态使该操作无效.] System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() +2692482 System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] b

C#报错&quot;线程间操作无效: 从不是创建控件“XXX”的线程访问它&quot;--解决示例

C# Winform程序中,使用线程对界面进行更新需要特殊处理,否则会出现异常“线程间操作无效: 从不是创建控件“taskView”的线程访问它.” 在网文“http://www.cnblogs.com/smileberry/p/3912918.html”的知道下,我做了下面的例程,希望对大家有所帮助,如果注释不够的话请访问原文. 例程是点击按钮后启动线程更新一个标签的文字,界面如下: 程序如下: using System; using System.Collections.Generic; u

关于“线程间操作无效: 从不是创建控件’textBox1‘的线程访问它”异常的解决方法

线程间操作无效: 从不是创建控件“textBox1”的线程访问它 背景:通过一个辅助线程计算出的一个值赋给textBox1.text;解决办法:1.直接在窗体的构造函数中加:System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; 此时把所有的控件 合法性线程检查全部都给禁止掉了. 2.通过代理来解决(msdn) private delegate void SetTextCallback(string text);

使用 ADOX 将 Table 添加到 Catalog 时报“类型无效”的原因和解决方法

http://blog.csdn.net/kfhzy/article/details/6020283 http://blog.csdn.net/kfhzy/article/details/6020545 李维的代码,原来链接的是MS SQL,改成ACCESS后,报 类型无效 错误 原因 除了 adDBTimeStamp 这样的 明显不支持的数据类型外,一般的,也有区别,adVarChar 在ACCESS里是adVarWChar procedure TfrmCreateTable.btnCreat

线程间操作无效: 从不是创建控件“”的线程访问它 解决办法(转)

线程间操作无效: 从不是创建控件“”的线程访问它 解决办法 http://blog.sina.com.cn/s/blog_568e66230101der7.html 利用FileSystemWatcher设计一个文件监控系统时,如果一个文件被修改或者新建,则文件修改事件会被多次触发而产生多条信息.为了将一个文件被修改一次而产生的多条信息归结为一条,在设计中新开了一个线程,在指定时间内(如2秒内)这个文件的修改被认为是一次修改,从而只产生一条信息. 这个工作完成后,又出现了另外一个问题:因为需要在

sikuli点击操作无效解决办法

最近研究sikuli做一个自动化操作的小工具,利用sikuli图像识别的能力模拟鼠标.键盘操作.脚本编写容易,调试时候却发现鼠标可以移动到键盘精灵的操作按钮,点击按钮不起作用.通过测试发现,sikuli脚本操作浏览器.windows窗口点击操作有效,使用操作系统是win7.找了很久也没有解决办法.后来发现这其实windows权限导致的,因为键盘精灵是以administrator权限启动的,而sikuli是以当前普通用户启动.所以sikuli程序是没有权限操作该软件的.解决的办法是:以admini

[Winform]线程间操作无效,从不是创建控件的线程访问它的几个解决方案,async和await?

目录 概述 取消跨线程检查 使用委托异步调用 sync和await 总结 概述 最近在qq群里有一朋友,问起在winform中怎么通过开启线程的方式去处理耗时的操作,比如,查看某个目录下所有的文件,或者符合要求的文件.下班回来,也研究了一下.发现多线程这块有点薄弱,也算是补一补吧. 在winform开发,经常会遇到需要在控件上加载大量数据(也就是常说的耗时操作),这会导致程序出现假死状态,这个时候我们就会想到线程. 在智能客户端应用程序中,这样的线程创建并管理用户界面 (UI),因而称为 UI

线程使用中常见的错误-“System.InvalidOperationException”线程间操作无效: 从不是创建控件“ ”的线程访问它。

"System.InvalidOperationException"类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 线程间操作无效: 从不是创建控件"label1"的线程访问它. 解决方法: 1 构造方法中添加 CheckForIllegalCrossThreadCalls = false; 2 方法二 invoke label1.Invoke(new Action<string>((str) => {