Java:对于Sql语句执行方式不同而出现的问题!列名: 'false' 无效

java中执行SQL语句最常用的有两种处理机制:PrepareStatement(带有预处理)和Statement

他们使用起来略有不同(其他方面的不同我在这里就不介绍了,这里主要是讲一个问题)。

举个使用的例子:有如下数据二维表,personTable

姓名(name)          年龄(age)          婚否(married)

张三                      20                     未婚

李四                       25                     已婚

设婚否字段为bit类型,即未婚=0,已婚=1

设问题,将名为李四的人年龄修改为22,婚否修改为未婚。

Connection conn = DBconn.getConnction();(假设)

首先使用PrepareStatement来执行修改语句:

String sql = "update personTable set age=?, married=? where name=?";

PrepareStatement pstmt = conn.prepareStatement(sql);

pstmt.setInt(22);

pstmt.setBoolean(false);// boolean型

pstmt.setString('李四');

pstmt.executeUpdate();

运行结果:成功!

下面使用Statement。

Statement stmt = conn.createStatement();

int age = 22;

boolean married = false;

String name = "李四";

String sql = "update personTable set age=" + age + ", married=" + married +

                  " where name=' " + name + " ' ";

stmt.executeUpdate(sql);

运行结果:失败!

报异常:

java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]列名 'true' 无效。

语句打印:update personTable set age = 22, married = false where name = '李四',这样的语句在SqlServer中是不允许的,因为它没有boolean类型,只有bit型,所以正确的语句应该是这样:

update personTable set age = 22, married = 0 where name = '李四'

这是为什么呢,为什么PreparementStatement的语句对了呢?

因为在PrepareStatement中有预处理机制,所以会将SQL语句中的true和false自动转换成1或0,而Statement则没有这个功能,所以就会出现这个错误

可是在执行如上边那种特别简单的sql语句的时候Statement的效率明显的要比PrepareStatement的高,那么Statement又怎么来处理呢?其实很简单,请看:

只要将变量sql的赋值写成这样:

String sql = "update personTable set age=" + age + ", married=" + (married ? 1 : 0) +

                  " where name=' " + name + " ' ";

怎么样是不是成功了呢?其实预处理方法里也是这么写的呢,哈哈!(众看客:原来这么简。。简单啊,这我也会啊)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值