Inne działy

Java przykładowe programy

 

Java uzyskanie dostępu do tabeli bazy danych

 

Teraz, gdy już połączyliśmy się z bazą danych, następny krok, to uzyskanie dostępu do tabeli w bazie danych. W tym celu, należy wykonać instrukcję SQL, a następnie przetworzyć wszystkie wiersze i kolumny, które zostały zwrócone.

Do wykonywania instrukcji SQL, należy skonfigurować obiekt Statement. Więc należy dodać linię importu u góry w kodzie:

import java.sql.Statement;

W bloku try ... catch trzeba dodać następujący wiersz (dodaj go tuż poniżej linii połączenia):

Statement stmt = con.createStatement( );

Tutaj tworzymy obiekt Statement o nazwie stmt. Obiekt Statement potrzebuje obiektu Connection, z metodą createStatment.

Musimy również dodać instrukcję SQL do obiektu Statement, którą chcemy wykonać. Należy dodać następującą linię do kodu:

String SQL = "SELECT * FROM Pracownik";

Powyższe stwierdzenie wybiera wszystkie rekordy z tabeli bazy danych o nazwie Pracownik .

Możemy przekazać to zapytanie SQL do metody obiektu Statement o nazwie executeQuery . Obiekt Statement następnie wybierze wszystkie rekordy, które spełniają nasze kryteria.

Jednak metoda executeQuery zwraca wszystkie rekordy za pomocą klasy ResultSet. Zanim wyjaśnimy, co to jest, dodaj następującą linię importu u góry w kodzie:

import java.sql.ResultSet;

Teraz dodaj tę linię tuż poniżej linii String SQL:

ResultSet rs = stmt.executeQuery( SQL );

Więc nasz obiekt ResultSet nazywa się rs . Pozwoli on na pobranie wszystkich rekordów z tabeli bazy danych.Zanim pójdziemy dalej, wyjaśnimy, co to jest Resultsets.

 

ResultSets w Javie

ResultSet jest to sposób przechowywania i przetwarzania rekordów zwróconych z zapytania SQL. ResultSets zawiera trzy różne typy. Który typ użyć, zależy od tego, co chcesz zrobić z danymi:

  1. Czy chcesz po prostu przejść do przodu poprzez rekordy, od początku do końca?

2.    Chcesz przejść do przodu i do tyłu poprzez rekordy, z jednoczesnym wykryciem wszelkich zmian wprowadzonych do rekordów?

3.    Czy chcesz przejść do przodu i do tyłu poprzez rekordy, ale bez informowania o wszelkich zmianach wprowadzonych do rekordów?

Typ numer 1 na liście powyżej nazywa się TYPE_FORWARD_ONLY ResultSet. Numer 2 na liście jest to TYPE_SCROLL_SENSITIVE ResultSet. ResultSet trzecia opcja nazywa się TYPE_SCROLL_INSENSITIVE.

Typ ResultSet umieszcza się między nawiasami okrągłymi metody createStement:

Statement stmt = con.createStatement( );

Ponieważ mamy puste nawiasy okrągłe, dostaniemy domyślny zestaw rekordów, który jest TYPE_FORWARD_ONLY. W następnej sekcji możemy użyć innych typów. Ale można z nich korzystać tak:

Statement stmt = con.createStatement( RecordSet.TYPE_SCROLL_SENSITIVE );

Więc najpierw wpisz słowo RecordSet. Po kropce można dodać typ zestawu rekordów, które chcesz użyć.

Jednak to nie koniec. Jeśli chcesz użyć TYPE_SCROLL_SENSITIVE lub TYPE_SCROLL_INSENSITIVE trzeba także określić, czy ResultSet jest tylko do odczytu lub czy można go aktualizować. Można to zrobić za pomocą dwóch wbudowanych stałych CONCUR_READ_ONLY i CONCUR_UPDATABLE. Umieszcza się je po słowie RecordSet:

