【转】createStatement参数 和 批处理

本文详细介绍了在数据库操作中创建Statement时的参数意义,包括ResultSet的类型(TYPE_FORWARD_ONLY, TYPE_SCROLL_INSENSITIVE, TYPE_SCROLL_SENSITIVE)和并发级别(CONCUR_READ_ONLY, CONCUR_UPDATABLE)。此外,还讲解了批处理的使用,通过Statement的addBatch和executeBatch方法实现,强调了手动事务管理的重要性。" 132682073,19687573,Boost库中的error_condition错误处理示例,"['C++', '编程', '开发语言', 'boost库']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

createStatement参数简要说明

源自:http://riddickbryant.iteye.com/blog/445921

 

ConnectionName.createStatement(int  type,int  concurrency)
参数:Type-----决定了返回的语句在执行查询后的结果记录集,其记录指针移动方式有以下三种值:
ResultSet.TYPE_FORWORD_ONLY:结果集记录指针只能向下移动
ResultSet.Type_SCROLL_INSENSITIVE:结果集记录指针可以上下移动,但数据库内容变化时结果集不变
ResultSet.Type_SCROLL_SENSITIVE:结果集记录指针可以上下移动,当数据库内容发生变化后结果集内容同步改变

Concurrency—决定是否可以用结果记录集更新数据库中的表,有以下两种值:
ResultSet._CONCUR_READ_ONLY:结果记录集为只读,不能更新数据库表中的数据;
ResultSet.CONCUR_UPDATABLE:用结果记录集可以更新数据库表中的数据

ResultSet就是结果集,相当于把数据库中的数据存取到本地机器的缓存中。

 

 

==============================================================

 

createStatement参数 和 批处理

源自:http://blog.youkuaiyun.com/xxxx1243/archive/2009/02/16/3894901.aspx

 

【用法:】

1、createStatement();

2、createStatement(int resultSetType, int resultSetConcurrency)

3、createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)

 

【其中,resultSetType可选值是: 】

1、ResultSet.TYPE_FORWARD_ONLY :

在ResultSet中只能先前移动游标,只允许向前访问一次,并且不会受到其他用户对该数据库所作更改的影响.

 

2、ResultSet.TYPE_SCROLL_INSENSITIVE :
在ResultSet中可以随心所欲的先前向后移动游标,不会受到其他用户对该数据库所作更改的影响

 

3、ResultSet.TYPE_SCROLL_SENSITIVE :

在ResultSet中可以随心所欲的先前向后移动游标,这种类型受到其他用户所作更改的影响。如果用户在执行完查询之后删除一个记录,那个记录将从 ResultSet 中消失。

同时ResultSet的值有所改变的时候,它可以得到改变后的最新的值。

 

【其中,resultSetConcurrency】

(第二个参数默认为CONCUR_READ_ONLY:指定不可以更新 ResultSet

CONCUR_UPDATABLE:指定可以更新 ResultSet)

可选值是:

1、ResultSet.CONCUR_READ_ONLY 在ResultSet中的数据记录是只读的,可以修改

2、ResultSet.CONCUR_UPDATABLE 在ResultSet中的数据记录可以任意修改,然后更新会数据库

 

【其中,resultSetHoldability可选值是: 】

1、ResultSet.HOLD_CURSORS_OVER_COMMIT 表示修改提交时,不关闭ResultSet的游标

2、ResultSet.CLOSE_CURSORS_AT_COMMIT 表示修改提交时,关闭ResultSet的游标

 

【demo】

Statement stmt2 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs2 = stmt.executeQuery("SELECT * FROM user");

rs2.next();

rs2.updateDate("lastdatetime", new Date(Calendar.getInstance().getTimeInMillis())); rs2.updateRow();

rs2.afterLast();

while(rs2.previous())

{ /**....*/ } rs.beforeFirst();

while(rs2.next())

{ /**....*/ } rs.last();

rs.first();

rs.absolute(5); //游标移动到第5条

rs.absolute(-1); //游标移动到最后一条

rs.relative(-5); //游标向上移动5条

rs.relative(2); //游标向下移动2条

rs.deleteRow(); //删除当前行

rs.last(); //游标移动到最后

rs.updateString("summary", "This is ...");//设置更新的字段值

rs.cancelRowUpdates();//取消刚才输入的更新

rs.getRow();//得到当前行号

rs.moveToInsertRow(); //游标移动到要新增的那条记录上

rs.updateInt("id", 1);

rs.updateString(2, "my name");

rs.insertRow(); //插入新记录


JDBC2.0提供的还有一个功能就是数据库的批量操作:

con.setAutoCommit(false);

Statement stmt3 = con.createStatement();

stmt3.addBatch("insert .....");  //push

stmt3.addBatch("insert .....");   //push

int[] rows = stmt3.executeBatch();

con.commit();

但是有一点要注意,stmt3.executeBatch()他不会自动给你回滚数据操作,当你有5条update语句的时候,如果第三条发生错误,那么将无法自动回滚前两条update语句的影响,所以一定要自己手工进行事务管理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值