zoukankan      html  css  js  c++  java
  • 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();
                }
            }
            
    
        }
    
    }
  • 相关阅读:
    2019-2020-2 20175203马羽达《网络对抗技术》Exp9 Web安全基础
    2019-2020-2 20175203马羽达《网络对抗技术》Exp8 Web基础
    2019-2020-2 20175203马羽达《网络对抗技术》Exp7 网络欺诈防范
    2019-2020-2 20175203马羽达《网络对抗技术》Exp6 MSF基础应用
    2019-2020-2 20175203马羽达《网络对抗技术》Exp5 信息搜集与漏洞扫描
    2019-2020-2 20175203马羽达《网络对抗技术》Exp4 恶意代码分析
    2019-2020-2 20175203马羽达《网络对抗技术》Exp3 免杀原理与实践
    2019-2020-2 20175203马羽达《网络对抗技术》Exp2 后门原理与实践
    2019-2020-2 20175203马羽达《网络对抗技术》EXP1 PC平台的逆向破解
    2019-2020-2 20175203马羽达《网络对抗技术》Kali的安装
  • 原文地址:https://www.cnblogs.com/mosquito-woo/p/3959911.html
Copyright © 2011-2022 走看看