diff --git a/core-java/customers.xml b/core-java/customers.xml
new file mode 100644
index 0000000000..b52dc27633
--- /dev/null
+++ b/core-java/customers.xml
@@ -0,0 +1,95 @@
+
+
+
+ SELECT * FROM customers
+ 1008
+
+ true
+ 1000
+ 0
+ 2
+
+
+
+ 0
+ 0
+ 0
+ true
+ ResultSet.TYPE_SCROLL_INSENSITIVE
+ false
+ customers
+ jdbc:h2:mem:testdb
+
+ com.sun.rowset.providers.RIOptimisticProvider
+ Oracle Corporation
+ 1.0
+ 2
+ 1
+
+
+
+ 2
+
+ 1
+ false
+ true
+ false
+ 0
+ true
+ true
+ 11
+ ID
+ ID
+ PUBLIC
+ 10
+ 0
+ CUSTOMERS
+ TESTDB
+ 4
+ INTEGER
+
+
+ 2
+ false
+ true
+ false
+ 0
+ true
+ true
+ 50
+ NAME
+ NAME
+ PUBLIC
+ 50
+ 0
+ CUSTOMERS
+ TESTDB
+ 12
+ VARCHAR
+
+
+
+
+ 1
+ Customer1
+
+
+ 2
+ Customer2
+
+
+ 3
+ Customer3
+
+
+ 4
+ Customer4
+
+
+ 5
+ Customer5
+
+
+
diff --git a/core-java/pom.xml b/core-java/pom.xml
index 2c4cbfc37b..068a772c43 100644
--- a/core-java/pom.xml
+++ b/core-java/pom.xml
@@ -1,479 +1,496 @@
- 4.0.0
- com.baeldung
- core-java
- 0.1.0-SNAPSHOT
- jar
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
+ com.baeldung
+ core-java
+ 0.1.0-SNAPSHOT
+ jar
- core-java
+ core-java
-
+
-
-
- net.sourceforge.collections
- collections-generic
- ${collections-generic.version}
-
-
- com.google.guava
- guava
- ${guava.version}
-
-
-
- org.apache.commons
- commons-collections4
- ${commons-collections4.version}
-
-
-
- commons-io
- commons-io
- ${commons-io.version}
-
-
-
- org.apache.commons
- commons-lang3
- ${commons-lang3.version}
-
-
-
- org.apache.commons
- commons-math3
- ${commons-math3.version}
-
-
-
- org.decimal4j
- decimal4j
- ${decimal4j.version}
-
-
-
- org.bouncycastle
- bcprov-jdk15on
- ${bouncycastle.version}
-
-
-
- org.unix4j
- unix4j-command
- ${unix4j.version}
-
-
-
- com.googlecode.grep4j
- grep4j
- ${grep4j.version}
-
-
-
-
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson.version}
-
-
-
-
- log4j
- log4j
- 1.2.17
-
-
- org.slf4j
- slf4j-api
- ${org.slf4j.version}
-
-
- ch.qos.logback
- logback-classic
- ${logback.version}
-
-
-
- org.slf4j
- jcl-over-slf4j
- ${org.slf4j.version}
-
-
-
- org.slf4j
- log4j-over-slf4j
- ${org.slf4j.version}
-
-
- org.projectlombok
- lombok
- ${lombok.version}
- provided
-
-
-
-
-
- org.hamcrest
- hamcrest-all
- 1.3
- test
-
-
-
- junit
- junit
- ${junit.version}
- test
-
-
-
- org.hamcrest
- hamcrest-core
- ${org.hamcrest.version}
- test
-
-
- org.hamcrest
- hamcrest-library
- ${org.hamcrest.version}
- test
-
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
-
- org.mockito
- mockito-core
- ${mockito.version}
- test
-
-
- com.jayway.awaitility
- awaitility
- ${avaitility.version}
- test
-
-
-
- commons-codec
- commons-codec
- ${commons-codec.version}
-
-
-
- org.javamoney
- moneta
- 1.1
-
-
-
- org.owasp.esapi
- esapi
- 2.1.0.1
-
-
-
- com.codepoetics
- protonpack
- ${protonpack.version}
-
-
- one.util
- streamex
- ${streamex.version}
-
-
- io.vavr
- vavr
- ${vavr.version}
-
-
- org.openjdk.jmh
- jmh-core
- 1.19
-
-
- org.openjdk.jmh
- jmh-generator-annprocess
- 1.19
-
+
- org.springframework
- spring-web
- 4.3.4.RELEASE
+ net.sourceforge.collections
+ collections-generic
+ ${collections-generic.version}
+
+
+ com.google.guava
+ guava
+ ${guava.version}
-
-
- core-java
-
-
- src/main/resources
- true
-
-
+
+ org.apache.commons
+ commons-collections4
+ ${commons-collections4.version}
+
-
+
+ commons-io
+ commons-io
+ ${commons-io.version}
+
-
- org.apache.maven.plugins
- maven-compiler-plugin
- ${maven-compiler-plugin.version}
-
- 1.8
- 1.8
-
-
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- **/*LiveTest.java
- **/*IntegrationTest.java
- **/*LongRunningUnitTest.java
- **/*ManualTest.java
-
+
+ org.apache.commons
+ commons-math3
+ ${commons-math3.version}
+
-
-
+
+ org.decimal4j
+ decimal4j
+ ${decimal4j.version}
+
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
- copy-dependencies
- prepare-package
-
- copy-dependencies
-
-
- ${project.build.directory}/libs
-
-
-
-
+
+ org.bouncycastle
+ bcprov-jdk15on
+ ${bouncycastle.version}
+
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
-
- true
- libs/
- org.baeldung.executable.ExecutableMavenJar
-
-
-
-
+
+ org.unix4j
+ unix4j-command
+ ${unix4j.version}
+
-
- org.apache.maven.plugins
- maven-assembly-plugin
-
-
- package
-
- single
-
-
- ${project.basedir}
-
-
- org.baeldung.executable.ExecutableMavenJar
-
-
-
- jar-with-dependencies
-
-
-
-
-
+
+ com.googlecode.grep4j
+ grep4j
+ ${grep4j.version}
+
+
-
- org.apache.maven.plugins
- maven-shade-plugin
-
-
-
- shade
-
-
- true
-
-
- org.baeldung.executable.ExecutableMavenJar
-
-
-
-
-
-
+
-
- com.jolira
- onejar-maven-plugin
-
-
-
- org.baeldung.executable.ExecutableMavenJar
- true
- ${project.build.finalName}-onejar.${project.packaging}
-
-
- one-jar
-
-
-
-
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
- repackage
-
-
- spring-boot
- org.baeldung.executable.ExecutableMavenJar
-
-
-
-
+
+
+ log4j
+ log4j
+ 1.2.17
+
+
+ org.slf4j
+ slf4j-api
+ ${org.slf4j.version}
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+
+ org.slf4j
+ jcl-over-slf4j
+ ${org.slf4j.version}
+
+
+
+ org.slf4j
+ log4j-over-slf4j
+ ${org.slf4j.version}
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
-
- org.codehaus.mojo
- exec-maven-plugin
- 1.6.0
-
- java
- com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
-
- -Xmx300m
- -XX:+UseParallelGC
- -classpath
-
- com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
-
-
-
+
+
+
+ org.hamcrest
+ hamcrest-all
+ 1.3
+ test
+
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+
+ org.hamcrest
+ hamcrest-core
+ ${org.hamcrest.version}
+ test
+
+
+ org.hamcrest
+ hamcrest-library
+ ${org.hamcrest.version}
+ test
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+ org.mockito
+ mockito-core
+ ${mockito.version}
+ test
+
+
+ com.jayway.awaitility
+ awaitility
+ ${avaitility.version}
+ test
+
+
+
+ commons-codec
+ commons-codec
+ ${commons-codec.version}
+
+
+
+ org.javamoney
+ moneta
+ 1.1
+
+
+
+ org.owasp.esapi
+ esapi
+ 2.1.0.1
+
+
+ com.h2database
+ h2
+ 1.4.196
+ runtime
+
+
+ com.sun.messaging.mq
+ fscontext
+ ${fscontext.version}
+
+
+ com.codepoetics
+ protonpack
+ ${protonpack.version}
+
+
+ one.util
+ streamex
+ ${streamex.version}
+
+
+ io.vavr
+ vavr
+ ${vavr.version}
+
+
+ org.openjdk.jmh
+ jmh-core
+ 1.19
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ 1.19
+
+
+ org.springframework
+ spring-web
+ 4.3.4.RELEASE
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+ 1.5.8.RELEASE
+
+
+
+
+
+ core-java
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ 1.8
+ 1.8
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ **/*LiveTest.java
+ **/*IntegrationTest.java
+ **/*LongRunningUnitTest.java
+ **/*ManualTest.java
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-dependencies
+ prepare-package
+
+ copy-dependencies
+
+
+ ${project.build.directory}/libs
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ true
+ libs/
+ org.baeldung.executable.ExecutableMavenJar
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ package
+
+ single
+
+
+ ${project.basedir}
+
+
+ org.baeldung.executable.ExecutableMavenJar
+
+
+
+ jar-with-dependencies
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+
+
+
+ shade
+
+
+ true
+
+
+ org.baeldung.executable.ExecutableMavenJar
+
+
+
+
+
+
+
+
+ com.jolira
+ onejar-maven-plugin
+
+
+
+ org.baeldung.executable.ExecutableMavenJar
+ true
+ ${project.build.finalName}-onejar.${project.packaging}
+
+
+ one-jar
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+ spring-boot
+ org.baeldung.executable.ExecutableMavenJar
+
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 1.6.0
+
+ java
+ com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
+
+ -Xmx300m
+ -XX:+UseParallelGC
+ -classpath
+
+ com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
+
+
+
-
+
-
+
-
-
- integration
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- integration-test
-
- test
-
-
-
- **/*ManualTest.java
-
-
- **/*IntegrationTest.java
-
-
-
-
-
-
- json
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
+
+
+ integration
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ integration-test
+
+ test
+
+
+
+ **/*ManualTest.java
+
+
+ **/*IntegrationTest.java
+
+
+
+
+
+
+ json
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
-
-
- run-benchmarks
-
- none
-
- exec
-
-
- test
- java
-
- -classpath
-
- org.openjdk.jmh.Main
- .*
-
-
-
-
-
-
-
-
-
+
+
+ run-benchmarks
+
+ none
+
+ exec
+
+
+ test
+ java
+
+ -classpath
+
+ org.openjdk.jmh.Main
+ .*
+
+
+
+
+
+
+
+
+
-
-
- 2.8.5
+
+
+ 2.8.5
-
- 1.7.21
- 1.1.7
+
+ 1.7.21
+ 1.1.7
-
- 23.0
- 3.5
- 1.55
- 1.10
- 3.6.1
- 1.0.3
- 2.5
- 4.1
- 4.01
- 0.4
- 1.8.7
- 1.16.12
- 4.6-b01
- 1.13
- 0.6.5
- 0.9.0
-
-
- 1.3
- 4.12
- 2.8.9
- 3.6.1
- 1.7.0
+
+ 22.0
+ 3.5
+ 1.55
+ 1.10
+ 3.6.1
+ 1.0.3
+ 2.5
+ 4.1
+ 4.01
+ 0.4
+ 1.8.7
+ 1.16.12
+ 4.6-b01
+ 1.13
+ 0.6.5
+ 0.9.0
-
- 3.6.0
- 2.19.1
-
-
\ No newline at end of file
+
+ 1.3
+ 4.12
+ 2.8.9
+ 3.6.1
+ 1.7.0
+
+
+ 3.6.0
+ 2.19.1
+
+
diff --git a/core-java/src/main/java/com/baeldung/jdbcrowset/DatabaseConfiguration.java b/core-java/src/main/java/com/baeldung/jdbcrowset/DatabaseConfiguration.java
new file mode 100644
index 0000000000..9cfcff468e
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/jdbcrowset/DatabaseConfiguration.java
@@ -0,0 +1,51 @@
+package com.baeldung.jdbcrowset;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import javax.sql.rowset.JdbcRowSet;
+import javax.sql.rowset.RowSetFactory;
+import javax.sql.rowset.RowSetProvider;
+
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@EnableAutoConfiguration
+public class DatabaseConfiguration {
+
+
+ public static Connection geth2Connection() throws Exception {
+ Class.forName("org.h2.Driver");
+ System.out.println("Driver Loaded.");
+ String url = "jdbc:h2:mem:testdb";
+ return DriverManager.getConnection(url, "sa", "");
+ }
+
+ public static void initDatabase(Statement stmt) throws SQLException{
+ int iter = 1;
+ while(iter<=5){
+ String customer = "Customer"+iter;
+ String sql ="INSERT INTO customers(id, name) VALUES ("+iter+ ",'"+customer+"');";
+ System.out.println("here is sql statmeent for execution: " + sql);
+ stmt.executeUpdate(sql);
+ iter++;
+ }
+
+ int iterb = 1;
+ while(iterb<=5){
+ String associate = "Associate"+iter;
+ String sql = "INSERT INTO associates(id, name) VALUES("+iterb+",'"+associate+"');";
+ System.out.println("here is sql statement for associate:"+ sql);
+ stmt.executeUpdate(sql);
+ iterb++;
+ }
+
+
+ }
+
+
+
+}
diff --git a/core-java/src/main/java/com/baeldung/jdbcrowset/ExampleListener.java b/core-java/src/main/java/com/baeldung/jdbcrowset/ExampleListener.java
new file mode 100644
index 0000000000..7d5bb759f5
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/jdbcrowset/ExampleListener.java
@@ -0,0 +1,24 @@
+package com.baeldung.jdbcrowset;
+
+import javax.sql.RowSetEvent;
+import javax.sql.RowSetListener;
+
+public class ExampleListener implements RowSetListener {
+
+
+ public void cursorMoved(RowSetEvent event) {
+ System.out.println("ExampleListener alerted of cursorMoved event");
+ System.out.println(event.toString());
+ }
+
+ public void rowChanged(RowSetEvent event) {
+ System.out.println("ExampleListener alerted of rowChanged event");
+ System.out.println(event.toString());
+ }
+
+ public void rowSetChanged(RowSetEvent event) {
+ System.out.println("ExampleListener alerted of rowSetChanged event");
+ System.out.println(event.toString());
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/jdbcrowset/FilterExample.java b/core-java/src/main/java/com/baeldung/jdbcrowset/FilterExample.java
new file mode 100644
index 0000000000..14e738f72d
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/jdbcrowset/FilterExample.java
@@ -0,0 +1,46 @@
+package com.baeldung.jdbcrowset;
+
+import java.sql.SQLException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.sql.RowSet;
+import javax.sql.rowset.Predicate;
+
+public class FilterExample implements Predicate {
+
+ private Pattern pattern;
+
+ public FilterExample(String regexQuery) {
+ if (regexQuery != null && !regexQuery.isEmpty()) {
+ pattern = Pattern.compile(regexQuery);
+ }
+ }
+
+ public boolean evaluate(RowSet rs) {
+ try {
+ if (!rs.isAfterLast()) {
+ String name = rs.getString("name");
+ System.out.println(String.format(
+ "Searching for pattern '%s' in %s", pattern.toString(),
+ name));
+ Matcher matcher = pattern.matcher(name);
+ return matcher.matches();
+ } else
+ return false;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ public boolean evaluate(Object value, int column) throws SQLException {
+ throw new UnsupportedOperationException("This operation is unsupported.");
+ }
+
+ public boolean evaluate(Object value, String columnName)
+ throws SQLException {
+ throw new UnsupportedOperationException("This operation is unsupported.");
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/jdbcrowset/JdbcRowsetApplication.java b/core-java/src/main/java/com/baeldung/jdbcrowset/JdbcRowsetApplication.java
new file mode 100644
index 0000000000..72c462ac42
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/jdbcrowset/JdbcRowsetApplication.java
@@ -0,0 +1,139 @@
+package com.baeldung.jdbcrowset;
+
+import java.io.FileOutputStream;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import com.sun.rowset.*;
+
+import javax.sql.rowset.CachedRowSet;
+import javax.sql.rowset.FilteredRowSet;
+import javax.sql.rowset.JdbcRowSet;
+import javax.sql.rowset.JoinRowSet;
+import javax.sql.rowset.RowSetFactory;
+import javax.sql.rowset.RowSetProvider;
+import javax.sql.rowset.WebRowSet;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class JdbcRowsetApplication {
+
+ public static void main(String[] args) throws Exception {
+ SpringApplication.run(JdbcRowsetApplication.class, args);
+ Statement stmt = null;
+ try {
+ Connection conn = DatabaseConfiguration.geth2Connection();
+
+ String drop = "DROP TABLE IF EXISTS customers, associates;";
+ String schema = "CREATE TABLE customers (id INT NOT NULL, name VARCHAR(50) NOT NULL, PRIMARY KEY (id)); ";
+ String schemapartb = "CREATE TABLE associates (id INT NOT NULL, name VARCHAR(50) NOT NULL, PRIMARY KEY (id));";
+
+ stmt = conn.createStatement();
+ stmt.executeUpdate(drop);
+ stmt.executeUpdate(schema);
+ stmt.executeUpdate(schemapartb);
+ // insert data
+ DatabaseConfiguration.initDatabase(stmt);
+ // JdbcRowSet Example
+ String sql = "SELECT * FROM customers";
+ JdbcRowSet jdbcRS;
+ jdbcRS = new JdbcRowSetImpl(conn);
+ jdbcRS.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
+ jdbcRS.setCommand(sql);
+ jdbcRS.execute();
+ jdbcRS.addRowSetListener(new ExampleListener());
+
+ while (jdbcRS.next()) {
+ // each call to next, generates a cursorMoved event
+ System.out.println("id=" + jdbcRS.getString(1));
+ System.out.println("name=" + jdbcRS.getString(2));
+ }
+
+ // CachedRowSet Example
+ String username = "sa";
+ String password = "";
+ String url = "jdbc:h2:mem:testdb";
+ CachedRowSet crs = new CachedRowSetImpl();
+ crs.setUsername(username);
+ crs.setPassword(password);
+ crs.setUrl(url);
+ crs.setCommand(sql);
+ crs.execute();
+ crs.addRowSetListener(new ExampleListener());
+ while (crs.next()) {
+ if (crs.getInt("id") == 1) {
+ System.out.println("CRS found customer1 and will remove the record.");
+ crs.deleteRow();
+ break;
+ }
+ }
+
+ // WebRowSet example
+ WebRowSet wrs = new WebRowSetImpl();
+ wrs.setUsername(username);
+ wrs.setPassword(password);
+ wrs.setUrl(url);
+ wrs.setCommand(sql);
+ wrs.execute();
+ FileOutputStream ostream = new FileOutputStream("customers.xml");
+ wrs.writeXml(ostream);
+
+ // JoinRowSet example
+ CachedRowSetImpl customers = new CachedRowSetImpl();
+ customers.setUsername(username);
+ customers.setPassword(password);
+ customers.setUrl(url);
+ customers.setCommand(sql);
+ customers.execute();
+
+ CachedRowSetImpl associates = new CachedRowSetImpl();
+ associates.setUsername(username);
+ associates.setPassword(password);
+ associates.setUrl(url);
+ String associatesSQL = "SELECT * FROM associates";
+ associates.setCommand(associatesSQL);
+ associates.execute();
+
+ JoinRowSet jrs = new JoinRowSetImpl();
+ final String ID = "id";
+ final String NAME = "name";
+ jrs.addRowSet(customers, ID);
+ jrs.addRowSet(associates, ID);
+ jrs.last();
+ System.out.println("Total rows: " + jrs.getRow());
+ jrs.beforeFirst();
+ while (jrs.next()) {
+
+ String string1 = jrs.getString(ID);
+ String string2 = jrs.getString(NAME);
+ System.out.println("ID: " + string1 + ", NAME: " + string2);
+ }
+
+ // FilteredRowSet example
+ RowSetFactory rsf = RowSetProvider.newFactory();
+ FilteredRowSet frs = rsf.createFilteredRowSet();
+ frs.setCommand("select * from customers");
+ frs.execute(conn);
+ frs.setFilter(new FilterExample("^[A-C].*"));
+
+ ResultSetMetaData rsmd = frs.getMetaData();
+ int columncount = rsmd.getColumnCount();
+ while (frs.next()) {
+ for (int i = 1; i <= columncount; i++) {
+ System.out.println(rsmd.getColumnLabel(i) + " = " + frs.getObject(i) + " ");
+ }
+ }
+
+ } catch (SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/core-java/src/test/java/com/baeldung/jdbcrowset/JdbcRowSetTest.java b/core-java/src/test/java/com/baeldung/jdbcrowset/JdbcRowSetTest.java
new file mode 100644
index 0000000000..cb455c213a
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/jdbcrowset/JdbcRowSetTest.java
@@ -0,0 +1,157 @@
+package com.baeldung.jdbcrowset;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import javax.sql.rowset.CachedRowSet;
+import javax.sql.rowset.FilteredRowSet;
+import javax.sql.rowset.JdbcRowSet;
+import javax.sql.rowset.JoinRowSet;
+import javax.sql.rowset.RowSetFactory;
+import javax.sql.rowset.RowSetProvider;
+import javax.sql.rowset.WebRowSet;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.sun.rowset.CachedRowSetImpl;
+import com.sun.rowset.JdbcRowSetImpl;
+import com.sun.rowset.JoinRowSetImpl;
+import com.sun.rowset.WebRowSetImpl;
+
+public class JdbcRowSetTest {
+ Statement stmt = null;
+ String username = "sa";
+ String password = "";
+ String url = "jdbc:h2:mem:testdb";
+ String sql = "SELECT * FROM customers";
+
+ @Before
+ public void setup() throws Exception {
+ Connection conn = DatabaseConfiguration.geth2Connection();
+
+ String drop = "DROP TABLE IF EXISTS customers, associates;";
+ String schema = "CREATE TABLE customers (id INT NOT NULL, name VARCHAR(50) NOT NULL, PRIMARY KEY (id)); ";
+ String schemapartb = "CREATE TABLE associates (id INT NOT NULL, name VARCHAR(50) NOT NULL, PRIMARY KEY (id));";
+ stmt = conn.createStatement();
+ stmt.executeUpdate(drop);
+ stmt.executeUpdate(schema);
+ stmt.executeUpdate(schemapartb);
+ DatabaseConfiguration.initDatabase(stmt);
+
+ }
+
+ // JdbcRowSet Example
+ @Test
+ public void createJdbcRowSet_SelectCustomers_ThenCorrect() throws Exception {
+
+ String sql = "SELECT * FROM customers";
+ JdbcRowSet jdbcRS;
+ Connection conn = DatabaseConfiguration.geth2Connection();
+ jdbcRS = new JdbcRowSetImpl(conn);
+ jdbcRS.setType(ResultSet.TYPE_SCROLL_INSENSITIVE);
+ jdbcRS.setCommand(sql);
+ jdbcRS.execute();
+ jdbcRS.addRowSetListener(new ExampleListener());
+
+ while (jdbcRS.next()) {
+ // each call to next, generates a cursorMoved event
+ System.out.println("id=" + jdbcRS.getString(1));
+ System.out.println("name=" + jdbcRS.getString(2));
+ }
+
+ }
+
+ // CachedRowSet Example
+ @Test
+ public void createCachedRowSet_DeleteRecord_ThenCorrect() throws Exception {
+
+ CachedRowSet crs = new CachedRowSetImpl();
+ crs.setUsername(username);
+ crs.setPassword(password);
+ crs.setUrl(url);
+ crs.setCommand(sql);
+ crs.execute();
+ crs.addRowSetListener(new ExampleListener());
+ while (crs.next()) {
+ if (crs.getInt("id") == 1) {
+ System.out.println("CRS found customer1 and will remove the record.");
+ crs.deleteRow();
+ break;
+ }
+ }
+ }
+
+ // WebRowSet example
+ @Test
+ public void createWebRowSet_SelectCustomers_WritetoXML_ThenCorrect() throws SQLException, IOException {
+
+ WebRowSet wrs = new WebRowSetImpl();
+ wrs.setUsername(username);
+ wrs.setPassword(password);
+ wrs.setUrl(url);
+ wrs.setCommand(sql);
+ wrs.execute();
+ FileOutputStream ostream = new FileOutputStream("customers.xml");
+ wrs.writeXml(ostream);
+ }
+
+ // JoinRowSet example
+ @Test
+ public void createCachedRowSets_DoJoinRowSet_ThenCorrect() throws Exception {
+
+ CachedRowSetImpl customers = new CachedRowSetImpl();
+ customers.setUsername(username);
+ customers.setPassword(password);
+ customers.setUrl(url);
+ customers.setCommand(sql);
+ customers.execute();
+
+ CachedRowSetImpl associates = new CachedRowSetImpl();
+ associates.setUsername(username);
+ associates.setPassword(password);
+ associates.setUrl(url);
+ String associatesSQL = "SELECT * FROM associates";
+ associates.setCommand(associatesSQL);
+ associates.execute();
+
+ JoinRowSet jrs = new JoinRowSetImpl();
+ final String ID = "id";
+ final String NAME = "name";
+ jrs.addRowSet(customers, ID);
+ jrs.addRowSet(associates, ID);
+ jrs.last();
+ System.out.println("Total rows: " + jrs.getRow());
+ jrs.beforeFirst();
+ while (jrs.next()) {
+
+ String string1 = jrs.getString(ID);
+ String string2 = jrs.getString(NAME);
+ System.out.println("ID: " + string1 + ", NAME: " + string2);
+ }
+ }
+
+ // FilteredRowSet example
+ @Test
+ public void createFilteredRowSet_filterByRegexExpression_thenCorrect() throws Exception {
+ RowSetFactory rsf = RowSetProvider.newFactory();
+ FilteredRowSet frs = rsf.createFilteredRowSet();
+ frs.setCommand("select * from customers");
+ Connection conn = DatabaseConfiguration.geth2Connection();
+ frs.execute(conn);
+ frs.setFilter(new FilterExample("^[A-C].*"));
+
+ ResultSetMetaData rsmd = frs.getMetaData();
+ int columncount = rsmd.getColumnCount();
+ while (frs.next()) {
+ for (int i = 1; i <= columncount; i++) {
+ System.out.println(rsmd.getColumnLabel(i) + " = " + frs.getObject(i) + " ");
+ }
+ }
+ }
+}