6. 通过Metadata查询数据库信息
有两种Metadata,一种是数据库的:
DatabaseMetaData meta = conn.getMetaData();
通过它可以查询一些数据库的信息,例如:
ResultSet mrs = meta.getTables(null, null, null, new String[] { "TABLE" });
另外一种是返回结果集的:
ResultSet mrs = stat.executeQuery("SELECT * FROM " + tableName);
ResultSetMetaData meta = mrs.getMetaData();
可以查询结果集的字段信息。
7. 结果集
使用一般的ResultSet时有一个缺点,就是它必须保持数据库的连接,在有些情况下就不是很方便。这时就可以使用一些其它类型。
在javax.sql.rowset包中,有几种不同的类:
CachedRowSet:
可以直接作为ResultSet使用,也可以从ResultSet中取得所有数据(用populate方法)。修改了其中的数据之后,修改数据并不是立即返
回到数据库中,必须调用方法rowset.acceptChanges(conn)或是rowset.acceptChanges();如果在rowset中已经指定了连接,就
不用把连接传入方法中。
如果用populate方法取得数据,rowset并不能知道要修改的表的名称,这时必须用setTable方法设定
WebRowSet:
可以将数据存入XML文件中,然后用另一个对象把这个文件打开
FilteredRowSet,JoinRowSet
可以使用一些类似于select, join的操作
8. 事务处理
首先关掉连接的自动提交功能:
conn.setAutoCommit(false);
然后就和正常使用一样:
Statement stat = conn.createStatement();
执行不同的操作:
stat.executeUpdate(command1);
stat.executeUpdate(command2);
stat.executeUpdate(command3);
最后提交:
conn.commit();
如果有错误发生:
conn.rollback();
在事务中也可以设置一些savepoint,这样回滚的时候就可以控制回滚的地点
stat.executeUpdate(command1);
Savepoint svpt = conn.setSavepoint();
stat.executeUpdate(command2);
if (. . .) conn.rollback(svpt);
. . .
conn.commit();
9. 在做一些大批量的数据处理时,可以使用批量处理
stat.addBatch(command);
int[] counts = stat.executeBatch();
另外也可以把批量处理加入到一个事务中去。要注意的是批量处理不能处理select语句