This example uses the Clone method to create copies of a Recordset and then lets the user position the record pointer of each copy independently.
import com.ms.wfc.data.*;
import java.io.* ;
public class CloneX
{
// The main entry point for the application.
public static void main (String[] args)
{
CloneX();
System.exit(0);
}
// CloneX function
static void CloneX()
{
// Assign SQL statement and connection string to variables.
String strSQL = "SELECT stor_name FROM Stores "
+ "ORDER BY stor_name";
String strCnn = "Provider=sqloledb;Data Source=srv;"
+ "Initial Catalog=Pubs;User Id=sa;Password=;";
// Define ADO Objects.
Recordset[] arstStores = null;
//Declarations.
BufferedReader in =
new BufferedReader (new InputStreamReader(System.in));
String line = null;
String strMessage;
String strFind;
int intLoop;
boolean booExit = true;
try
{
// Open recordset as a static cursor type recordset.
arstStores = new Recordset[3];
arstStores[0] = new Recordset();
arstStores[0].setCursorType(AdoEnums.CursorType.STATIC);
arstStores[0].setLockType(AdoEnums.LockType.BATCHOPTIMISTIC);
arstStores[0].open(strSQL,strCnn,AdoEnums.CursorType.STATIC,
AdoEnums.LockType.BATCHOPTIMISTIC,AdoEnums.CommandType.TEXT);
// Create two clones of the original Recordset.
arstStores[1] = (Recordset)arstStores[0].clone
(AdoEnums.LockType.BATCHOPTIMISTIC);
arstStores[2] = (Recordset)arstStores[0].clone
(AdoEnums.LockType.BATCHOPTIMISTIC);
while(booExit)
{
// Loop through the array so that on each pass,
// the user is searching a different copy of the
// same Recordset.
for (intLoop = 0; intLoop < 3; intLoop++)
{
// Ask for search string while showing where
// the current record pointer is for each Recordset
strMessage = "\nRecordsets from stores table:" + "\n"
+ " 1 - Original - Record pointer at "
+ arstStores[0].getField("stor_name").getString()
+ "\n" + " 2 - Clone - Record pointer at "
+ arstStores[1].getField("stor_name").getString()
+ "\n" + " 3 - Clone - Record pointer at "
+ arstStores[2].getField("stor_name").getString()
+ "\n";
System.out.println(strMessage);
System.out.println("Enter search string for #"
+ (intLoop+1) + "(Press <Enter> to Exit.)");
if((strFind = in.readLine().trim()) == null)
{
booExit = false;
break;
}
// Find the search string; if there's no
// match, jump to the last record.
arstStores[intLoop].setFilter("stor_name >= '" +
strFind + "'");
if (arstStores[intLoop].getEOF())
{
arstStores[intLoop].setFilter
(new Integer(AdoEnums.FilterGroup.NONE));
arstStores[intLoop].moveLast();
}
}
}
// Cleanup objects before exit.
arstStores[0].close();
arstStores[1].close();
arstStores[2].close();
}
catch( AdoException ae )
{
// Notify user of any errors that result from ADO.
// As passing a connection, check for null pointer first.
if (arstStores[0] != null)
{
PrintProviderError(arstStores[0].getActiveConnection());
}
else
{
System.out.println("Exception: " + ae.getMessage());
}
}
// System read requires this catch.
catch( java.io.IOException je)
{
PrintIOError(je);
}
}
// PrintProviderError Function
static void PrintProviderError( Connection Cnn1 )
{
// Print Provider errors from Connection object.
// ErrItem is an item object in the Connection’s Errors collection.
com.ms.wfc.data.Error ErrItem = null;
long nCount = 0;
int i = 0;
nCount = Cnn1.getErrors().getCount();
// If there are any errors in the collection, print them.
if( nCount > 0);
{
// Collection ranges from 0 to nCount - 1
for (i = 0; i< nCount; i++)
{
ErrItem = Cnn1.getErrors().getItem(i);
System.out.println("\t Error number: " + ErrItem.getNumber()
+ "\t" + ErrItem.getDescription() );
}
}
}
// PrintIOError Function
static void PrintIOError( java.io.IOException je)
{
System.out.println("Error \n");
System.out.println("\tSource = " + je.getClass() + "\n");
System.out.println("\tDescription = " + je.getMessage() + "\n");
}
}