第一篇:黑马程序员__JDBC事务及将查询结果封装成对象通用
----------------------android培训、java培训、期待与您交流!
----------------------
事务(ACID):
1、原子性(atomicity):组成事物处理的语句形成了一个逻辑单元,不能只执行其中的一部分;
2、一致性(consistency):在事务处理执行前后,数据库是一致的(数据库数据完整性约束)
3、隔离性(isolcation):一个事务处理对另一个事务处理的影响;
4、持续性(durability):事务处理的效果能够被永久保存下来;
Connection.setAutoCommit(false);--à打开事务
Connection.commit();--à提交事务
Connection.rollback();--à回滚事务
保存点(SavePoint)
1、当只想撤销事务中的部分操作时可使用SavePoint2、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放入Map(key:列名 value:列值);
ORM(object、relation、map):-----à利用反射做的通用模块---à将查询结果封装为对象 package cn.itcast.jdbc;
publicclass ORMTest {
publicstaticvoid main(String[(参考:http://)] 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 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); } } } ---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima