直接使用Statement,驱动程序一般不会对sql语句作处理而直接交给数据库;
使用PreparedStament,那么形成预编译的过程,并且会对语句作字符集的转换(至少在sqlserver)中如此。
如此,有两个好处:对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;另外,可以比较好地解决系统的本地化问题。
譬如,在一个原始的英语系统上装好了sqlserver,那么它缺省的字符集是ANSI的Latin字符集;现在我们要将此系统作中文系统用,装好各种语言包,设置好location等等,我们期望用java写的application能够正常显示中文;但是,如果我们使用Statement往sqlserver里面插入中文得到将是编码丢失的问号等;这是因为更改设置以后,我们的字符集是gb2312,而sqlserver字符集没有变,中文串插入数据库中导致什么呢? latin字符集显然只有gb2312的一部分字符,如此导致编码丢失,无法正常显示。
使用PreparedStatement能够解决这个问题。
另外,PreparedStatement还能有效的防止危险字符的注入,也就是sql注入的问题。
Statement与PreparedStatement的区别
最新推荐文章于 2022-08-31 19:46:07 发布