java statement到底是怎样执行查询的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java statement到底是怎样执行查询的?相关的知识,希望对你有一定的参考价值。

也就是executeQuery怎样执行sql,把结果放到结果集的?

java statement在查询的时候 ,就是用连接对象调用方法execute...执行sql语句,而sql语句就是查询数据最核心最关键的一段代码, 建议楼主先看看Statement语句, 然后再去看看PrepareStatement语句,后者相比于前者,有四个优点,分别是:
1, 可读性好----写的sql看起来简单明了, 易于读取和维护
2. 维护性好 ---前面这两个点是很只观的一个感受, 比如你自己分别用这两种语句,去写一条更新数据库的sql, 这个时候你一眼就能感受到PrepareStatement的可读性与维护性
3. 性能更好---由于PrepareStatement里面有一个类似缓冲区的设计, 就是会把相同的sql语句存放在里面, 当以后再遇到同样的sql语句, 它在内部就省去了很多对sql语句进行语法等判断的过程, 所以性能上优于Statement
4. 安全性好,可以防止一般的sql注入攻击, 有这个有点主要是由于前者的sql语句在拼接的过程中 很可能会出现歧义 具体的楼主可以在网上搜一下sql注入式攻击的情况.

说了这么多 不知道楼主是否能看懂, 如果有问题 随时可以交流
参考技术A statement这里是通过jdbc将SQL语句放入数据库,由数据库进行解释操作,这样速度会慢一点

preparedstatement:是java这边将原始的SQL语句进行解释,然后将中间码录入数据库,数据库直接执行,这样速度相比statement这种方式会更快!!!
参考技术B 开始以为你不会用statement,
看了你后面的追问,有点明白你的意思了。

如果你想插入一条数据,最好的办法是,先insert一条数据,再select出来结果集。

如果你有特殊的需求,那可以象下边这样。
将结果集转换成一个
list.add(Map)
集合的形式,然后,你操作集合。而不是ResultSet,
并且ResultSet只是一个接口,各个数据库有自己的实现类。直接操作它,不一定很方便。

Connection conn = null;
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
List list = new ArrayList();
while(rs.next())
Map map = new HashMap();
map.put("column1", rs.getString(1));
map.put("column2", rs.getString(2));
map.put("column2", rs.getString(2));
list.add(map);
追问

那是说不能自己插入数据到resultset中去吗?我是想我的resultset和数据库没有关系,因为根本没用到数据库,原来是要连接数据库的,我要把它改成从其他地方得到结果再放到resultset中去,从而程序不影响后边的操作,可以实现吗?(不知道我说清楚没,原谅我是个菜鸟笨蛋。。。)

追答

如果是这样,那你要引用resultset接口,自己写一个resultset类,
留下添加数据的方法。

如果后面没有使用具体的resultset类的话,可以实现你现在的想法。

本回答被提问者采纳
参考技术C 这个是人家给你的jar包,你可以打开看看啊?那些方法基本上是固定的,不过搞不好就是native方法,你就悲剧了,
native是调用别的语言的方法的关键字,c++追问

其实我是想知道怎么把查询结果放到resultset中去,这样就可以自己把结果插到里边去了,主要是想要结果集

以上是关于java statement到底是怎样执行查询的?的主要内容,如果未能解决你的问题,请参考以下文章

PreparedStatement 与 Statement

执行查询未定义

Java数据库连接与查询

在Java中 Connection、Statement、ResultSet 、PreparedSta

JAVA JDBC mySql Prepared statement 更新查询 [重复]

jdbc java数据库连接 3)Statement接口