Zielony Smok - logo witryny

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.