WebElektronika

MSSQL adatbázis elérése Java nyelv segítségével II. (adatelérési réteg)

person access_time 2016.11.29.
Korábban megvalósítottuk a swing-es felületünket, ebben a postban folytatjuk a Java-s alkalmazásunk megvalósítását. Elkészítjük most azt a "réteget" amelynek segítségével a Microsoft SQL adatbázisunkat elérjük. Ennek a rétegnek a (tehát az osztály) neve az "eleres", ebben találjuk a metódusokat, amelyek használatával az adattáblánkon különböző műveleteket tudunk végrehajtani.


Az adatbázisunk lehet a felhőben (egy távoli szerveren), illetve a számítógépünkön, azaz a localhoston. Ha egy távoli adatbázist szeretnénk elérni (például az 123.123.123.123-as IP címen), akkor a következő connection string-et kell alkalmazni :

String connectionUrl = "jdbc:sqlserver://123.123.123.123:1433;databaseName=webelektronika;";

 

Ha azon a számítógépen van az MSSQL adatbázisunk, ahol a Java alkalmazásunk fut (tehát localhost), akkor a következő string-et kell a projektünkben alkalmazni :

String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=webelektronika;integratedSecurity=true;";

 

Adjunk a projektünkhöz egy újabb osztályt, a neve legyen "eleres". Ez az osztályunk fog felelni az adatbázisunk használatáért.
Az "eleres" nevű osztályban találjuk a különböző metódusokat. Először egy adattáblát hozunk létre a "webelektronika" adatbázisban a "createTable()" metódus használatával. Az adattábla neve tetszőleges lehet, ezt a "jtfTablanev" nevű JTextField vezérlőben adhatjuk meg.

A "createTable()" metódusnak van egy paramétere, amikor ezt az eljárást meghívjuk, akkor ez a paraméter tartalmazza a létrehozandó táblának a nevét.
Először a "webelektronika" nevű adatbázis elérését adjuk meg a "connectionUrl" változóban, azután a "try" blokkban "tabla" nevű stringben megadjuk azt az SQL parancsot, amelyet futtatni szeretnénk. Ezután az adatbázist elérő kapcsolatot lezárjuk.

Ha futási hiba történik, akkor a két "catch" blokk egyikében található kód fut le. Ha az SQL szerverünk elérésénél történt a kivételdobás, akkor az "uzenet" osztályból készítünk egy példányt, amelyet a "show()" metódussal jelenítünk meg. Egyéb kivételdobásnál a konzolban íratjuk ki a hibát.

A többi metódusnak is hasonló a felépítése, például a "setRekord()" felépítése szinte megegyezik a "createTable()"-lel, a fő különbség a futtatandó SQL parancs.

 

package javamssql2;

import com.microsoft.sqlserver.jdbc.SQLServerException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class eleres {
    
    public static void createTable(String _adattablaNev){
 
        String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=webelektronika;integratedSecurity=true;";
        Connection con = null;
        
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(connectionUrl);
                
            Statement st = (Statement) con.createStatement();
            String tabla = "CREATE TABLE "+_adattablaNev+ "(ID integer, NEV varchar(20), VAROS varchar(20))";
            st.executeUpdate(tabla);

            con.close();        
        }
        catch(SQLServerException se){
            uzenet jelzes = new uzenet("Adattábla létrehozása", se.getMessage());
            jelzes.show();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void setRekord(Integer _sorszam, String _nev, String _varos, String _tabla){
        String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=webelektronika;integratedSecurity=true;";
        Connection con = null;
                
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(connectionUrl);
                
            Statement st = (Statement) con.createStatement();
            String tabla = "INSERT "+_tabla+ " VALUES("+_sorszam+",'"+_nev+"','"+_varos+"')";
            st.executeUpdate(tabla);

            con.close();  
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
    
    public static void getListaId(Integer _sorszam, String _tabla){
        String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=webelektronika;integratedSecurity=true;";
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(connectionUrl);
                
            Statement st = (Statement) con.createStatement();
            String tabla = "SELECT * FROM "+_tabla+" WHERE ID="+_sorszam+";";
            stmt = con.createStatement();
            rs = stmt.executeQuery(tabla);
            while (rs.next()) {
                System.out.println(rs.getString("NEV") + " : " + rs.getString("VAROS"));}

            rs.close();
            stmt.close();
            con.close();  
        }
        catch(NumberFormatException ne){
            uzenet jelzes = new uzenet("Adatlekérés", "Hibás az Id száma");
            jelzes.show();
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
    
    public static ArrayList getListaTomb(String _tabla){
        String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=webelektronika;integratedSecurity=true;";
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        ArrayList tomb=null;
        
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(connectionUrl);
                
            Statement st = (Statement) con.createStatement();
            String tabla = "SELECT * FROM "+_tabla+";";
            stmt = con.createStatement();
            rs = stmt.executeQuery(tabla);
            
            tomb = new ArrayList();
            
            while (rs.next()) {
                tomb.add(rs.getInt("ID") + " : " + rs.getString("NEV") + " : " + rs.getString("VAROS"));
            }

            rs.close();
            stmt.close();
            con.close();
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
        finally{
            return tomb;
        }
    }
        
    public static void updateRekord(Integer _sorszam, String _nev, String _varos, String _tabla){
        String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=webelektronika;integratedSecurity=true;";
        Connection con = null;
        Statement stmt = null;
        ResultSet rs = null;
        
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(connectionUrl);
                
            Statement st = (Statement) con.createStatement();
            String tabla = "UPDATE "+_tabla+" SET VAROS='"+_varos+"', NEV='"+_nev+"' WHERE ID="+_sorszam+";";
            stmt = con.createStatement();
            stmt.executeUpdate(tabla);
            stmt.close();
            con.close();  
        }
        
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
    
    public static void deleteRekord(Integer _sorszam, String _tabla){
        String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
            "databaseName=webelektronika;integratedSecurity=true;";
        Connection con = null;
        Statement stmt = null;
        
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(connectionUrl);
                
            Statement st = (Statement) con.createStatement();
            String tabla = "DELETE FROM "+_tabla+" WHERE ID="+_sorszam+";";
            stmt = con.createStatement();
            stmt.execute(tabla);
            stmt.close();
            con.close();  
        }
        catch(SQLServerException se){
            uzenet jelzes = new uzenet("Rekord törlés", "Nem sikerült a törlés.");
            jelzes.show();
        }
        catch(NumberFormatException ne){
            uzenet jelzes = new uzenet("Rekord törlés", "Rossz a sorszám.");
            jelzes.show();
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

 

A "connectionUrl" megadását nem szükséges minden metódusban megadnunk, ezt megtehettük volna egyszer a metódusokon kívül.


Ha érdeklődik a cikk teljes tartalma után, kérjük, lépjen be a WebElektronika oldalára.

     Köszönjük.