黑马程序员__JDBC事务及将结果封装成对象

---------------------- android培训java培训、期待与您交流! ----------------------

 

风靡腾讯网络的Java+3G开发全套视频教程
屌丝们,最爱的.NET全套视频项目教程
史上一直被模仿10多年的PHP元老全套视频教程

事务(ACID):

1、  原子性(atomicity):组成事物处理的语句形成了一个逻辑单元,不能只执行其中的一部分;

2、  一致性(consistency):在事务处理执行前后,数据库是一致的(数据库数据完整性约束)

3、  隔离性(isolcation):一个事务处理对另一个事务处理的影响;

4、  持续性(durability):事务处理的效果能够被永久保存下来;

Connection.setAutoCommit(false);--à打开事务

Connection.commit( );--à提交事务

Connection.rollback( );--à回滚事务

保存点(SavePoint

1、  当只想撤销事务中的部分操作时可使用SavePoint

2、  SavePoint sp=connection.setSavePoint( );

3、  Connection.rollback(sp);connection.commit( );

JTA:

1、  跨越多个数据源的事务,使用JTA容器实现事务;

2、  分成两阶段提交

Javax.transaction.UserTransaction tx=(UserTransaction)ctx.lookup(“jndiName”);

Tx.begin( );

隔离级别:读未提交(Read uncommitted)、读已提交(Read committed)、

可重复读(Repeatable read)、可串行化(Serializable--à脏读、不可重复读、幻读

批处理:PreparedStatement,addBatch( );

PreparedStatement.executeBatch( );

可滚动的结果集:

Statement st=connection.createStatement(Result.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

              ResultSet rs=st.executeQuery(sql);

              rs.beforeFirst( );rs.afterLast( );rs.first( );rs.isFirst( );rs.last( );rs.isLast( );rs.absolute(9);

              rs.moveToInsertRow( );

可更新的结果集:

              Conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

              rs.updataString(“col name”,”new value”);

              rs.updataRow( );

DatabaseMetaData(数据库的元数据信息)和ParameterMetaData(参数的元数据信息)

1、  DatabaseMetaData meta=connection.getMetaData( );

2、   通过DatabaseMetaData可以获得数据库相关的信息,如:数据库版本、数据库名、数据库厂商信息、是否支持事务、是否支持某种事务隔离级别、是否支持滚动结果集等

ParameterMetaData pmd=preparedStatement.getParameterMetData( );

       通过ParameterMetaData可以获得参数信息;

ResultSetMetaData meta=rs.getMetaData( );

       通过ResultSetMetaData可以获得结果有几列、各列名、各列别名、各列类型等;

       可以将ResultSet放入Mapkey:列名  value:列值);

ORMobjectrelationmap):-----à利用反射做的通用模块---à将查询结果封装为对象

package cn.itcast.jdbc;

publicclass ORMTest {

    publicstaticvoid main(String[] args) throws IllegalArgumentException, SQLException, IllegalAccessException, InvocationTargetException{

       User user=(User) getObject("select id as Id,name as Name,birthday as Birthday,money as Money from user where id=1",User.class);

       System.out.println(user);

    }

    static Object getObject(String sql,Class clazz) throws SQLException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{

       Connection conn=null;

       PreparedStatement ps=null;

       ResultSet rs=null;

       try{

           conn=JDBCUtils.getConnection();

           ps=conn.prepareStatement(sql);

           rs=ps.executeQuery();

           ResultSetMetaData rsmd=rs.getMetaData();

           int count=rsmd.getColumnCount();

           String[] colNames=new String[count];

           for(int i=1;i<=count;i++){

              colNames[i-1]=rsmd.getColumnLabel(i);

           }

           Object obj=null;

           if(rs.next()){

              obj=new User();

              for(int i=0;i<colNames.length;i++){

                  String colName=colNames[i];

                  String methodName="set"+colName;

                  Method[] ms=obj.getClass().getMethods();

                  for(Method m:ms){

                     if(methodName.equals(m.getName())){

                         m.invoke(obj, rs.getObject(colName));

                     }

                  }

              }

           }

           return obj;

       }finally{

           JDBCUtils.free(conn, ps, rs);

       }

    }

}

 

风靡腾讯网络的Java+3G开发全套视频教程
屌丝们,最爱的.NET全套视频项目教程
史上一直被模仿10多年的PHP元老全套视频教程
 

 ---------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值