PreparedStatement接口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PreparedStatement接口相关的知识,希望对你有一定的参考价值。

从实际来讲,Statement现在已经不使用了,他已经称为了历史。

 

Statement执行关键性问题在于他需要一个完整 的字符串定义要使用的SQL语句,而PreparedStatement可以动态的设置所需要的数据。

PrepareStatement属于Statement的子接口但是想要取得这个子接口的实例化对象,依然要使用COnnection提供的方法。

prepareStatement

PreparedStatement prepareStatement(String sql)
                                   throws SQLException

里面需要传入一个SQL语句,这个SQL是一个具有特殊标记的完整的SQL。 这个接口里面有很多的Set方法。

  -更新操作  int executeUpdate()

  -查询操作   ResultSet executeQuery()

 

范例:

package cn;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;


public class Test {
    
    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:mldn";
    private static final String USER = "scott" ;
    private static final String PASSWORLD = "tiger" ;
    public static void main(String[] args)  throws Exception{
        String name = "MR‘SMITH";
        Date birthday = new Date() ;
        int age = 18 ;
        String note = "是个歪果仁" ;
        
        
        //第一步 加载数据库驱动程序,此时不需要实例化,会有容器自己负责管理
        Class.forName(DBDRIVER) ;
        //第二步 连接数据库 每一个Connection都代表一个数据库连接
        Connection conn = DriverManager.getConnection(DBURL,USER,PASSWORLD) ;
        
        String sql = "INSERT INTO member (mid,name,birthday,age,note) VALUES(myseq.nextval,?,?,?,?)";
        
        //第三步,进行数据库的数据操作
        PreparedStatement stmt = conn.prepareStatement(sql);
        stmt.setString(1,name);
        /*当使用了setDate的时候,使用的是java.sql.date而不事java.util.date,而java.util.date下有三个子类,
        Date Time     Timestmp 三个子类
        转型方法依靠long完成
        java.util.date下有一个方法将日期变为long
        */
        stmt.setDate(2, new java.sql.Date(birthday.getTime()));
        stmt.setInt(3, age);
        stmt.setString(4, note);
        
        
        int len = stmt.executeUpdate();
        
        System.out.println(conn) ;

        //关闭连接
        stmt.close();
        conn.close();
    }    

}

 

查询操作:

查询全部数据:

//第一步 加载数据库驱动程序,此时不需要实例化,会有容器自己负责管理
        Class.forName(DBDRIVER) ;
        //第二步 连接数据库 每一个Connection都代表一个数据库连接
        Connection conn = DriverManager.getConnection(DBURL,USER,PASSWORLD) ;
        
        String sql = "SELECT mid,name,birthday,age,note FROM member WHRER ORDER BY NAME";
        //第三步,进行数据库的数据操作
        PreparedStatement stmt = conn.prepareStatement(sql);
        
        ResultSet rs = stmt.executeQuery();
        while(rs.next()){
            int mid = rs.getInt(1);
            String name = rs.getString(2);
            Date birthday = rs.getDate(3);
            int age = rs.getInt(4);
            String note = rs.getString(5);
            System.out.println(mid + " " + name + " " + birthday + "" + age + "" + note);
        }
        
        
        int len = stmt.executeUpdate();
        
        System.out.println(conn) ;

        //关闭连接
        stmt.close();
        conn.close();

模糊查询:

 

以上是关于PreparedStatement接口的主要内容,如果未能解决你的问题,请参考以下文章

JDBC预编译statement(preparedstatement)和statement的比较execute与executeUpdate的区别

java中PreparedStatement与Statement相比具有啥优势

jdbc-mysql基础 PreparedStatement 要使用无参方法 execute()

Jdbc execute 比工具速度慢

PreparedStatement - 获取最后一个 ResultSet

MyBatis 源码分析——生成Statement接口实例