JDBC高级应用

第七章   JDBC高级应用

1,  使用滚动结果集操作数据库

con = DBManager.getCon();

String sql="select * from student";

//只读结果集

pst=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,                                                      ResultSet.CONCUR_READ_ONLY);

rst = pst.executeQuery();

rst.absolute(3);//定位至结果集第三条记录

System.out.println(rst.getString(2));

rst.previous();//定位至当前记录的上一条记录

System.out.println(rst.getString(2));

rst.next();//定位至当前记录的下一条记录

System.out.println(rst.getString(2));

rst.first();//定位至第一条记录

System.out.println(rst.getString(2));

rst.last();//定位至最后一条记录

System.out.println(rst.getString(2));

 

 

//可以修改结果集,并且修改的数据可以反应到表中,表中的修改可以反应到//结果集中、

pst=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,                                                      ResultSet.CONCUR_UPDATABLE);

rst = pst.executeQuery();

 

//通过结果集向表中插入一行数据

rst.moveToInsertRow();//移动到可以插入的数据列   

rst.updateString(“name”, “0916”);//设置要插入字段的信息

rst.updateString(“majoy”, “法律”);//设置要插入字段的信息   

rst.insertRow();//插入数据

 

//通过结果集更新表stuclass中第三条记录majoy字段的信息,表中的数据也变

 rst.absolute(3);//将结果集指针定位至第三条记录   

 rst.updateString(“majoy”, “英语”);//更新第三条记录字段的信息   

 rst.updateRow();//更新数据

 

 

 

//删除结果集中的第十三条记录,表中的这条记录也删除

rst.absolute(13);//定位至结果集中的第13条记录

rst.deleteRow();//删除第13条记录

 

 

2,  使用CallableStatement调用存储过程

存储过程分类:无参数的存储过程、带输入参数的存储过程、带输入及输出参数的存储过程、带return语句的存储过程

调用步骤:

第一步:调用连接对象的prepareCall方法创建CallableStatement对象,并在该方法中设置固定格式的参数

  语法:con.prepareCall(“{call  存储过程名称()}”);

 

 

a)       调用无参的存储过程

Connection con=getCon();

CallableStatement cst=null;

ResultSet rs=null;

cst=con.prepareCall(“{call  pro_student()}”);

cst.execute();   //执行存储过程

rs=cst.getResultSet();

b)      调用含输入参数的存储过程

存储过程pro_stu1有一个输入参数

Connection con=getCon();

CallableStatement cst=null;

ResultSet rs=null;

cst=con.prepareCall(“{call  pro_student?}”);

cst.setString(1,”xcl”);

cst.execute();

rs=cst.getResultSet();

 

c)      有输出参数的存储过程

存储过程pro_stu2有一个输入参数和一个整形的输出参数

Connection con=getCon();

CallableStatement cst=null;

ResultSet rs=null;

cst=con.prepareCall(“{call  pro_student?,?}”);

cst.setString(1,”xcl”);

cst.registerOutParameter(2,java.sql.Types.INTEGER);

cst.execute();

//获得输出参数值并输出

System.out.println(cst.getInt(2));

            

            d) 调用含return语句的存储过程需要在call语句前使用占位符获取return语句返回的信息

Connection con=getCon();

CallableStatement cst=null;

ResultSet rs=null;

cst=con.prepareCall(“{? =call  pro_student?,?}”);

cst.setString(1,java.sql.Types.INTEGER);

cst.setString(2,”xcl”);

cst.registerOutParameter(3,java.sql.Types.INTEGER);

cst.execute();

//获得返回值并输出

System.out.println(cst.getInt(1));

 

3,  JDBC事务

AJava事务分类:JDBC事务、JTAJava Transaction API)事务、容器事务

B,使用JDBC事务的步骤:

 第一步:取消Connection对象默认的事务自动提交方式

               con.setAutoCommit(false);

                      第二步:所有SQL语句执行成功后提交事务

                                   con.commit();

                      第三步:若执行SQL语句过程过发生异常则回滚事务

                                   con.rollback();

              try{

               con = DBManager.getCon();

               con.setAutoCommit(false);               //取消自动提交事务方式

               pst = con.prepareStatement("insert into stuclass values('0924','英语')");

                 pst.execute();

               pst = con.prepareStatement("insert into stuclass values('092'5','法律')");

               pst.execute();

               con.commit();                  //在所有语句执行成功的情况下提交事务

}catch(Exception e){

          try {

               con.rollback();           //若执行过程中发生异常则回滚事务

           }catch(Exception ex){

                             ex.printStackTrace();

           }

              e.printStackTrace();

}

 

 

       通过设置回滚点(Savepoint),撤销部分操作

              Savepoint sp=null  //回滚点类型

         try{

                     con = DBManager.getCon();

               con.setAutoCommit(false);               //取消自动提交事务方式

               pst = con.prepareStatement("insert into stuclass values('0924','英语')");

                 pst.execute();

 

                     sp=con.setSavepoint();     //创建回滚点对象

 

               pst = con.prepareStatement("insert into stuclass values('092'5','法律')");

               pst.execute();

               con.commit();                  //在所有语句执行成功的情况下提交事务

}catch(Exception e){

          try {

               con.rollback(sp);           //回滚事务至回滚点

                        con.commit();           //提交事务,不能少

           }catch(Exception ex){

                             ex.printStackTrace();

           }

              e.printStackTrace();

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值