ps:结果集的游标可以在第一行之前,最后一行之后。
查询操作:statement对象调用executeQuery(sql)方法
顺序查询:
DatabaseMetaData对象,将表的字段信息以行列的形式存储在一个ResultSet对象中
<span style="white-space:pre"> DatabaseMetaData</span> metaData = con.getMetaData();
ResultSet tableMessage = metaData.getColumns(null, null, tableName, null);
表有多少个字段tableMessage就有多少行,每行四列:数据库名、数据库扩展名、表名、字段名
获取到表的字段数和字段名后可以方便地操作查询结果。
<span style="white-space:pre"> </span>columns = 0;
<span style="white-space:pre"> </span>while(tableMessage.next()){
<span style="white-space:pre"> </span>colName[columns] = tableMessage.getString(columns+1);
<span style="white-space:pre"> </span>columns++;
<span style="white-space:pre"> </span>}
可滚动的结果集:
获得Statement对象
Statement statement = con.createStatement(int type, int concurrency);
type取值决定滚动方式:
concurrency取值决定是否可以使用结果集更新数据库:
常用方法:
beforeFirst() afterLast() first() last() isAfterLast() isBeforeFirst() isFirst() isLast() getRow() absolute(int row)
更新操作:statement对象调用executeUpdate(sql)方法
使用预处理语句:程序事先将SQL语句解释为数据库底层的内部命令然后直接让数据库去执行这个命令,减轻数据库负担,提高访问数据库的速速。
预处理语句对象:PreparedStatement
连接对象con可以调用prepareStatement(String sql)方法对参数sql进行预编译处理并将生成的数据库底层的内部命令封装在PreparedStatement对象中。
PrepareStatement对象可调用一下方法执行命令:
ResultSet executeQuery(); bolean execute(); int executeUpdate();
使用通配符:在对SQL惊喜预处理时,可以使用通配符?来代替字段的值,只要在执行之前设置具体值即可。
Eg. PreparedStatement sql = con.prepareStatement("SELECT * FROM goods WHERE price < ?");
sql.setFloat(1,1000);
通配符按着他们在预处理SQL语句中从左到右出现的顺序分别被称作第1个、第2个...通配符,setXxx()第一个参数指定哪一个通配符,第二个参数指定通配符具体值。
事务:
步骤1:关闭自动提交模式(建立连接对象后的提交模式是自动提交模式)
con.setAutoCommit(false);
步骤2:处理事务
con.commit()
步骤3: 处理事务失败(撤销事务所有操作 放到catch中)
con.rollback()
批处理:
CachedRowSetImpl类:
为避免长时间占用数据库连接资源,取得ResultSet对象后就将其中数据存到CachedRowSetImpl对象中,然后就可以在读取结果集前关掉数据库连接啦!
CachedRowSetImpl继承了ResultSet的所有方法,操作方法一样。
将ResultSet对象rs中的数据保存到CachedRowSetImpl对象rowSet中:
CachedRowSetImplement rowSet = new CachedRowSetImplement();//缓冲结果集
rowSet.populate(rs);
con.close();