Gyakorlati alapok III.

SQL (adatbázis)

 

1 táblás lekérdezések ellenőrzése JDBC-n keresztül


Az eddig bemutatásra került JDBC-kódok korrekten le fognak futni, ha minden más jó, azonban mindenképpen szükséges további JDBC-kódillesztéseket is bemutatnunk. Ehhez 1 kissé egyszerűsítjűk alapként felhasznált JDBC-kódunkat:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


import java.sql.*;

public class Main {

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DataBase_URL = "jdbc:mysql://localhost/auto";
static final String USER = "root";
static final String PASSWORD = "";

public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
try{
    Class.forName(JDBC_DRIVER);
    System.out.println("Kapcsolodas az adatbazishoz...");
    connection = DriverManager.getConnection(DataBase_URL,USER,PASSWORD);

    String sqlString = "SELECT COUNT(`auto_csop_nev`) AS AutoCsoportokSzama FROM auto_csop";

    System.out.println("Statement letesitese..." + "\n");
    PreparedStatement preparedStatement =
connection.prepareStatement(sqlString);
    ResultSet resultSet = preparedStatement.executeQuery(sqlString);

    System.out.println("Result:");

    while(resultSet.next()){
        System.out.print(resultSet.getInt("AutoCsoportokSzama"));
    }

    System.out.println();

    resultSet.close();
    connection.close();

    }catch(SQLException se){
    se.printStackTrace();


    }catch(Exception e){
    e.printStackTrace();
 

    }finally{
    try{
        if(statement != null)
            statement.close();
        }catch(SQLException se2){
    }
    try{
        if(connection != null)
            connection.close();
        }catch(SQLException se){
        se.printStackTrace();
        }
    }
    System.out.println("\nViszlat!");
    }
}
 

Végeredmény:
Kapcsolodas az adatbazishoz...
Statement letesitese...

Result:
4

Viszlat!

Először is az SQL-utasítást elkülönítettük olyan módon, hogy külön String típusú objektumba tettük:

String sqlString = "SELECT COUNT(`auto_csop_nev`) AS AutoCsoportokSzama FROM auto_csop";

A preparedStatement rutin ezt küldi el szerveroldalra...

reparedStatement preparedStatement = connection.prepareStatement(sqlString);

...majd az executeQuery() metódusával az eredményhalmazba (Resultset) kérdezi le az eredményeket:

ResultSet resultSet = preparedStatement.executeQuery(sqlString);

System.out.println("Result:");

while(resultSet.next()){
    System.out.print(resultSet.getInt("AutoCsoportokSzama"));
}

Itt szükséges észrevennünk azon, eddig még nem ismertetett problémát, miszerint pontosan ezen a helyen kell megoldanunk az adattípusok egymáshoz való illesztését. Az 1. illesztés a fenti, String típusú objektumnál volt a szerver felé, míg a 2. itt, visszaérkezve a JDBC-környezetbe. Ha erre nem figyelünk, azonnali SQL-jellegű kivétel fog keletkezni (általában column … not found a hibaüzenet).

 

Gondoljunk bele, hogy a fenti példában milyen elvárt eredményünk van?

 

A SELECT COUNT(`auto_csop_nev`) AS AutoCsoportokSzama FROM auto_csop" SQL-parancs azt jelenti: számoljuk meg az auto_csop táblában, hogy hány auto_csop_nev van (azaz ennek az oszlopnak hány sora – értsd: ennek az attribútumnak hány konkrét manifesztálása). Az elvárt eredményünk tehát voltaképpen 1 integer, ezt pedig AutoCsoportokSzama adja vissza. Ezt azonban nem lehet String típusként átvennünk, csakis integer formájában, ezért került felhasználásra a getInt() metódus ilyen módon:

resultSet.getInt("AutoCsoportokSzama");

Ebből következően, ha elvárt eredményünk String típusú, akkor ennek megfelelően kell a ResultSet „érkezési oldalát” beállítanunk. Nézzük meg a futtatható java-kódot:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


import java.sql.*;

public class Main {

static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DataBase_URL = "jdbc:mysql://localhost/auto";
static final String USER = "root";
static final String PASSWORD = "";

public static void main(String[] args) {
Connection connection = null;
Statement statement = null;

try{
    Class.forName(JDBC_DRIVER);
    System.out.println("Kapcsolodas az adatbazishoz...");
    connection = DriverManager.getConnection(DataBase_URL,USER,PASSWORD);

    String sqlString = "SELECT auto_csop_nev FROM auto_csop";

    System.out.println("Statement letesitese..." + "\n");
    PreparedStatement preparedStatement = connection.prepareStatement(sqlString);
    ResultSet resultSet = preparedStatement.executeQuery(sqlString);

    System.out.println("Result:");

    while(resultSet.next()){
        System.out.print(resultSet.getString("auto_csop_nev") + "\n");
    }
 

    System.out.println();

    resultSet.close();
    connection.close();

    }catch(SQLException se){
    se.printStackTrace();


    }catch(Exception e){
    e.printStackTrace();
 

    }finally{
    try{
        if(statement != null)
            statement.close();
        }catch(SQLException se2){
    }
    try{
        if(connection != null)
            connection.close();
        }catch(SQLException se){
        se.printStackTrace();
        }
    }
    System.out.println("\nViszlat!");
    }
}
 

Végeredmény:
Kapcsolodas az adatbazishoz...
Statement letesitese...

Result:
NORMAL
EXTRA
LUXUS
BEYOND

Viszlat!


A fenti kódban jól látható, hogy mivel a "SELECT auto_csop_nev FROM auto_csop" paranccsal konkrét, String adattípusú autócsoportneveket (auto_csop_nev) várunk vissza…

NORMAL
EXTRA
LUXUS
BEYOND


...a resultset érkezési oldalát a getString() metódus felhasználásával ehhez kell igazítanunk:

while(resultSet.next()){
    System.out.print(resultSet.getString("auto_csop_nev") + "\n");
}