ResultSet.CONCUR_READ_ONLY
ResultSet.CONCUR_UPDATABLE

Prowadzi to do dość długiego wiersza kodu:

Statement stmt = con.createStatement( RecordSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

I jeszcze jedno, aby używać ResultSets jest coś, co nazywa się Cursor . Cursor jest naprawdę tylko wskaźnikiem do wiersza tabeli. Kiedy po raz pierwszy ładujemy rekordy w ResultSet, Cursor znajduję się, tuż przed pierwszym wierszem w tabeli. Następnie używamy metody do manipulowania kursorem. Ale ideą jest określenie konkretnego wiersza w tabeli.

 

Korzystanie z ResultSet

Kiedy już załadujemy wszystkie rekordy w ResultSet, istnieją metody, których można użyć do manipulowania rekordami. Oto metody, które będziesz używać najczęściej:

 

next Przesuwa kursor do przodu o jeden wiersz. Zwraca True (prawda) , jeśli kursor znajduje się teraz na wierszu i False (fałsz) , jeśli kursor znajduje się za ostatnim wierszem.
previous Przesuwa kursor do tyłu o jeden wiersz. Zwraca True (prawda) , jeśli kursor znajduje się teraz na wierszu i False (fałsz) , jeśli kursor znajduje się przed pierwszym wierszem.
first Przesuwa kursor do pierwszego wiersza w obiekcie ResultSet. Zwraca true, jeśli kursor znajduje się teraz w pierwszym wierszu i false jeśli obiekt ResultSet nie zawiera żadnych wierszy.
last

Przesuwa kursor do ostatniego wiersza w obiekcieResultSet. Zwraca true , jeśli kursor znajduje się teraz w ostatnim wierszu i false jeśli ResultSet obiekt nie zawiera żadnych wierszy.

absolute Umieszcza kursor na wierszu określonym przez parametr row(wiersz) .

 

Obiekt ResultSet ma również metody, które można użyć do identyfikacji konkretnej kolumny (pola) w wierszu.Można to zrobić albo za pomocą nazwy kolumny, lub przy użyciu jego numeru indeksu. W naszej tabeli Pracownicy utworzyliśmy cztery kolumny. Mają następujące nazwy ID, Imie, Nazwisko, i Stanowisko. Liczby indeksu są zatem 1, 2, 3, 4.

Skonfigurowaliśmy kolumnę ID do przechowywania wartości całkowitych. Metoda, którą można użyć, aby uzyskać wartość całkowitą w kolumnie jest getInt

int id_col = rs.getInt("ID");

Powyżej deklarujemy zmiennej całkowitą o nazwie id_col. Następnie używamy metody getInt naszego obiektu ResultSet, który jest nazywany rs. Między nawiasami okrągłymi mamy nazwę kolumny. Możemy użyć numeru indeksu zamiast nazwy:

int id_col = rs.getInt(1);

Zwróć uwagę, że numer indeksu nie jest otoczony cudzysłowem, ale nazwa jest umieszczona między cudzysłowem.

Dla pozostałych trzech kolumn w naszej tabeli bazy danych ustawiamy typ danych na String.W związku z tym, trzeba użyć metody getString:

String imie = rs.getString("Imie");

Albo możemy użyć numeru indeksu:

String imie = rs.getString(2);

Ponieważ ResultSet Cursor  wskazuje, tuż przed pierwszym rekordem, gdy dane są załadowane, musimy użyć metodę next, aby przejść do pierwszego wiersza.      Poniższy kod ustawi wskaźnik na pierwszym rekordzie z tabeli:

rs.next( );
int id_col = rs.getInt("ID");
String imie = rs.getString("Imie");
String nazwisko = rs.getString("Nazwisko");
String stanowisko = rs.getString("Stanowisko");

Możesz dodać linię wydruku do kodu, aby wyświetlić zapis w oknie Output:

System.out.println( id_col + " " + imie + " " + nazwisko + " " + stanowisko );

Oto jak teraz powinnien wyglądać kod:

 

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package baza_danych;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

/**
 *
 * @author uazz
 */
public class Baza_danych {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        
        try{
            String host = "jdbc:derby://localhost:1527/Pracownicy";
            String uzytkownik = "pracownik";
            String haslo = "pracownik";
            Connection con = DriverManager.getConnection(host,uzytkownik,haslo);
            
            Statement stmt = con.createStatement();
            String SQL = "SELECT * FROM Pracownik";
            ResultSet rs = stmt.executeQuery(SQL);
            
            rs.next();
            int id_col = rs.getInt("ID");
            String imie = rs.getString("Imie");
            String nazwisko = rs.getString("Nazwisko");
            String stanowisko = rs.getString("Stanowisko");
            
            String p = id_col + " " + imie + " " + nazwisko + " " + stanowisko;
            System.out.println(p);
                    
        } catch(SQLException err){
            System.out.println(err.getMessage());
        }
    }
}

