java2核心技术之数据库编程笔录(一)

本文介绍了JDBC中的高级技巧,包括如何高效使用PreparedStatement、管理连接与结果集、利用可更新的结果集进行数据编辑等,帮助开发者更好地掌握JDBC的使用。

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

1.例子:rs.getString(1);与rs.getString("Price");

1.使用数字参数效率更高一些,但是使用字符串参数可以使代码易于阅读和维护。

2.注意:与数组的索引不同,数据库的列序号是从1开始计算的

《JDBC(TM)API Tutorial and Reference:Universal Data Access for the Java 2 Platform,2nd Edition》

2.管理连接、语句和结果集
每个Connection对象都可以创建一个或一个以上的Statement对象。同一个Statement对象可以用于多个不相关的命令和查询。但是,一个Statement对象最多只能打开一个结果集。如果需要执行多个查询操作,且需要同时分析查询结果,那么必须创建多个Statement对象。
需要说明的是,至少有一种常用的数据库(Microsoft SQL Server)的JDBC驱动程序只允许同时存在一个激活的Statement对象。使用DatebaseMetaData类中的getMaxStatements方法可以获取JDBC驱动程序同时支持的语句对象的总数。
这看上去似乎很有局限性,但实际上,我们通常并不需要同时处理多个结果集。如果结果集相互关联,我们就可以使用组合查询,这样就只需要分析一个结果。对数据库进行组合查询比使用Java程序遍历多个结果集要高效得多。
如果Statement对象上有一个打开的结果集,那么调用close方法将自动关闭该结果集。同样地,调用Connection类的close方法将关闭该连接上的所有语句。
如果所用连接都是短时性的,那么无需考虑关闭语句和结果集。只需将close语句放到finally块中,以便确保最终关闭连接对象。

3.我们应当尽量使用预备语句(preparedStatement)
当查询涉及变量时,即便不考虑效率问题,我们也建议使用预备语句。手动创建查询时,不得不考虑特殊字符(如引号)。这比用预备语句麻烦得多。

4.可更新的结果集
如果你希望能够编辑结果集中的数据,并且将结果集上的数据自动反映到数据库中,那么你必须使用可更新的结果集。可更新的结果集并不一定是可滚动的,但如果将数据提供给用户去编辑,通常也会希望结果集是可滚动的。
如果要获得可更新的结果集,应该使用以下方法创建一条语句:
Statement stat=conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

注意:并非所有的查询都会返回可更新的结果集。如果查询涉及多个表格的连接操作,那么它所产生的结果集将是不可更新的。如果查询只涉及一个表格,或者在查询时是使用主键连接多个表格的,那么它所产生的结果集将是可更新的结果集。可以调用ResultSet 类中的getConcurrency方法来确定结果集是否是可更新的。

例如,假设想提高某些图书的价格,但是在执行update命令时又没有一个简单而统一的提价标准。此时,就可以根据任意的条件,迭代遍历所有的图书并更新它们的价格。
String query="select * from Books";
ResultSet rs=stat.executeQuery(query);
while(rs.next())
{
if(...)
{
double increase=...
double price=rs.getDouble("Price");
rs.updateDouble("Price",price+increase);
rs.updateRow;//这是必须的,将当前行中的所有更新信息发送给数据库
}
}

注意:在使用第一个参数为列序号的updateXxx方法时,请注意这里的列序号指的是该列在结果集中的序号。它的值可能与数据库中的列序号不同。

警告:如果不小心处理的话,就很有可能在使用可更新的结果集时写出非常低效的代码。执行update语句,要不建立一个查询,然后一边遍历一边修改数据来得高效得多。对于用户能够任意修改数据的交互式程序来说,使用可更新的结果集是非常有意义的。但是,对大多数程序性的修改而言,使用SQL的update语句更合适一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值