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与数据库的连接,前几篇文章已经写过了。不赘述。