Laughing

我仍然能够感觉,心跳还在......

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

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语句更合适一些。

 

阅读更多
想对作者说点什么? 我来说一句

java核心技术(卷一、二)两本全

2017年10月30日 85.63MB 下载

Java2核心技术卷一:基础知识

2009年11月23日 5.91MB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