[[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)