JDBC的一些知识的总结

来源:互联网 发布:js正则数字和字母组合 编辑:程序博客网 时间:2024/06/11 02:37

1.Statement的三个方法

      a.ResultSet executeQuery();   能够执行select语句

      b.int  executeUpdate() ;    能够操作insert/update/delete语句

      c.boolean execute();  执行上述的两种SQL语句。当执行SQL语句有结果集返回时,返回true;当执行dml操作,或者没有结果集返回时,返回false;

2数据库中过程的创建

(1)create or replace procedure insert_stu(  v_id number,  v_name varchar2,  v_age number,  v_sex char)is begininsert into student(id,name, age, sex)values(v_id, v_name, v_age, v_sex);commit;end;exec insert_stu(1, 'peter', 20, 'M');
最后一条语句是在执行创建的过程。

这个过程的功能是为了向数据库中插入数据,而这种方式是在数据库中的SQLPlus执行的。

(2)create or replace procedure total_count(  v_deptno dept_fen.deptno%type,  v_count out number)is beginselect count(*) into v_countfrom dept_fen where deptno = v_deptno;end;测试数据库中过程的方式declarev_count number;begintotal_count(20, v_count);dbms_output.putline(v_count);end;
这些代码也是在创建过程。这里给出了数据定义了另一种方式:

v_deptno dept_fen.deptno%type  //这行代码表示v_deptno的类型与dept_fen这个表中的deptno属性的类型一样 

下面这行代码定义了一个输出数据,过程中定义的变量默认都是读入,输出型变量如下定义

 v_count out number   //out是一个关键字  指明变量是读入变量还是输出变量
测试这样的过程,需要定义一个v_count变量,然后作为参数传入到过程中,从过程中带回值。这样就能查看过程的输出内容。

3.在数据库中为了提高数据库执行SQL语句的效率可以一次性往缓存中加入多条SQL语句,然后一次性处理这样效率比较高。因为在数据库内部没有I/O开销。如果是一条条执行,这样每次都要读入,都要将结果集从数据库中取出来。I/0消耗大量的时间,效率底下。所以下面的代码能够实现批量执行sql语句。

                        conn.setAutoCommit(false);stmt = conn.createStatement();stmt.addBatch(sql1);stmt.addBatch(sql2);int [] result = stmt.executeBatch();//批量执行conn.commit(); 

第一行代码是把自动提交设置为false。这样就能够阻止自动提交。批量执行只要用Statement类型的对象stmt调用addBatch()方法,就能把SQL放入到数据库的缓存取中。用stmt调用executeBatch()方法,实现数据库语句的批量执行。因为这些语句在执行期间,没有I/O中断,所以执行的效率比较高。最后手动提交。

4.使用序列,实现主键自增长。

create sequence myseq start with 1000increment by 10;insert into mystu(id, name,age, sex)values(myseq.nextval,'chris', 20, 'M');

创建学列,使用序列的nextval实现主键自动增长。每次向数据库中插入数据后,nextval的值,都会按照创建序列的步长增长。没指定情况下,每次增加1.

5.实现结果集的滚动。

Connection conn = DriverManager.getConnection(url,username,password);Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResutlSET.CONCUR_READ_ONLY);ResultSet rs = stmt.executeQuery(sql);rs.frist();rs.previous();rs.last();rs.beforeFirst();rs.next();rs.absolute(n);rs.relative(n);

主要是穿件语句对象时候,Connection 类型的对象调用的createStatement()方法参数,确定了得到的语句对象在调用executeQuery(sql)方法时候,获得的结果集是否可以滚动。createStatement()方法中的两个参数确定了执行的SQL语句可以滚动,并且是只读的,不能够更改。ResultSet rs对象调用下面的方法,可以实现结果集滚动。

在调用first(),previous()上述这些方法的时候,可能会抛出异常,最可能的异常就是:结果集已经耗尽。但是用这种方式实现的结果集不能回滚。

6.分页技术的使用,实现结果集的回滚。已经用回滚的方式写过程序,这里不赘述了。SQL语句主要是用了行内视图。

7.大对象类型。从数据库中读取大对象。往数据库中写大对象。都使用的二进制流。blob二进制的大对象,主要处理的是音频,视频,图像,二进制文件等。Clob字符型大对象,通常是文本文件。

8.对于java与数据库的连接,前几篇文章已经写过了。不赘述。