statement是Java语句, Java语句表示某种操作, 但是没有返回值。 例如 a = 5, if语句, break语句。
区别:
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);。
Statement接口:用于执行不带参数的简单SQL语句。创建Statement实例对象后可以调用JDBC提供的3种执行SQL语句的方法:
(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的结果集。相当于用它来读取数据库里每列的值。
Connection是建立与数据库的链接,Statement算是一个连接的实例,用来执行SQL语句,ResultSet是查询后得到的结果集,得到结果后必须执行.next()方法。
给你个我刚写的例子,区别很好理解的,我一般都用Statement,这是第一次用PreraredStatement 只不过是在后面赋值而已。
public class Test {。
public static void main(String[] args){。
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";。
String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=LIBRARY";。
String userName = "sa";。
String userPwd = "";。
Connection dbConn;。
Statement stmt;。
PreparedStatement ps;。
try {
Class.forName(driverName);。
dbConn = DriverManager.getConnection(dbURL, userName, userPwd);。
stmt = dbConn.createStatement();。
ResultSet rs1 = stmt.executeQuery("select *from borrow where uno = 2011111276");。
System.out.println("statement:");。
while (rs1.next()) {。
System.out.println(rs1.getString(1)+" "+ rs1.getString(2));。
}
ps = dbConn.prepareStatement("select *from borrow where uno = ?");。
//注意这句
ps.setString(1, "2011111276");。
ResultSet rs2 = ps.executeQuery();。
System.out.println("preparedstatement:");。
while (rs2.next()) {。
System.out.println(rs2.getString(1)+" "+ rs2.getString(2));。
}
} catch (Exception e) {。
e.printStackTrace();。
}
}
Connection指数据库连接,只有连接数据库成功后才可以操作数据库。
Statement和PreparedStatement:声明语句,封装SQL语句并执行更新或查询功能。
ResultSet指查询结果集合,可以循环获取查询结果。
Statement和PreparedStatement的区别:Statement指针对一些简单的SQL语句,不带参数,直接执行,而PreparedStatement在封装SQL时可以在SQL语句中配置参数(使用?),然后通过PreparedStatement的setString等方法设置这些参数,然后执行SQL语句。
使用情况主要看你的SQL语句是否带参数了。
原文地址:http://www.qianchusai.com/statement%E5%9C%A8java%E4%B8%AD%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D.html