Jeśli chcesz, aby przejść przez wszystkie rekordy w tabeli, można użyć pętli. Ponieważ metoda next zwraca true lub false, można jej używać jako warunek w pętli while:

while ( rs.next( ) ) {

}

W nawiasach okrągłych warunku while mamy instrukcję rs.next . Będzie ona prawdziwa, dopóki kursor nie osiągnie ostatniego rekordu w tabeli. Jeśli tak, rs.next zwróci wartość false, a pętla while zakończy działanie.Korzystanie z rs.next będzie również przesuwać kursor o jeden rekord do przodu. Tutaj jest ten sam kod, jak wyżej, lecz z użyciem pętli while. Zmień kod, aby go dopasować:

 

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package baza_danych;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

/**
 *
 * @author uazz
 */
public class Baza_danych {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        
        try{
            String host = "jdbc:derby://localhost:1527/Pracownicy";
            String uzytkownik = "pracownik";
            String haslo = "pracownik";
            Connection con = DriverManager.getConnection(host,uzytkownik,haslo);
            
            Statement stmt = con.createStatement();
            String SQL = "SELECT * FROM Pracownik";
            ResultSet rs = stmt.executeQuery(SQL);
            
            while (rs.next()){
                int id_col = rs.getInt("ID");
                String imie = rs.getString("Imie");
                String nazwisko = rs.getString("Nazwisko");
                String stanowisko = rs.getString("Stanowisko");

                String p = id_col + " " + imie + " " + nazwisko + " " + stanowisko;
                System.out.println(p);
            }
                    
        } catch(SQLException err){
            System.out.println(err.getMessage());
        }
    }
    
}

Po uruchomieniu powyższego kodu, dane wyjściowe w oknie Output powinny być wyświetlane następujące:

 

run:
1 Helena Wojak IT Manager
2 Eryk Wólczyński Programista
3 Tomasz Leszczyński Analityk
4 Paweł Drozdowski Programista
BUILD SUCCESSFUL (total time: 0 seconds)

Teraz, gdy wiesz, jak połączyć się z bazą danych zawierającą tabelę i wyświetlić rekordy możemy napisać program bardziej złożony z interfejsem graficznym za pomocą formularza i przycisków do przewijania rekordów.

 

Zobacz nasze wszystkie kursy

WWW


HTML
HTML - Znaczniki
CSS - Tutorial
CSS - Selektory
PHP
JavaScript

XML

XSLT

Bazy danych


SQL
SQLite
MySQL
PostgreSQL

 

 

Programowanie


C
C++
C#
Java
VisualBasic
Python

Linux


Podstawy Linuxa
Bash
Linuks artykuły

Windows


Excel funkcje
Windows wskazówki
Outlook

Pozotałe działy


Programy
Rozrywka

 

 

 

This email address is being protected from spambots. You need JavaScript enabled to view it.