JDBC详解

来源:互联网 发布:mac两根电源线 编辑:程序博客网 时间:2024/05/16 17:00


JDBC是一套协议,是JAVA开发人员和数据库厂商达成的协议,也就是由Sun定义一组接口

接口中定义有一系列方法,但这一系列方法具体实现是有不同的数据库厂商来完成的,

JAVA开发人员需要使用不同的参数来访问特定数据库(sql server,mysql,oracle),并

通过调用接口中已经定义的方法对相应的数据库进行特定操作(CRUD)。
JDBC应用步骤
1,注册加载一个driver驱动
2,创建数据库连接(Connection)
3,创建一个Statement(发送sql)
4,执行sql语句
5,处理sql结果(select语句)
6,关闭Statement
7,关闭连接Connection。

一,注册加载驱动driver,也就是强制类加载
    1、Class.forName(driver);
       driver = "oracle.jdbc.driver.OracleDriver";

    2、Driver d=new Driver类();
       Driver d = new oracle.jdbc.driver.OracleDriver();
       DriverManager.registerDriver(d);
      
    3、编译时利用虚拟机的系统属性
       java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver 类名(文件)      

    oracle的Driver的全名oracle.jdbc.driver.OracleDriver
    mysql的Driver的全名com.mysql.jdbc.Driver
    SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver

二,创建连接
   Connection con= DriverManager.getConnection(String url,String username,String password);
    Connection连接是通过DriverManager的静态方法getConnection(.....)来得到的,这

个方法的实质是把参数传到实际的Driver中的connect()方法中来获得数据库连接的。
    oracle的URL值是由连接数据库的协议和数据库的IP地址及端口号还有要连接的库名

(DatebaseName)
    oracle URL的格式
    jdbc:oracle:thin:(协议)@XXX.XXX.X.XXX:XXXX(IP地址及端口号):XXXXXXX(所

使用的库名)
    例:jdbc:oracle:thin:@192.168.0.39:1521:TARENADB
    MySql URL的写法
    例: jdbc:mysql://192.168.8.21:3306/test
    SQLServer URL的写法
    例:jdbc:microsoft:sqlserver://192.168.8.21:1433
三,创建一个Statement
Statement ─ 由方法 createStatement 所创建。Statement 对象用于发送简单的 SQL 语句。
PreparedStatement ─ 由方法 prepareStatement 所创建。PreparedStatement 对象用于发送带有一个或多个输入参数( IN 参数)的 SQL 语句。PreparedStatement 拥有一组方法,用于设置 IN 参数的值。执行语句时,这些 IN 参数将被送到数据库中。PreparedStatement 的实例扩展了 Statement ,因此它们都包括了 Statement 的方法。PreparedStatement 对象有可能比 Statement 对象的效率更高,因为它已被预编译过并存放在那以供将来使用。
CallableStatement ─ 由方法 prepareCall 所创建。CallableStatement 对象用于执行 SQL 储存程序 ─ 一组可通过名称来调用(就象函数的调用那样)的 SQL 语句。CallableStatement 对象从 PreparedStatement 中继承了用于处理 IN 参数的方法,而且还增加了用于处理 OUT 参数和 INOUT 参数的方法。

Statement sta=con.createStatement();

PreparedStatement
可以使用参数替代sql语句中的某些参数使用 "?"代替,他先将带参数的sql语句发送到数据库,进行编译,然后PreparedStatement会将参数发送给数据库。
在使用PreparedStatement时,在设置相应参数时,要指明参数的位置和类型,以及给出参数值
根据不同的参数类型使用不同的setXXX(参数的位置,参数值)来设置参数

例:
public void insert(Student s){
        Connection con=ConnectionFactory.getConnection();//建立连接
        String sql="insert into student(id,name) values(?,?)";
        PreparedStatement ps=null;
        try {
            ps=con.prepareStatement(sql);//创建一个PreparedStatement
      int index=1;
            ps.setInt(index++,s.getStuId());  //为参数赋值
            ps.setString(index++,s.getName());
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            if(ps!=null)
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                if(con!=null)
                    try {
                        con.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
        }
    }

CallableStatement是可以用非sql语句来访问数据库,他是通过调用存储过程(PL/SQL)来访问数据库的。可以直接使用连接来调用 prepareCall(...)方法,来执行这个存储过程,"..."是存储过程的名字。

对于系统时间要去数据库时间
TimeStamp 和 Date都可以保存时间
TimeStamp可以保存时、分、秒的数据,Date只保存日期年月的信息。

SQLException是检查异常必须处理要么throws ,要么try{}catch(){}
getErrorCode()可以获得错误码,可以对错误进行查询。

四,
execute(sql); 当不知道执行的SQL语句是什么类型的时候执行 ,返回值是boolean
executeQuery(sql); 执行查询语句
executeUpdate(sql); 执行更新语句

使用Connection对象获得一个Statement,Statement中的executeQuery(String sql) 方

法可以使用select语句查询,并且返回一个结果集 ResultSet通过遍历这个结果集,
    可以获得select语句的查寻结果,ResultSet的next()方法会操作一个游标从第一条记录

的前边开始读取,直到最后一条记录。
    executeUpdate(String sql) 方法用于执行DDL和DML语句,可以update,delete操作


注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为

Statement和ResultSet是需要连接是才可以使用的,
      所以在使用结束之后有可能存在其他的Statement还需要连接,所以最后现关闭

Connection。

原创粉丝点击