JDBC编程

JDBC是数据库连接纽带,统一数据库接口。

JDBC编程步骤:

1.Load the Driver
  <1.Class.forName()|Class.forname().newinstance()|new DirverName()
  <2.实例化时自动向DirverManager注册,不需显式调用DriverManger.registerDriver()方法

2.Connect to the DataBase
  <1.DriverManager.getConnection()

3.Execute the SQL
  <1.Connection CreateStatement()
  <2.Statement.excuteQuery()  --用于select语句
  <3.Statement.executeUpdate()  --用于insert,update,delete语句
4.Retrieve the result data
  <1.循环取得结果while(rs.next())
5.Show the result data
  <1.将数据库中的各种类型转换为JAVA中的类型(getXXX)方法
6.Close
  <1.close the resultset./close the statement/close the connection

JDBC连接oracle例子程序:

import java.sql.*;

public class TestJDBC {

    public static void main(String[] args) {
        ResultSet rs = null;
        Statement stmt = null;
        Connection conn = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //new oracle.jdbc.driver.OracleDriver();另一种new Driver的方式
            conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "abc123");
            stmt = conn.createStatement();
            rs = stmt.executeQuery("select * from dept");
            while(rs.next()) {
                System.out.println(rs.getString("deptno"));
                System.out.println(rs.getInt("deptno"));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(rs != null) {
                    rs.close();
                    rs = null;
                }
                if(stmt != null) {
                    stmt.close();
                    stmt = null;
                }
                if(conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

利用命令行向oracle中插入记录:

import java.sql.*;

public class TestDML2 {

    public static void main(String[] args) {
        if(args.length != 3) {
            System.out.println("Parameter Error! Please Input Again!");
            System.exit(-1);
        }
        
        int deptno = 0;
        
        try {
            deptno = Integer.parseInt(args[0]);
        } catch (NumberFormatException e) {
            System.out.println("Parameter Error! Deptno should be Number Format!");
            System.exit(-1);
        }
        
        String dname = args[1];
        String loc = args[2];
        
        Statement stmt = null;
        Connection conn = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "abc123");
            stmt = conn.createStatement();
            String sql = "insert into dept values (" + deptno + ",‘" + dname + "‘,‘" + loc + "‘)";    //注意sql格式
System.out.println(sql);    //将打印出的语句放到sql中执行,看哪里出错是最常利用的方法
            stmt.executeUpdate(sql);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(stmt != null) {
                    stmt.close();
                    stmt = null;
                }
                if(conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

 

用PrepareStatement灵活的指定sql(防止sql注入的一种方法):

import java.sql.*;


public class TestPreStmt {

    public static void main(String[] args) {
        if(args.length != 3) {
            System.out.println("Parameter Error! Please Input Again!");
            System.exit(-1);
        }
        
        int deptno = 0;
        
        try {
            deptno = Integer.parseInt(args[0]);
        } catch (NumberFormatException e) {
            System.out.println("Parameter Error! Deptno should be Number Format!");
            System.exit(-1);
        }
        
        String dname = args[1];
        String loc = args[2];
        
        PreparedStatement pstmt = null;
        Connection conn = null;
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "abc123");

            pstmt = conn.prepareStatement("insert into dept values (?, ?, ?)");    //用prepareStatement灵活指定sql,?为占位符

            pstmt.setInt(1, deptno);    //设定第1个值为deptno
            pstmt.setString(2, dname);    //设定第2个值为dname
            pstmt.setString(3, loc);    //设定第3个值为loc

            pstmt.executeUpdate();    //注意与上面的stmt.executeUpdate(sql);不同

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(pstmt != null) {
                    pstmt.close();
                    pstmt = null;
                }
                if(conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

 

JAVA通过JDBC调用存储过程(通过CallableStatement):

先在ORACLE中定义这个存储过程:

create or replace procedure P
 (v_a in number,v_b number,v_ret out number,v_temp in out number)
is

begin
    if(v_a > v_b) then
        v_ret := v_a;
    else
        v_ret := v_b;
end if;
    v_temp := v_temp +1;
end;
/

 

import java.sql.*;
public class TestProc {

    public static void main(String[] args) throws Exception {
        
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "abc123");

        CallableStatement cstmt = conn.prepareCall("{call p(?, ?, ?, ?)}");    /*通过conn.prepareCall创建CallableStatement对象并调用存储过程p,该存储过程有四个参数,第1、2个参数为输入参                                                数,第三个参数是输入输出参数,第四个参数为输出参数*/
        cstmt.registerOutParameter(3, Types.INTEGER);    //声明第三个参数是输入参数,且类型是Types.INTEGER
        cstmt.registerOutParameter(4, Types.INTEGER);    //声明第四个参数是输入参数,且类型是Types.INTEGER

        cstmt.setInt(1, 3);    //设置第一个参数值
        cstmt.setInt(2, 4);    //设置第二个参数值
        cstmt.setInt(4, 5);    //设置第三个参数值

        cstmt.execute();    //调用存储过程

        System.out.println(cstmt.getInt(3));
        System.out.println(cstmt.getInt(4));
        cstmt.close();
        conn.close();
    }

}

 

JDBC批处理:

import java.sql.*;
public class TestBatch {


    public static void main(String[] args) throws Exception {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "abc123");

        //第一种批处理方法
        /*
        Statement stmt = conn.createStatement();    //一个Statement只可以处理一条aql语句
        stmt.addBatch("insert into dept values (51, ‘500‘, ‘haha‘)");    //将语句加入批处理
        stmt.addBatch("insert into dept values (52, ‘500‘, ‘haha‘)");    //将语句加入批处理
        stmt.addBatch("insert into dept values (53, ‘500‘, ‘haha‘)");    //将语句加入批处理
        stmt.executeBatch();    //Statement一次执行批处理
        stmt.close();
        */

        //第二种批处理方法        
        PreparedStatement ps = conn.prepareStatement("insert into dept values (?, ?, ?)");
        ps.setInt(1, 61);
        ps.setString(2, "haha");
        ps.setString(3, "bj");
        ps.addBatch();
        
        ps.setInt(1, 62);
        ps.setString(2, "haha");
        ps.setString(3, "bj");
        ps.addBatch();
        
        ps.setInt(1, 63);
        ps.setString(2, "haha");
        ps.setString(3, "bj");
        ps.addBatch();
        
        ps.executeBatch();
        ps.close();
        
        conn.close();

    }

}

处理Tracnsaction:

import java.sql.*;
public class TestTransaction {


    public static void main(String[] args) {
        
        Connection conn = null;
        Statement stmt = null;
        
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:SXT", "scott", "tiger");
            
            conn.setAutoCommit(false);    //取消自动提交
            stmt = conn.createStatement();    
            stmt.addBatch("insert into dept2 values (51, ‘500‘, ‘haha‘)");
            stmt.addBatch("insert into dept2 values (52, ‘500‘, ‘haha‘)");
            stmt.addBatch("insert into dept2 values (53, ‘500‘, ‘haha‘)");
            stmt.executeBatch();
            conn.commit();    //自己提交
            conn.setAutoCommit(true);    //恢复现场
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch(SQLException e) {
            
            e.printStackTrace();
            
            try {
                if(conn != null)
                {
                    conn.rollback();    //有(SQLException时rollback
                    conn.setAutoCommit(true);
                }
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }finally {
            try {
                if(stmt != null)
                    stmt.close();
                if(conn != null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        

    }

}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。