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 的所有功能。 三种方法executeexecuteQueryexecuteUpdate 已被更改以使之不再需要参数

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.极大的提高了安全性

 可防止暴力传密码。

 

posted @ 2020-03-12 17:08  lijiahaoAA  阅读(224)  评论(0编辑  收藏  举报