Statement和PrepareStatement的使用及JDBC技术的步骤总结

JDBC连接的几个步骤

  • String url = "jdbc:hsqldb:hsql://localhost";//连接数据库的url
  • String driver = "org.hsqldb.jdbcDriver"; //建立hsqldb的驱动
  • String user="sa"; //用户名
  • String pass=""; //密码
  • Class.forName(driver);//手动加载,将驱动类的class文件装载到内存,并且形成一个描述此驱动类结构的Class类实例,并且初始化此驱动类,这样jvm就可以使用它了。
  • String sql="select * from stu where username=? and pass=?";//定义sql语句
  • Connection con = DriverManager.getConnection(url, user, pass);//jdbc建立连接
  • PreparedStatement pstmt=con.prepareStatement(sql);
    Statement stat = con.createStatement(sql);
    //准备Statement或者prepareStatement执行sql语句
  • //PrepareStatement的setString()方法从1到n插入值(表单提交的name)
    pstmt.setString(1,username);
    pstmt.setString(2,password);
    ResultSet rs=pstmt.executeQuery();
    if(rs.next()){
    return "success";
    }else{ return "error";
    }
  • 关闭资源

Statement和PrepareStatement区别

Statement

每次都会执行SQL语句,相关数据库都要执行SQL语句的编译。
Statement为一条Sql语句生成执行计划,
如果要执行两条sql语句
select colume from table where colume=1;
select colume from table where colume=2;
会生成两个执行计划
一千个查询就生成一千个执行计划!

1.创建Statement对象

Connection con = DriverManager.getConnection(url, user, pass);            
String sql =  "";             
Statement stat = con.createStatement(sql);      
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table2");           

2.使用Statement对象执行语句

Statement 接口提供了三种执行 SQL 语句的方法:executeQuery、executeUpdate 和execute。使用哪一个方法由 SQL 语句所产生的内容决定。

stat.exceuteQuery():

返回值是一个结果集Result。该结果集永远不能为null。                   
用于产生单个结果集的语句,例如 SELECT 语句                   
Statement stat = con.createStatement(sql);    
ResultSet rs = stat.executeQuery();

stat.executeUpdate():

返回值是int型数据。该值代表执行insert,update,delete语句后的更新行数。若为0,则表示没有执行成功!                 
用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQLDDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。
stat.executeUpdate(sql);

stat.execute():

用于执行返回多个结果集、多个更新计数或二者组合的语句。

PrepareStatement

用于处理动态SQL语句,在执行前会有一个预编译过程,这个过程是有时间开销的,虽然相对数据库的操作,该时间开销可以忽略不计,  
但是PreparedStatement的预编译结果会被缓存,下次执行相同的预编译语句时,就不需要编译,只要将参数直接传入编译过的语句执行代码  
中就会得到执行,所以,对于批量处理可以大大提高效率。
(1) PreparedStatement接口继承Statement,PreparedStatement 实例包含已编译的 SQL 语句,  
   所以其执行速度要快于 Statement 对象。
(2)作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能。  
  三种方法**execute**、 **executeQuery** 和 **executeUpdate** 已被更改以使之不再需要参数      

1.创建prepareStatement对象

Connection con = DriverManager.getConnection(url, user, pass);            
String sql =  "";             
PrepareStatement pstmt = con.PrepareStatement(sql);      
ResultSet rs = pstmt.executeQuery("SELECT a, b, c FROM Table2");

2.使用PaepareStatement对象执行语句

PreparedStatement接口继承Statement。所以也为executeQuery、executeUpdate 和execute三种。

pstmt.exceuteQuery():

返回值是一个结果集Result。该结果集永远不能为null。                
用于产生单个结果集的语句,例如 SELECT 语句                   
Statement stat = con.createStatement(sql);    
ResultSet rs = stat.executeQuery();

pstmt.executeUpdate():

返回值是int型数据,该值代表执行insert,update,delete语句后的更新行数。若为0,则表示没有执行成功!           
用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQLDDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。
stat.executeUpdate(sql);

pstmt.execute():

用于执行返回多个结果集、多个更新计数或二者组合的语句。
该语句可以是任何种类的 SQL 语句 
execute 方法返回一个 boolean 值,以指示第一个结果的形式。必须调用 getResultSet 或 getUpdateCount 方法来检索结果,并且必须调用 getMoreResults 移动到任何后面的结果。 
返回: 
如果第一个结果是 ResultSet 对象,则返回 true;如果第一个结果是更新计数或者没有结果,则返回 false 
意思就是如果是查询的话返回true,如果是更新或插入的话就返回false了;

PrePareStatement的优势

1.代码的可读性和可维护性更强

stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");//stmt是Statement对象实例

perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
pstmt.setString(1,var1);
pstmt.setString(2,var2);
pstmt.setString(3,var3);
pstmt.setString(4,var4);
pstmt.executeUpdate(); //prestmt是 PreparedStatement 对象实例

2.PrePareStatement更加提升性能

3.极大的提高了安全性

可防止暴力传密码。

你可能感兴趣的:(JDBC,数据库)