你的位置:首页 > 数据库

[数据库]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();