脱机修改数据集
步骤
(1)、从foo数据表中检索得到一个结果集存放于queryDataSet中,然后关闭数据库,将queryDataSet中的数据复制到storageDataSet中
2、在storageDataSet数据集中插入两条id值为3和4的记录
3、在storageDataset中定位id值为1的记录,并将那么字段的值修改为bill
4、在storageDataSet数据集中删除id值为2的记录
5打印storageDataSet数据集中的临时数据,还为持久化到数据库
6、利用QueryResolver类的对象实例,实现数据持久化
附件为包和源程序
步骤
(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();
}
}
}
附件为包和源程序