JDBC的一些知识的总结

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 
begin
insert 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 
begin
select count(*) into v_count
from dept_fen where deptno = v_deptno;
end;


测试数据库中过程的方式
declare
v_count number;
begin
total_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 1000
increment 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与数据库的连接,前几篇文章已经写过了。不赘述。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值