Java—jdbc

 

运行时异常和编译时异常;

 

//编译时异常是必须要用户处理的,而运行时异常则不必要

//只是打印一个堆栈是不行的

 

为了不污染接口,将编译时的异常转换为运行时的异常。这样异常既不会隐藏也不会影响接口

可以自定义异常处理

 

事务(ACID)

 

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

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

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

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

connection.setAutoCommit(false);//打开事务。

connection.commit();//提交事务。

connection.rollback();//回滚事务。

 

事务(SavePoint)保存点

 

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

SavePoint sp = connection.setSavepoint();

connection.rollerbak(sp);connection.commit();

 

事务(JTA)

 

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

分 <script src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" type="text/javascript"></script> <script src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" type="text/javascript"></script> 成两阶段提交。

javax.transaction.UserTransaction tx = (UserTransaction)ctx.lookup(“jndiName");

tx.begin();

//connection1 connection2 (可能来自不同的数据库)… 

    tx.commit();//tx.rollback();

 

 

隔离级别多线程并发读取数据时的正确性 

connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); 

V:可能出现,X:不会出现

 

隔离级别 脏读 不可重复读 幻读 

读未提交(Read uncommitted) V V V

读已提交(Read committed) x V V

可重复读(Repeatable read) x x V

可串行化(Serializable ) x x x

 

存储过程

CallableStatement(从PreperedStatement扩展来)

cs = connection.prepareCall(“{call psname(?,?,?)}”);

cs.registerOutParameter(index, Types.INTEGER);

cs.setXXX(i, xxxx);

cs.executeUpdate();

int id=cs.getInt(index);

 

其他几个事务(JTA)

PreparedStatement.getGeneratedKeys()

PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

ps.executeUpdate();

ResultSet rs = st.getGeneratedKeys();rs.getInt(1);

批处理,可以大幅度提升大量增、删、改的速度。

PreparedStatement.addBatch();

PreparedStatement.executeBatch();

可滚动的结果集

Statement st = 

connection.createStatement(ResultSet.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.updateString("col name", "new value");

rs.updateRow();

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值