java jdbc中Statement,ResultSet,PreparedStatement中各代表什么意思
区别:
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);
}
ResultSet 是结果集
PreparedStatement是预处理用的
ResultSet是查询到的结果集
PreparedStatement接口:它与Statement 的主要区别
(1)它包含的SQL语句是预编译的,所以当多次执行一条SQL语句时用它会更快
(2)在设置参数是可以用“?”代替。如:
PreparedStatement pstmt=conn.preparedStatement(insert into test values(?,?));
pstmt.setString(1,'gg');
pstmt.setString(2,'123');
ResultSet接口:包含了Statement和PreparedStatement的executeQuery方法中SELECT的结果集。相当于用它来读取数据库里每列的值。
2014-10-16
(1)executeUpdate()方法,一般用于执行SQL的INSERT,DELETE,UPDATE语句
(2)executeQuery()方法,一般用于执行SQL的SELECT语句,因为 它的返回值是执行SQL语句后产生的一个ResultSet接口的实例(结果集)
(3)execute()方法,即一般它执行的SQL语句既有查询又有更新值,约等于executeUpdate()和executeQuery()两个方法的合辑。
PreparedStatement接口:它与Statement 的主要区别
(1)它包含的SQL语句是预编译的,所以当多次执行一条SQL语句时用它会更快
(2)在设置参数是可以用“?”代替。如:
PreparedStatement pstmt=conn.preparedStatement(insert into test values(?,?));
pstmt.setString(1,'gg');
pstmt.setString(2,'123');
ResultSet接口:包含了Statement和PreparedStatement的executeQuery方法中SELECT的结果集。相当于用它来读取数据库里每列的值。