[[oktatas:programozás:java:java adatbázis:sqlite|< SQLite]] ====== SQLite ====== * **Szerző:** Sallai András * Copyright (c) 2013, Sallai András * Szerkesztve: 2013-2024 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Az SQLite ===== Az SQLite egy nyílt forráskódú, beágyazott SQL adatbázis-kezelő rendszer. A beágyazott azt jelenti, hogy nincs szükség külön kiszolgálóra, az alkalmazás közvetlenül éri el az adatbázist, ami a fájlrendszerben tárolódik. Az SQLite az adatokat egy .db vagy egy .sqlite kiterjesztésű fájlban tárolja. Használati esetek: * mobilalkalmazás * asztali alkalmazás * webes alkalmazás * tesztelés és prototípus fejlesztés * beágyazott rendszereken (pl. IoT eszközök) ===== Adatbázis kezelése ===== ==== Az sqlite3 parancs ==== Telepítés Windowson és Linuxon: choco install sqlite.shell apt install sqlite3 Ellenőrzés: sqlite3 --version Leírás itt: * [[oktatas:adatbazis-kezeles:sqlite:shell]] ==== VSCode bővítmény ==== Telepítsük a következő bővítményt: * SQLite3 Editor Az SQLite3 Editor-t közzétette: yy0931. ==== Táblák létrehozása ===== create table employees ( id integer not null primary key autoincrement, name text, city text, salary real ); ===== Illesztőprogram ===== Látogassuk meg a következő weboldalt: * https://github.com/xerial/sqlite-jdbc/releases (2024) * https://central.sonatype.com/artifact/org.xerial/sqlite-jdbc (2024) Maven függőség beállítása: org.xerial sqlite-jdbc 3.46.1.3 ===== Kapcsolódás ===== import java.sql.Connection; import java.sql.DriverManager; public class App { public static void main(String[] args) throws Exception { String url = "jdbc:sqlite:database.sqlite"; Connection conn = DriverManager.getConnection(url); System.out.println("OK"); conn.close(); } } Ha a projekt futtatásakor az illesztőprogram rendelkezésre kell álljon. A database.sqlite fájl ha nem létezik, automatikusan létrejön, 0 mérettel. ===== Az SQLException ===== import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; class App { public static void main(String[] args) { try { String url = "jdbc:sqlite:database.sqlite"; Connection conn = DriverManager.getConnection(url); System.out.println("OK"); conn.close(); }catch(SQLException e) { System.err.println("Hiba! Az elérés sikertelen!"); System.err.println(e.getMessage()); } } } ===== Kapcsolódáshoz osztály ===== import java.sql.Connection; public interface Database { public Connection connect(); } import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Sqlite implements Database { @Override public Connection connect() { try { return tryConnect(); }catch(SQLException e) { System.err.println("Hiba! Az elérés sikertelen!"); System.err.println(e.getMessage()); return null; } } public Connection tryConnect() { String url = "jdbc:sqlite:database.sqlite"; Connection conn = DriverManager.getConnection(url); return conn; } } ===== CRUD műveletek ===== ==== Adatbázistábla ==== create table employees( id integer not null primary key autoincrement, name text, city text, salary real ); ==== Modell ==== public class Emplyoee { Integer id; String name; String city; Double salary; } ==== Read ==== import java.util.ArrayList; import java.sql.Connection; import java.Statement; import java.ResultSet; public class DataSource { Database database; public DataSource(Database database) { this.database = database; } public ArrayList getEmployees() { try { tryGetEmployee(); }catch(SQLException e) { System.err.println("Hiba! Az elérés sikertelen!"); System.err.println(e.getMessage()); return null; } } public ArrayList tryGetEmployee() { ArrayList empList = new ArrayList<>(); Connection conn = database.connect(); String sql = "select * from emplyoees"; Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql); while(rs.next()) { Employee emp = new Employee(); emp.id = rs.getInt("id"); emp.name = rs.getString("name"); emp.city = rs.getString("city"); emp.salary = rs.getDouble("salary"); empList.add(emp); } return empList; } } ===== PreparedStatement használata ===== ==== Create művelet ==== import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; public class EmployeeSource { Database datbase; public EmployeeSource(Database database) { this.datbase = database; } public ArrayList getEmployees() { try { return tryGetEmployees(); } catch (SQLException e) { System.err.println("Hiba! A lekérdezés sikertelen!"); System.err.println(e.getMessage()); return null; } } public ArrayList tryGetEmployees() throws SQLException { Connection conn = datbase.connect(); String sql = "select * from employees"; ArrayList employees = new ArrayList(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { Employee employee = new Employee(); employee.id = rs.getInt("id"); employee.name = rs.getString("name"); employee.city = rs.getString("city"); employee.salary = rs.getDouble("salary"); employees.add(employee); } return employees; } public Employee addEmployee(Employee employee) { try { return tryAddEmployee(employee); } catch (SQLException e) { System.err.println("Hiba! A hozzáadás sikertelen!"); System.err.println(e.getMessage()); return null; } } public Employee tryAddEmployee(Employee employee) throws SQLException { Connection conn = datbase.connect(); String sql = """ insert into employees (name, city, salary) values (?, ?, ?) """; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, employee.name); pstmt.setString(2, employee.city); pstmt.setDouble(3, employee.salary); pstmt.executeUpdate(); return employee; } } ==== Frissítés ==== Adjuk az EmployeeSource osztályhoz: public Employee updateEmployee(Employee employee) { try { return tryUpdateEmployee(employee); } catch (SQLException e) { System.err.println("Hiba! A frissítés sikertelen!"); System.err.println(e.getMessage()); return null; } } public Employee tryUpdateEmployee(Employee employee) throws SQLException { Connection conn = datbase.connect(); String sql = """ update employees set name = ?, city = ?, salary = ? where id = ? """; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, employee.name); pstmt.setString(2, employee.city); pstmt.setDouble(3, employee.salary); pstmt.setInt(4, employee.id); pstmt.executeUpdate(); return employee; } ==== Törlés ==== Adjuk az EmployeeSource osztályhoz: public void deleteEmployee(int id) { try { tryDeleteEmployee(id); } catch (SQLException e) { System.err.println("Hiba! A törleés sikertelen!"); System.err.println(e.getMessage()); } } public void tryDeleteEmployee(int id) throws SQLException { Connection conn = datbase.connect(); String sql = "delete from employees where id = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, id); pstmt.executeUpdate(); } ===== Linkek ===== Irodalom: * https://www.sqlitetutorial.net/sqlite-java/ (2024) * https://sqlite.org/ (2024) Szoftverek: * https://sqlitestudio.pl/ (2024) * https://sqlitebrowser.org/ (2024)