第一篇:黑馬程序員__JDBC事務(wù)及將查詢結(jié)果封裝成對象通用
----------------------android培訓(xùn)、java培訓(xùn)、期待與您交流!
----------------------
事務(wù)(ACID):
1、原子性(atomicity):組成事物處理的語句形成了一個邏輯單元,不能只執(zhí)行其中的一部分;
2、一致性(consistency):在事務(wù)處理執(zhí)行前后,數(shù)據(jù)庫是一致的(數(shù)據(jù)庫數(shù)據(jù)完整性約束)
3、隔離性(isolcation):一個事務(wù)處理對另一個事務(wù)處理的影響;
4、持續(xù)性(durability):事務(wù)處理的效果能夠被永久保存下來;
Connection.setAutoCommit(false);--à打開事務(wù)
Connection.commit();--à提交事務(wù)
Connection.rollback();--à回滾事務(wù)
保存點(SavePoint)
1、當只想撤銷事務(wù)中的部分操作時可使用SavePoint2、SavePoint sp=connection.setSavePoint();
3、Connection.rollback(sp);connection.commit();
JTA:
1、跨越多個數(shù)據(jù)源的事務(wù),使用JTA容器實現(xiàn)事務(wù);
2、分成兩階段提交
Javax.transaction.UserTransaction tx=(UserTransaction)ctx.lookup(“jndiName”);Tx.begin();
隔離級別:讀未提交(Read uncommitted)、讀已提交(Read committed)、可重復(fù)讀(Repeatable read)、可串行化(Serializable)--à臟讀、不可重復(fù)讀、幻讀 批處理:PreparedStatement,addBatch();
PreparedStatement.executeBatch();
可滾動的結(jié)果集:
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();
可更新的結(jié)果集:
Conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs.updataString(“col name”,”new value”);
rs.updataRow();
DatabaseMetaData(數(shù)據(jù)庫的元數(shù)據(jù)信息)和ParameterMetaData(參數(shù)的元數(shù)據(jù)信息)
1、DatabaseMetaData meta=connection.getMetaData();
2、通過DatabaseMetaData可以獲得數(shù)據(jù)庫相關(guān)的信息,如:數(shù)據(jù)庫版本、數(shù)據(jù)庫名、數(shù)據(jù)
庫廠商信息、是否支持事務(wù)、是否支持某種事務(wù)隔離級別、是否支持滾動結(jié)果集等 ParameterMetaData pmd=preparedStatement.getParameterMetData();
通過ParameterMetaData可以獲得參數(shù)信息;
ResultSetMetaData meta=rs.getMetaData();
通過ResultSetMetaData可以獲得結(jié)果有幾列、各列名、各列別名、各列類型等;
可以將ResultSet放入Map(key:列名 value:列值);
ORM(object、relation、map):-----à利用反射做的通用模塊---à將查詢結(jié)果封裝為對象 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培訓(xùn)、java培訓(xùn)、期待與您交流! ----------------------詳細請查看:http://edu.csdn.net/heima