|
|
脱机修改数据集
步骤
(1)、从foo数据表中检索得到一个结果集存放于queryDataSet中,然后关闭数据库,将queryDataSet中的数据复制到storageDataSet中
2、在storageDataSet数据集中插入两条id值为3和4的记录
3、在storageDataset中定位id值为1的记录,并将那么字段的值修改为bill
4、在storageDataSet数据集中删除id值为2的记录
5打印storageDataSet数据集中的临时数据,还为持久化到数据库
6、利用QueryResolver类的对象实例,实现数据持久化
import java.sql.DriverManager;import java.sql.Connection;import com.borland.dx.dataset.StorageDataSet;import com.borland.dx.dataset.DataRow;import com.borland.dx.dataset.Locate;import com.borland.dx.sql.dataset.Load;import com.borland.dx.sql.dataset.Database;import com.borland.dx.sql.dataset.QueryDescriptor;import com.borland.dx.sql.dataset.QueryDataSet;import com.borland.dx.sql.dataset.QueryResolver;public class OffLineModify{static String driverName="org.apache.derby.jdbc.ClientDriver";static String dbUrl="jdbc:derby://localhost:1527/NetworkDB;create=true"; public static void main(String[] args) { //检索数据库,得到结果集 Database database=new Database(); QueryDataSet queryDataSet=new QueryDataSet(); Connection conn=null; try { Class.forName(driverName); conn=DriverManager.getConnection(dbUrl); database.setJdbcConnection(conn); queryDataSet.setQuery(new QueryDescriptor(database,"select ID,NAME from FOO", null, true, Load.ALL)); queryDataSet.open(); } catch(Exception e) { System.out.println("取得连接或者查询出错!"); e.printStackTrace(System.out); return; } finally { if(conn!=null) database.closeConnection(); } StorageDataSet storageDataSet=queryDataSet;//从QueryDataSet中获得拷贝 //插入记录: storageDataSet.goToRow(0); storageDataSet.insertRow(false); storageDataSet.setInt( "ID",3 ); storageDataSet.setString( "NAME","Mike" ); storageDataSet.insertRow(false); storageDataSet.setInt( "ID",4 ); storageDataSet.setString( "NAME","John" ); //查找、修改记录 DataRow locateRow=new DataRow(storageDataSet,"ID"); locateRow.setInt( "ID",1 ); storageDataSet.first(); if( storageDataSet.locate(locateRow,Locate.FIRST) ) do { storageDataSet.editRow(); storageDataSet.setString( "NAME","Bill" ); } while( storageDataSet.locate(locateRow,Locate.NEXT) ); //查找、删除记录 DataRow locateRow1=new DataRow(storageDataSet,"ID"); locateRow1.setInt( "ID",2 ); storageDataSet.first(); if( storageDataSet.locate(locateRow1,Locate.FIRST) ) do { storageDataSet.deleteRow(); storageDataSet.prior();//将指针向前移动一条记录,因为当前记录已被删除 } while( storageDataSet.locate(locateRow1,Locate.NEXT) ); //临时结果集展示 System.out.println("共有记录:"+storageDataSet.rowCount()); for(int i=0;i<storageDataSet.rowCount();i++) { storageDataSet.goToRow(i); System.out.println( storageDataSet.format("NAME") ); } //将修改结果写回数据库 QueryResolver queryResolver=new QueryResolver(); Database database1=new Database(); queryResolver.setDatabase(database1); Connection conn1=null; storageDataSet.setResolver(queryResolver); try { Class.forName(driverName); conn1=DriverManager.getConnection(dbUrl); database1.setJdbcConnection(conn1); storageDataSet.saveChanges(); } catch(Exception e) { System.out.println("取得连接或者写入数据库出错!"); e.printStackTrace(System.out); return; } finally { storageDataSet.close(); if(conn1!=null) database1.closeConnection(); } } }
附件为包和源程序 |
|