Java中的Statement类是干什么用的?

Java中的Statement类是干什么用的?,第1张

您好,Statement类可以通过Java

API查看,它是Java和执行数据库 *** 作的一个重要方法。用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句。详情也可以通过访问Java

API查看。

 区别:

Statement执行一条sql就得编译一次,PrepareStatement只编译一次;常用后者原因在于参数设置非常方便;执行一条sql就得编译一次,后者只编译一次;还有就是sql放置的位置不同 常用后者原因在于参数设置非常方便;

一般我们使用PreparedStatement代替Statement,因为:

一.代码的可读性和可维护性.

虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次:

stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')")

perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)")

perstmt.setString(1,var1)

perstmt.setString(2,var2)

perstmt.setString(3,var3)

perstmt.setString(4,var4)

perstmt.executeUpdate()

二.PreparedStatement尽最大可能提高性能.

每一种数据库都会尽最大努力对预编译语句提供最大的性能优化.因为预编译语句有可能被重复调用.所以语句在被DB的编译器编译后的执行代码被缓存下来,那么 下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行.这并不是说只有一个 Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配.那么在任何时候就可以不需要再次编译而可以 直接执行.而statement的语句中,即使是相同一 *** 作,而由于每次 *** 作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配

三.最重要的一点是极大地提高了安全性.

使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.只要全使用预编译语句,你就用不着对传入的数据做任何过虑.而如果使用普通的statement,有可能要对drop,等做费尽心机的判断和过虑.

至于ResultSet, ResultSet 包含符合 SQL 语句中条件的所有行,并且它通过一套 get 方法(这些 get 方法可以访问当前行中的不同列)提供了对这些行中数据的访问,例如:

java.sql.Statement stmt = conn.createStatement()

ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1")

while (r.next())

{

 // 打印当前行的值。

 int i = r.getInt("a")

 String s = r.getString("b")

 float f = r.getFloat("c")

 System.out.println("ROW = " + i + " " + s + " " + f)

}

java statement在查询的时候 ,就是用连接对象调用方法execute...执行sql语句,而sql语句就是查询数据最核心最关键的一段代码, 建议楼主先看看Statement语句, 然后再去看看PrepareStatement语句,后者相比于前者,有四个优点,分别是:

1, 可读性好----写的sql看起来简单明了, 易于读取和维护

2. 维护性好 ---前面这两个点是很只观的一个感受, 比如你自己分别用这两种语句,去写一条更新数据库的sql, 这个时候你一眼就能感受到PrepareStatement的可读性与维护性

3. 性能更好---由于PrepareStatement里面有一个类似缓冲区的设计, 就是会把相同的sql语句存放在里面, 当以后再遇到同样的sql语句,它在内部就省去了很多对sql语句进行语法等判断的过程, 所以性能上优于Statement

4. 安全性好,可以防止一般的sql注入攻击, 有这个有点主要是由于前者的sql语句在拼接的过程中 很可能会出现歧义 具体的楼主可以在网上搜一下sql注入式攻击的情况.

说了这么多 不知道楼主是否能看懂, 如果有问题 随时可以交流


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6646680.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存