/*
JDBC Recipes: A Problem-Solution Approach (Problem-Solution Approach) (Hardcover)
by Mahmoud Parsian
# Publisher: Apress (September 15, 2005)
# Language: English
# ISBN: 1590595203
*/
import java.sql.SQLException;
import java.sql.Types;
import java.util.Hashtable;
import javax.sql.RowSet;
import javax.sql.RowSetInternal;
import javax.sql.RowSetMetaData;
import javax.sql.RowSetReader;
import javax.sql.RowSetWriter;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.RowSetMetaDataImpl;
import javax.sql.rowset.spi.SyncFactory;
import javax.sql.rowset.spi.SyncProvider;
import com.sun.rowset.CachedRowSetImpl;
public class Main {
CachedRowSet crs;
String stringColumn1;
String stringColumn3;
int intColumn2;
public Main() {
try {
SyncFactory.registerProvider("MySyncProvider");
Hashtable env = new Hashtable();
env.put(SyncFactory.ROWSET_SYNC_PROVIDER, "MySyncProvider");
crs = new CachedRowSetImpl(env);
crs.execute(); // load data from custom RowSetReader
System.out.println("Fetching from RowSet...");
while (crs.next()) {
displayData();
}
if (crs.isAfterLast() == true) {
System.out.println("We have reached the end");
System.out.println("crs row: " + crs.getRow());
}
System.out.println("And now backwards...");
while (crs.previous()) {
displayData();
} // end while previous
if (crs.isBeforeFirst()) {
System.out.println("We have reached the start");
}
crs.first();
if (crs.isFirst()) {
System.out.println("We have moved to first");
}
System.out.println("crs row: " + crs.getRow());
if (!crs.isBeforeFirst()) {
System.out.println("We aren't before the first row.");
}
crs.last();
if (crs.isLast()) {
System.out.println("...and now we have moved to the last");
}
System.out.println("crs row: " + crs.getRow());
if (!crs.isAfterLast()) {
System.out.println("we aren't after the last.");
}
} catch (SQLException e) {
e.printStackTrace();
System.err.println("SQLException: " + e.getMessage());
}
}
public void displayData() throws SQLException {
stringColumn1 = crs.getString(1);
if (crs.wasNull()) {
System.out.println("stringColumn1 is null");
} else {
System.out.println("stringColumn1: " + stringColumn1);
}
intColumn2 = crs.getInt(2);
if (crs.wasNull()) {
System.out.println("intColumn2 is null");
} else {
System.out.println("intColumn2: " + intColumn2);
}
stringColumn3 = crs.getString(3);
if (crs.wasNull()) {
System.out.println("stringColumn3 is null");
} else {
System.out.println("stringColumn3: " + stringColumn3);
}
}
public static void main(String[] a){
new Main();
}
}
---------------------------------------------------------------------
import java.sql.SQLException;
import java.sql.Types;
import java.util.Hashtable;
import javax.sql.RowSet;
import javax.sql.RowSetInternal;
import javax.sql.RowSetMetaData;
import javax.sql.RowSetReader;
import javax.sql.RowSetWriter;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.RowSetMetaDataImpl;
import javax.sql.rowset.spi.SyncFactory;
import javax.sql.rowset.spi.SyncProvider;
import com.sun.rowset.CachedRowSetImpl;
public class CustomRowSetReader implements RowSetReader {
public CustomRowSetReader() {
}
public void readData(RowSetInternal caller) throws SQLException {
System.out.println("--- CustomRowSetReader: begin. ---");
if (caller == null) {
System.out.println("CustomRowSetReader: caller is null.");
return;
}
CachedRowSet crs = (CachedRowSet) caller;
// CachedRowSet crs = (CachedRowSet) caller.getOriginal();
RowSetMetaData rsmd = new RowSetMetaDataImpl();
rsmd.setColumnCount(3);
rsmd.setColumnType(1, Types.VARCHAR);
rsmd.setColumnType(2, Types.INTEGER);
rsmd.setColumnType(3, Types.VARCHAR);
rsmd.setColumnName(1, "col1");
rsmd.setColumnName(2, "col2");
rsmd.setColumnName(3, "col3");
crs.setMetaData(rsmd);
System.out.println("CustomRowSetReader: crs.setMetaData( rsmd );");
crs.moveToInsertRow();
crs.updateString(1, "StringCol11");
crs.updateInt(2, 1);
crs.updateString(3, "StringCol31");
crs.insertRow();
System.out.println("CustomRowSetReader: crs.insertRow() 1");
crs.updateString(1, "StringCol12");
crs.updateInt(2, 2);
crs.updateString(3, "StringCol32");
crs.insertRow();
System.out.println("CustomRowSetReader: crs.insertRow() 2");
crs.moveToCurrentRow();
crs.beforeFirst();
displayRowSet(crs);
crs.beforeFirst();
// crs.acceptChanges();
System.out.println("CustomRowSetReader: end.");
} // end readData
static void displayRowSet(RowSet rs) throws SQLException {
while (rs.next()) {
System.out.println(rs.getRow() + " - " + rs.getString("col1") + ":" + rs.getInt("col2") + ":"
+ rs.getString("col3"));
}
}
}
---------------------------------------------------------------------------
import java.sql.SQLException;
import java.sql.Types;
import java.util.Hashtable;
import javax.sql.RowSet;
import javax.sql.RowSetInternal;
import javax.sql.RowSetMetaData;
import javax.sql.RowSetReader;
import javax.sql.RowSetWriter;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.RowSetMetaDataImpl;
import javax.sql.rowset.spi.SyncFactory;
import javax.sql.rowset.spi.SyncProvider;
import com.sun.rowset.CachedRowSetImpl;
class CustomRowSetWriter implements RowSetWriter {
public CustomRowSetWriter() {
System.out.println("CustomRowSetWriter: constructor.");
}
public boolean writeData(RowSetInternal caller) throws SQLException {
System.out.println("--- CustomRowSetWriter: begin. ---");
if (caller == null) {
System.out.println("CustomRowSetWriter: caller is null.");
return false;
}
CachedRowSet crs = (CachedRowSet) caller;
// for now do not write any data
return true;
}
}
---------------------------------------------------------------------------------
import javax.sql.RowSet;
import javax.sql.RowSetInternal;
import javax.sql.RowSetMetaData;
import javax.sql.RowSetReader;
import javax.sql.RowSetWriter;
import javax.sql.rowset.CachedRowSet;
import javax.sql.rowset.RowSetMetaDataImpl;
import javax.sql.rowset.spi.SyncFactory;
import javax.sql.rowset.spi.SyncProvider;
import com.sun.rowset.CachedRowSetImpl;
import javax.sql.rowset.spi.SyncProvider;
public class MySyncProvider extends SyncProvider {
private int dataSourceLock;
/**
* creates a default SyncProvider object.
*/
public MySyncProvider() {
System.out.println("MySyncProvider: constructor.");
this.dataSourceLock = SyncProvider.DATASOURCE_NO_LOCK;
}
/**
* Returns the current data source lock severity level active in this
* SyncProvider implementation.
*/
public int getDataSourceLock() {
return this.dataSourceLock;
}
/**
* Returns a constant indicating the grade of synchronization a RowSet object
* can expect from this SyncProvider object.
*/
public int getProviderGrade() {
return SyncProvider.GRADE_NONE;
}
/**
* Returns the unique identifier for this SyncProvider object.
*/
public String getProviderID() {
String id = getClass().getName();
System.out.println("--- MySyncProvider: getProviderID() =" + id);
return id; // "MySyncProvider";
}
/**
* Returns a javax.sql.RowSetReader object, which can be used to populate a
* RowSet object with data.
*/
public RowSetReader getRowSetReader() {
System.out.println("--- MySyncProvider: getRowSetReader() ---");
return new CustomRowSetReader();
}
/**
* Returns a javax.sql.RowSetWriter object, which can be used to write a
* RowSet object's data back to the underlying data source.
*/
public RowSetWriter getRowSetWriter() {
System.out.println("--- MySyncProvider: getRowSetWriter() ---");
return new CustomRowSetWriter();
}
/**
* Returns the vendor name of this SyncProvider instance
*/
public String getVendor() {
return "custom-made";
}
/**
* Returns the release version of this SyncProvider instance.
*/
public String getVersion() {
return "1.0";
}
/**
* Sets a lock on the underlying data source at the level indicated by
* datasourceLock.
*/
public void setDataSourceLock(int dataSourceLock) {
this.dataSourceLock = dataSourceLock;
}
/**
* Returns whether this SyncProvider implementation can perform
* synchronization between a RowSet object and the SQL VIEW in the data source
* from which the RowSet object got its data.
*/
public int supportsUpdatableView() {
return SyncProvider.NONUPDATABLE_VIEW_SYNC;
}
}
|