zoukankan      html  css  js  c++  java
  • Oracle_JDBC操作指令和代码例子

    JDBC :

    // JDBC基础操作步骤 :
            1 加载驱动
            2 获取链接对象
            3 链接
            4 传送数据,数据库处理,接受数据结果集
            5 处理结果集
            6 关闭资源

    //增 :
        
        1 加载驱动 三种方式
                // 第一种
                Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
                //第二种
                Class.forName("oracle.jdbc.driver.OracleDriver");
                //第三种
                new oracle.jdbc.driver.OracleDriver();
        2 链接数据库
                //2 链接数据库
                Connection conn = DriverManager.getConnection("全路径","用户名","密码");
                Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
        3 创建语句对象
                //3 创建语句对象
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery("select * from c##scott.emp");//需要查询的表
        4 循环获取结果
        next();//返回值是boolean true/false  是问下一位还有没有元素,如果有就返回true,否则返回false
                while (rs.next()) {//判断下一位还有没有值
        5 在循环中吧数据类型转换 得到自己想要的数据类型(java对应的数据类型),可以随意转换,只要不丢失精度就行
                    System.out.print(rs.getString("empno")+"  ");//rs.getIn("empno");也行,因为emono用的 number 类型
                    System.out.print(rs.getString("ename")+"  ");
                    System.out.println(rs.getString("job")+"  ");
                }
        6 关闭资源
        close();//关闭资源
                rs.close();
                stmt.close();
                conn.close();

    executeQuery :
        
            executeQuery();//查询语句  返回值用ResultSet类型接收 获取之后是个数组,数组中每个元素都是表的一行的对象
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
                Statement stmt = conn.createStatement();//创建语句对象
                ResultSet rs = stmt.executeQuery("select * from c##scott.emp");//需要查询的表  需要执行的语句  返回值类型是ResultSet类型

    next :

            next();//返回值是boolean true/false  是问下一位还有没有元素,如果有就返回true,否则返回false
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");
                Statement stmt = conn.createStatement();//创建语句对象
                ResultSet rs = stmt.executeQuery("select * from c##scott.emp");// 需要查询的表  需要执行的语句  返回值类型是ResultSet类型  获取之后相当于是个数组  每个数组的元素都是一行的对象
                rs.next();//获取下一位元素(行)

    getString :
    statement.executeUpdate(sql);
            getString();//获得字符串

    executeUpdate :

            executeUpdate(" ");//把字符串指令执行  添加insert into...
            如 : String sql = "insert into c##scott.a_tab values(123,'xiaomei','beijing~')";
            statement.executeUpdate(sql);//就会把添加指令 在结果集中修改  只是结果集

    getInt :

            getInt();//获得整型值

    executeUpdate :

            executeUpdate();
            把语句插入到指定的表中
            String sql = "insert into c##scott.a_tab values(123,'xiaomei','beijing~')";
            statement.executeUpdate(sql);

    DriverManager_getConnection :

        DriverManager.getConnection();//链接数据库  是Connection类型
        如 : //Connection conn = DriverManager.getConnection(全路径,用户名,密码);
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");

    createStatement :

                //没有参数的
            createStatement();//创建语句对象 用Connection类型调用  返回Statement类型接收
            如 :
                Statement stmt = conn.createStatement();
                //有参数的
            createStatement(int resultSetType,int resultSetConcurrency);
            //参数1
            resultSetType - 结果集类型 :
                它是 ResultSet.TYPE_FORWARD_ONLY,
                     ResultSet.TYPE_SCROLL_INSENSITIVE//如果写了这个就可以使用 ResultSet里面的所有方法
                  或 ResultSet.TYPE_SCROLL_SENSITIVE 之一
            //参数2
            resultSetConcurrency - 并发类型 ;
                它是 ResultSet.CONCUR_READ_ONLY //查询(查)
                  或 ResultSet.CONCUR_UPDATABLE 之一 //添加/更改/删除 (增/删/改)
            
            createStatement(参数1,参数2);//如果不写参数1 就只能调用ResultSet的next()方法,如果写了,就都能调用了

    PreparedStatement :

        PreparedStatement s = conn.PreparedStatement("insert into c##scott.a_tab values(?,?,?)");//预先准备好字符串,values值用?代替 因为我们还不知道里面是什么类型的情况下
        
        要想改变结果集,要执行语句把,这个的执行语句是execute();
        execute :

            s.execute();//就行了 就执行了  每个创建语句对象的执行方法不一样

        setInt :

            setInt();//设置上面的问号,整型值
                s.setInt(1,11);//前面 1 代表第一个问号,后面 11,代表要添加的值
        setString :

            setString();//设置上面的问号,字符串
                s.setString(2,"sad");//前面 2 代表第二个问号,后面"sad",代表要添加的值

        parseInt :

        parseInt();//是Integer的方法(int的封装类型),是把纯数字的字符串,转换为int型
        int i = Integer.parseInt("123");//转换为123

    addBatch :

        addBatch();//多条语句添加
            如 :
                s.setInt(1,123);
                s.setString(2, "234");
                s.setString(3, "456");
                s.addBatch();//这算一条
                s.setInt(1,123);
                s.setString(2, "234");
                s.setString(3, "456");
                s.addBatch();//到这是两条
            //上面只是弄好字符串和指令了 但是没有执行吧
            //addBatch()多条语句执行,要用executeBatch()
            executeBatch :
                s.executeBatch();//多条语句添加执行

    commit :

            commit();//强制提交
            Connection conn = DriverManager.getConnection(    "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "system", "root");//链接数据库
            conn.commit();//就是强制提交

    setAutoCommit :

            setAutoCommit();//设置自动提交(没输入一次指令,提交一次),  true/false
            conn.setAutoCommit(false);//设置不自动提交
            conn.setAutoCommit(true);//设置自动提交

    savepoint :

        //添加设置回滚点
        savepoint a;//设置回滚点 回滚点的名字叫 a

    rollback_to :

        //回滚到回滚点之前的操作,回滚点之后的操作都等于没有操作
        rollback to a(回滚点名);//回滚到 a 点

    rollback :

        rollback();//回滚,如果没有设置回滚点,就会回滚到上次提交的地方 并把所有回滚点都取消
        conn.rollback();//回滚

    ResultSet_Li_Mian_De_Fang_Fa :

    //查 :  修改的只是结果集

            ResultSet rs = stmt.executeQuery("select * from c##scott.a_tab");
        next :
            next();//返回值是boolean true/false  是问下一位还有没有元素,如果有就返回true,否则返回false
            rs.next();//光标指向下一位

        last :

            last();//指向最后一位(最后一列) 指针在最后一列上
            rs.last();//把光标指向rs结果集的最后一位(最后一列)

        isLast :

            isLast();//判断当前光标指向的位置是否为最后一位,返回值为boolean布尔型,true/false
            rs.isLast();//判断当前光标指向的是不是rs结果集的最后一位

        absolute :

        absolute();//把光标指向指定的位置
        rs.absolute(3);//把光标指向rs结果集的第三位元素
            
        previous :

        previous();//把光标指向当前光标的前一个位置
        //上面那个absolute(3);不是把光标指向了第三位了吗
        rs.previous();//那么现在就是第二位, 就是把当前光标向上移动一位

    //增 :

        moveToInsertRow :

            moveToInsertRow();//一个缓冲区,可以认为位于结果集最后一行的下面(也可以说是在结果集的最下面新建一个空行) 当有缓冲区的时候,光标不管指向哪里,默认操作都是这个缓冲区,一直到把这个缓冲区添加到结果集和数据库中
            rs.moveToInsertRow();//在rs结果集的最后一行,新建一个空行

        updateInt :

            updateInt();//添加 列(number类型) 值
            rs.updateInt(1,9999);//往第一列(第一个字段),添加值为9999
            或者是 :
                rs.updateInt("ID",9999);//或者是通过指定的列,添加值

        updateString :

            updateString();//添加 (或更改)列(varchar2类型) 值
            rs.updateString(2, "youname");//第二列(第二个字段),添加值为"youname"
            或者是 :
                rs.updateString("ENAME", "youname");//通过指定的列,添加值
        insertRow :

            insertRow();//把以上添加的新行和里面的内容,添加到结果集中,也添加到数据库中
            rs.insertRow();//把上面设置的这一个新行,添加到结果集和数据库中

        moveToCurrentRow :

            moveToCurrentRow();//把光标移动到新建的行
            rs.moveToCurrentRow();//在rs结果集中,把光标移动到新建的行

        deleteRow :

            deleteRow();//删除当前光标指向的行,结果集和数据库都删
            rs.deleteRow();//删除rs结果集中和数据库中,当前光标指向的行

    //改 :

        updateString :

            updateString();////更改内存中数据集中的数据
            rs.updateString("hello", "hellonimei");//更改内存中数据集中的数据(列为hello,值为hellonimei)

        updateRow :

            updateRow();//把更改的数据更新到数据库中
            rs.updateRow();//把更改更新到数据库中,是数据库哦

    close :

        close();//关闭资源 一般都是从下往上关闭
            如 : 打开资源的时候,先打开conn然后是stmt然后是rs
                关闭的时候就是先关闭rs在关闭stmt,在关闭conn
            // 1 驱动对象
            new oracle.jdbc.driver.OracleDriver();
            // 2 连接对象
            Connection conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "c##scott", "root");
            // 3 传输对象
            Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);//并发可更新,和前面对比
            // 4 结果集对象
            ResultSet rs = stmt.executeQuery("select * from emp");
            rs.close();
            stmt.close();
            conn.close();

  • 相关阅读:
    Effective C# 学习笔记(三十五) 了解PLINQ如何实现并行算法
    Effective C# 学习笔记(三十八)理解Dynamic的得与失
    转单例的分析
    获取系统当前音量 和 监听系统音量 ios
    (转) iphone开发资源汇总
    xcode show line numbers
    为了编程方便的效率宏定义的一些代码
    ios6下cocos2d & ipad 调用摄像头报错问题 (在竖屏情况下调用Camera 会导致转屏)
    转KVC
    不记住的
  • 原文地址:https://www.cnblogs.com/xrmqbl/p/4833600.html
Copyright © 2011-2022 走看看