解决Failed to get a string value from com.hxtt.e.j:问题

我使用的是Access和eclipse,在使用sql中的修改更新操作(将用户名为000的用户 密码改为000,身份改为00)时,出现了以下报错。在网上没有搜到相关问题,记录一下。(解决了才发现,是个粗心的弱智问题Orz)

java.sql.SQLException: Failed to get a string value from com.hxtt.e.j: false AND '000'
    at com.hxtt.global.SQLState.SQLException(Unknown Source)
    at com.hxtt.global.SQLState.transferValueException(Unknown Source)
    at com.hxtt.global.af.for(Unknown Source)
    at com.hxtt.global.af.e(Unknown Source)
    at com.hxtt.sql.access.g.a(Unknown Source)
    at com.hxtt.sql.access.k.a(Unknown Source)
    at com.hxtt.sql.access.k.a(Unknown Source)
    at com.hxtt.sql.access.a4.a(Unknown Source)
    at com.hxtt.sql.z.a(Unknown Source)
    at com.hxtt.sql.b9.a(Unknown Source)
    at com.hxtt.sql.b3.a(Unknown Source)
    at com.hxtt.sql.dw.a(Unknown Source)
    at com.hxtt.sql.bv.a(Unknown Source)
    at com.hxtt.sql.bv.a(Unknown Source)
    at com.hxtt.sql.bv.a(Unknown Source)
    at com.hxtt.sql.al.a(Unknown Source)
    at com.hxtt.sql.al.a(Unknown Source)
    at com.hxtt.sql.al.a(Unknown Source)
    at com.hxtt.sql.al.executeUpdate(Unknown Source)
    at DBCon.change(DBCon.java:119)
    at ManagerManageTableFrame.actionPerformed(ManagerManageTableFrame.java:93)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$300(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

 

 出错的关键代码如下:

		String a1Name = "用户名 ";
		String a2Name = "密码";
		String a3Name = "身份";
		String a1 = a1Name + " = '" + attribute1 + "'";
		String a2 = a2Name + " = '" + attribute2 + "'";
		String a3 = a3Name + " = '" + attribute3 + "'";
		String temp = "update UserInfo ";
		
		temp += "set "+ a2 +" and "+ a3;
		temp = temp + " where "+ a1; System.out.println(temp+"000"+stmt);
		try {
			stmt.executeUpdate(temp);
		} catch (SQLException e) {
			e.printStackTrace();
		}

输出sql命令,在access中运行,发现是可以运行的。但怎么多次改代码,都没能解决问题,而且如果把temp语句不做与a2,a3的拼接组合,直接写一个字符串指令为要执行的内容,则可以运行,不会报错。

最终怀疑是自己的sql语法问题,搜了一下,update语句中,set后用“,”连接,而不用and,改过后,问题解决。

另外,也解决了为何在access能运行的问题。通过搜索,发现在access、mysql等中,形如update set xx='#@^' and xxx='@!#&^'……这种的,数据库软件会将and视作逻辑运算符,所以会将 set的第一个属性名后的 整个部分 看做是判断语句,最终set的第一个属性值为1或0('1'或'0')。

例如:sql语句错写成 update UserInfo set 密码='000' and 身份='00' where 用户名='000',那么,运行后,密码为'1'或'0',而身份值未发生改变,仍为原值。

而eclipse在与数据库连接过程中,并不是把语句直接给数据库,而是通过jar包的一些处理后,才会交付给数据库软件,所以出现了同一sql语句,eclipse中报错,access不报错的问题。

 

解决后代码如下:

		String a1Name = "用户名 ";
		String a2Name = "密码";
		String a3Name = "身份";
		String a1 = a1Name + " = '" + attribute1 + "'";
		String a2 = a2Name + " = '" + attribute2 + "'";
		String a3 = a3Name + " = '" + attribute3 + "'";
		String temp = "update UserInfo ";
		
		temp += "set "+ a2 +" , "+ a3;
		temp = temp + " where "+ a1; System.out.println(temp+"000"+stmt);
		try {
			stmt.executeUpdate(temp);
		} catch (SQLException e) {
			e.printStackTrace();
		}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值