(一)Statement接口:用于执行静态 SQL 语句并返回它所生成结果的对象,在默认情况下,同一时间每个 Statement
对象在只能打开一个 ResultSet
对象。因此,如果读取一个 ResultSet
对象与读取另一个交叉,则这两个对象必须是由不同的 Statement
对象生成的。如果存在某个语句的打开的当前 ResultSet
对象,则 Statement
接口中的所有执行方法都会隐式关闭它。
(二)Statement有两个子接口CallableStatement与PreparedStatement
(三)ResultSet
对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next
方法将光标移动到下一行;因为该方法在 ResultSet
对象没有下一行时返回 false
,所以可以在 while
循环中使用它来迭代结果集。
1、Statement的executeQuery(String sql)方法: 执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
2、PreparedStatement的executeQuery()
在此 PreparedStatement
对象中执行 SQL 查询,并返回该查询生成的 ResultSet
对象。
executeUpdate()
在此 PreparedStatement
对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT
、UPDATE
或 DELETE
语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。
第一:
prepareStatement会先初始化SQL,先把这个SQL提交到数据库中进行预处理,多次使用可提高效率。
createStatement不会初始化,没有预处理,没次都是从0开始执行SQL
第二:
prepareStatement可以替换变量
在SQL语句中可以包含?,可以用ps=conn.prepareStatement("select* from Cust where ID=?");
int sid=1001;
ps.setInt(1, sid);
rs = ps.executeQuery();
可以把?替换成变量。
而Statement只能用
int sid=1001;
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from Cust where ID="+sid);
来实现。