在Eclipse中通过JDBC连接Oracle数据库并操作

一、JDBC释义

  JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,并且可跨平台运行,并且不受数据库供应商的限制。

 

二、JDBC连接Oracle数据库的流程及原理

 

1)在开发环境中加载指定数据库的驱动程序。

  本例使用的开发环境是Eclipse(Luna),数据库是Oracle,Oracle支持JDBC的驱动在下载时已经自带,在本地的安装位置\product\11.2.0\dbhome_1\jdbc\lib中,文件名为ojdbc14.jar。

 

2)在Java程序中加载驱动程序。

  使用Class.forName("指定数据库的驱动程序")方法加载上述步骤添加的驱动程序。

  示例: Class.forName("oracle.jdbc.driver.OracleDriver");

 

3)创建数据连接对象。

  通过DriverManager类创建数据库连接对象connection。DriverManager类作用于Java程序和JDBC驱动程序之间,用于检查所加载的驱动程序是否可以建立连接,通过它的getConnection()方法,根据数据库的URL、用户名和密码,创建一个JDBC Connection对象。

  示例: Connection connection = DriverManager.getConnection("URL","用户名","密码");

  其中 URL = 协议名 + IP地址(域名) + 端口 + 数据库名称;

  如: URL = jdbc:oracle:thin:@localhost:1521:orcl;

 

4)创建Statement对象。

  Statement类用于执行静态SQL语句并返回它所生成的结果。通过Connection接口中的createStatement()方法可以创建一个Statement对象。

  示例: Statement statement = connection.createStatement();

 

5)调用Statement对象方法执行SQL语句。

  execuUpdate()方法用于数据更新,包括插入、删除等操作。

  示例: statement.execuUpdate("INSERT INTO table(column1(,column2,...))" + "VALUES('x'(,'y',z,...))");

  通过调用Statement对象的executeQuery()方法查询数据,查询结果会返回到ResultSet对象,ResultSet对象是执行查询数据库后返回的数据的集合,它具有可以指向当前数据行的指针,通过ResultSet对象的next()方法使得指针指向下一行,然后将数据以列号或者字段名取出。如果next()方法返回null,则表明下一行中没有数据存在。

  示例: ResultSet resultset = statement.executeQuery("SELECT * FROM table (WHERE)(ORDER BY)");

 

6)关闭数据库连接。

  使用完数据库或者不需要访问数据库时,通过Connection的close()方法及时关闭数据连接。

 

三、JDBC应用示例

 

1)在Eclipse中创建一个新Java项目,创建好包和类。

 

2)在项目上右键Properties,左栏选择Java Build Path,右栏上侧选择Libraries,然后点击Add External JARS...选择Oracle安装路径\product\11.2.0\dbhome_1\jdbc\lib中的ojdbc14.jar加载。

 

3)连接数据库的程序示例如下:

 

package zapp;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.ResultSetMetaData;

public class App {
    //定义成员变量
    private String user;
    private String password;
    private String url;
    private static Connection conn;
    
    private ResultSet rs;
    private Statement sm;

    /**
    * 构造函数获得数据库用户名和密码
    * @param user
    * @param password
    */
    public App(String user , String password){
        this.user = user;
        this.password = password;
        /*url="[连接方式jdbc]:[连接到oracle]:[采用瘦模式(无需oracle客户端)]:
        [连接本机:端口1521:数据库名为orcl]"*/
        this.url = "jdbc:oracle:thin:@localhost:1521:orcl";
        
    }

    /**
    * 创建连接数据库方法
     * @return 
    */
    public Connection createConnection(){
        try{
            //初始化驱动包
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //根据数据库连接字符、用户名和密码给conn赋值
            conn = DriverManager.getConnection(url,user,password);
        }catch (Exception e) {
            e.printStackTrace();
        }
        //测试是否成功连接oracle数据库
        if (conn == null){
            System.out.println("与Oracle数据库连接失败!");
        }else{
            System.out.println("Oracle数据库已连接!");
        }
        return conn;
    }


    /**
    * 关闭数据库
    * @param conn
    */
    public void closeConnection(Connection conn){
        try{
            if (conn != null){
                conn.close();
                System.out.println("数据库已关闭!\n");
            }
        }catch(Exception e){
            System.out.println("数据库关闭失败!");
            e.printStackTrace();
        }
    }

    /**
    * 插入数据
    * @param insert
    * @return
    */
    public int insert(String insert){
        int re = 0;
        try{
            conn.setAutoCommit(false);
            sm = conn.createStatement();
            re = sm.executeUpdate(insert);
            if (re < 0){        //插入失败
                conn.rollback();
                sm.close();
                return re;
            }
            else {
                System.out.println("数据成功写入!");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return 0;
    }
    
    /**
     * 删除数据
     * @param delete
     */
    public int delete(String delete){
        int re = 0;
        try{
            sm = conn.createStatement();
            re = sm.executeUpdate(delete);
            if (re < 0){
                conn.rollback();
                sm.close();
                closeConnection(conn);
                return re;
            }
            else {
                System.out.println("数据成功删除!");
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return 0;
    }

    /**
    * 查询语句
    * 返回结果集
    * @param select
    * @return
    */
    public ResultSet selectSql(String select){
        try{
            sm = conn.createStatement();
            rs = sm.executeQuery(select);
            return rs;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    /**
    * 根据结果集输出
    * @param rs
    */
    public void printRs(ResultSet rs){
        int columnsCount = 0;
        boolean f = false;
        try{
            if (!rs.next()){
                return;
            }
            ResultSetMetaData rsmd = rs.getMetaData();
            columnsCount = rsmd.getColumnCount();                //根据集的列数
            System.out.println("数据库查询结果如下:");
            for (int i = 0 ; i < columnsCount ; i++ ){
                System.out.print(rsmd.getColumnLabel(i+1)+" ");    //输出列名
            }
            System.out.println();
            while (!f){
                for (int i = 0; i < columnsCount ; i++ ){
                    System.out.print(rs.getString(i+1)+" ");
                }
                System.out.println();
                if (!rs.next()){
                    f = true;
                }
            }
            rs.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /*主方法*/
    public static void main(String[] args){
        //实例化对象aJDBC,传递用户名和密码
        App JDBC = new App("用户名","密码");
        conn = JDBC.createConnection();
        //向salary(已存在)表中插入数据
        String insert = "INSERT INTO salary(empid,empname,empsalary,hiredate,job) "
                + "VALUES(5,'Jack',2300.64,to_Date('19920523','YYYYMMDD'),'teacher')";
        String delete = "DELETE FROM salary WHERE empid=5";
        String select = "SELECT * FROM salary";
      //查询新增数据后的表
        JDBC.insert(insert);
        JDBC.printRs(JDBC.selectSql(select));
        
        //查询删除数据后的表
        JDBC.delete(delete);
        JDBC.printRs(JDBC.selectSql(select));
        JDBC.closeConnection(conn);
        }
}

 

 

 

 

posted @ 2015-08-07 11:46  动如参与商  阅读(2402)  评论(0编辑  收藏  举报