JdbcRowSet
należy do podłączonych zbiorów rzędów (connected rowsets). To oznacza, że cały czas musi być połączony z baza danych. Dlatego też jedynym źródłem danych dla JdbcRowSet
może być baza danych. Zbiór rzędów (rowset) jest zawsze dwukierunkowo przewijalny (bidirectional scrollable) i zawsze aktualizowalny (updatable) nawet jeżeli ResultSet
, po którym dziedziczy, takich możliwości nie ma.
Wszystkie poniższe klasy są opisane w treści klasy.
Wybieranie danych SELECT
Klasa R130A_SELECT.java
package aderby.jdbcs.rowsets.b_jdbcrowset; import javax.sql.rowset.JdbcRowSet; import javax.sql.rowset.RowSetFactory; import javax.sql.rowset.RowSetProvider; import java.sql.SQLException; public class R130A_SELECT { private static final String url = "jdbc:derby:C:/Przyklady/frazy2_db"; private static final String user = "jacek"; private static final String password = "placek"; private static final String sqlQuery = "SELECT * FROM frazy WHERE frazaID<?"; public static void main(String[] args) { try { //uruchomienie fabryki RowSetFactory factory = RowSetProvider.newFactory(); //utworzenie pustego zbioru rzędów w konstrukcji try-with-resources try (JdbcRowSet jdbcRs = factory.createJdbcRowSet()) { //ustawienie parametrów połączenia jdbcRs.setUrl(url); jdbcRs.setUsername(user); jdbcRs.setPassword(password); //wstawienie zapytania jdbcRs.setCommand(sqlQuery); //ustawienie parametru zapytania, wyszukamy wpisy z frazaID < 21 jdbcRs.setInt(1, 21); //Uruchomienie zapytania jdbcRs.execute(); //wydruk zapytania while (jdbcRs.next()) { int id = jdbcRs.getInt("frazaID"); String esp = jdbcRs.getString("esp"); String pol = jdbcRs.getString("pol"); System.out.println("Nr: " + id); System.out.println("ES: " + esp); System.out.println("PL: " + pol); System.out.println(); } } //Po wyjściu z try-with-resources JdbcRowset implementujący AutoCloseable zostaje //automatycznie zamknięty } catch (SQLException e) { e.printStackTrace(); } } }
Po uruchomieniu klasy na konsoli zobaczymy:
Nr: 1 ES: (ir) por partes PL: powoli, systematycznie (coś robić), po kolei Nr: 2 ES: (ya) está bien de ... PL: już wystarczy ... Nr: 3 ES: A Dios disgusta de los muertos maldecir, a los maldecidores en vida los hace punir. PL: O umarłych albo dobrze, albo wcale nie mówić. Nr: 4 ES: A buen entendedor, breve hablador. PL: Mądrej głowie dość dwie słowie. Nr: 5 ES: A buen hambre no hay pan duro. PL: Na dobry głód żaden chleb nie twardy. Nr: 6 ES: A buena hambre no hay falta salsa. PL: Głód najlepszą przyprawą. Nr: 7 ES: A buey viejo no le cates abrigo. PL: Nie ucz drwala rąbać drwa. Nr: 8 ES: A caballo regalado, no hay que mirarle el diente. PL: Darowanemu koniowi nie zagląda się w zęby. Nr: 9 ES: A cada pajarillo le gusta su nidillo. PL: Każdemu ptakowi swoje gniazdko miłe. Nr: 10 ES: A cada puerco le llega su San Martín. PL: Przyszła kryska na Matyska. Nr: 11 ES: A días claros, oscuros nublados. PL: Kto się rano śmieje, wieczorem płacze. Nr: 12 ES: A gran prisa, gran vagar. PL: Śpiesz się powoli. Nr: 13 ES: A gran subida, gran caída. PL: Kto wysoko lata, ten nisko upada. Kto wysoko lata, ten z wysoka spada. Nr: 14 ES: A la mala hilandera, la rueca le hace dentera. PL: Kiepskiej tanecznicy, to i rąbek u spódnicy przeszkadza. Nr: 15 ES: A la ocasión la pintan en calva. PL: Nie zasypiać gruszek w popiele. Nr: 16 ES: A las tres va la vencida. PL: Do trzech razy sztuka. Nr: 17 ES: A los bobos se les aparece la Madre de Dios. PL: Głupim szczęście sprzyja. Nr: 18 ES: A mal tiempo, buena cara. PL: Robić dobrą minę do złej gry. Nr: 19 ES: A menos bultos, más claridad. PL: Baba z wozu, koniom lżej. Nr: 20 ES: A perro flaco todo son pulgas. PL: Biednemu zawsze wiatr w oczy.
Dodawanie rzędu INSERT
<
Klasa R130B_INSERT.java
package aderby.jdbcs.rowsets.b_jdbcrowset; import javax.sql.rowset.JdbcRowSet; import javax.sql.rowset.RowSetFactory; import javax.sql.rowset.RowSetProvider; import java.sql.SQLException; public class R130B_INSERT { private static final String url = "jdbc:derby:C:/Przyklady/frazy2_db"; private static final String user = "jacek"; private static final String password = "placek"; private static final String sqlQuery = "SELECT * FROM frazy"; public static void main(String[] args) { try { //uruchomienie fabryki RowSetFactory factory = RowSetProvider.newFactory(); //utworzenie pustego zbioru rzedów try (JdbcRowSet jdbcRs = factory.createJdbcRowSet()) { //ustawienie parametrów połączenia jdbcRs.setUrl(url); jdbcRs.setUsername(user); jdbcRs.setPassword(password); //wstawienie zapytania jdbcRs.setCommand(sqlQuery); //Uruchomienie zapytanie jdbcRs.execute(); //przejście do ostatniego rzędu jdbcRs.moveToInsertRow(); //Wpisanie wartości jdbcRs.updateString("esp", "Matar la gallina de los huevos de oro."); jdbcRs.updateString("pol", "Zarżnąć kurę, która złote jaja znosi."); //wstawienie rzędu jdbcRs.insertRow(); //Przejście z powrotem do bieżącego rzędu jdbcRs.moveToCurrentRow(); } //Po wyjściu z try-with-resources JdbcRowset implementujący AutoCloseable zostaje //automatycznie zamknięty } catch (SQLException e) { e.printStackTrace(); } } }
Po uruchomieniu klasy dodany został jeden rekord. Rekordy są ułożone alfabetycznie.
Aktualizacja rzędu UPDATE
Klasa R130C_UPDATE.java
package aderby.jdbcs.rowsets.b_jdbcrowset; import javax.sql.rowset.JdbcRowSet; import javax.sql.rowset.RowSetFactory; import javax.sql.rowset.RowSetProvider; import java.sql.SQLException; public class R130C_UPDATE { private static final String url = "jdbc:derby:C:/Przyklady/frazy2_db"; private static final String user = "jacek"; private static final String password = "placek"; private static final String sqlQuery = "SELECT * FROM frazy"; public static void main(String[] args) { try { //uruchomienie fabryki RowSetFactory factory = RowSetProvider.newFactory(); //utworzenie pustego zbioru rzedów try (JdbcRowSet jdbcRs = factory.createJdbcRowSet()) { //ustawienie parametrów połączenia jdbcRs.setUrl(url); jdbcRs.setUsername(user); jdbcRs.setPassword(password); //wstawienie zapytania jdbcRs.setCommand(sqlQuery); //Uruchomienie zapytanie jdbcRs.execute(); //przejście do 6 rzędu jdbcRs.absolute(6); //Wpisanie wartości jdbcRs.updateString("pol", "Głód najlepszą przyprawą. Dosł. Prawdziwie głodnemu nie brakuje sosu."); //aktualizacja rzędu jdbcRs.updateRow(); //Przejście z powrotem do bieżącego rzędu jdbcRs.moveToCurrentRow(); } //Po wyjściu z try-with-resources JdbcRowset implementujący AutoCloseable zostaje //automatycznie zamknięty } catch (SQLException e) { e.printStackTrace(); } } }
Po uruchomieniu klasy dane w kolumnie 'pol’ rekordu nr 6 zostaną zaktualizowane (poprawione).
Usuwanie rzędu DELETE
Klasa R130D_DELETE
package aderby.jdbcs.rowsets.b_jdbcrowset; import javax.sql.rowset.JdbcRowSet; import javax.sql.rowset.RowSetFactory; import javax.sql.rowset.RowSetProvider; import java.sql.SQLException; public class R130D_DELETE { private static final String url = "jdbc:derby:C:/Przyklady/frazy2_db"; private static final String user = "jacek"; private static final String password = "placek"; private static final String sqlQuery = "SELECT * FROM frazy"; public static void main(String[] args) { try { //uruchomienie fabryki RowSetFactory factory = RowSetProvider.newFactory(); //utworzenie pustego zbioru rzedów try (JdbcRowSet jdbcRs = factory.createJdbcRowSet()) { //ustawienie parametrów połączenia jdbcRs.setUrl(url); jdbcRs.setUsername(user); jdbcRs.setPassword(password); //wstawienie zapytania jdbcRs.setCommand(sqlQuery); //Uruchomienie zapytanie jdbcRs.execute(); //przejście do ostatniego rzędu jdbcRs.last(); //wydruk zapytania int id = jdbcRs.getInt("frazaID"); String esp = jdbcRs.getString("esp"); String pol = jdbcRs.getString("pol"); System.out.println("Nr: " + id); System.out.println("ES: " + esp); System.out.println("PL: " + pol); System.out.println(); //aktualizacja rzędu jdbcRs.deleteRow(); //Przejście z powrotem do bieżącego rzędu jdbcRs.moveToCurrentRow(); } } catch (SQLException e) { e.printStackTrace(); } } }
Po uruchomieniu klasy na konsoli zobaczymy rekord, który został usunięty z bazy danych. Jest to ostatni rekord.
Nr: 1232 ES: Matar la gallina de los huevos de oro. PL: Zarżnąć kurę, która złote jaja znosi.