请教jdbc PreparedStatement设置参数的时候,为何需要指定具体参数类型?

作者站长头像
站长
· 阅读数 14

jdbc PreparedStatement接口中,提供了一系列方法用来设置 SQL参数。比如:

void setInt(int parameterIndex, int x);
void setString(int parameterIndex, String x);
void setObject(int parameterIndex, Object x);

既然,setObject(int parameterIndex, Object x)作为一个通用的方法,可以适配任何参数的设置,那么jdbc api中提供更具体的 类似setInt(int parameterIndex, int x)的作用何在呢?

感谢解答!

回复
1个回答
avatar
test
2024-06-19

如果你的SQL里需要的参数是一个数字类型的数字123,但是我传的是一个字符串abc,使用setObject的时候编译器会报错吗?并不会,因为什么类型的对象都可以往里填,同理传其他类型的对象也有可能会造成SQL异常,如果使用的是setInt()方法就会报错了,因为编译器知道这里必须传的是一个int类型的数值。在编写程序的时候能够发现的异常肯定比你运行这段代码发现异常后来修改的代价要来的小。还有一点,假设全部用setObject()方法并且传了正确数值能正常运行代码,当你很久之后或者其他人重新看到了这段代码:

xxx.setObject(1,xxx.get());//我就是任性,传的参数就是一个Object不告诉你它是什么类型

你还能记起来你当时是往SQL的这个位置传一个什么类型的参数吗?恐怕这个时候要去往前翻代码才能知道它具体是什么类型了,这给修改和搜索带来了麻烦。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容