Készítsünk egy adatbázist az alábbi SQL scriptekkel:
create database surubt character set utf8 collate utf8_hungarian_ci; grant all privileges on surubt.* to surubt@localhost identified by 'titok'; use surubt; create table employees ( id int not null primary key auto_increment, name varchar(50), city varchar(50), salary double, birth date );
Egy employees táblát hozunk létre, amiben az id mező értéke automatikusan generálódik.
Kell egy osztály amiben tárolhatjuk egy dolgozó összes tulajdonságát. A következő mintában két konstruktort is létrehozunk, az egyikkel azonosítóval, a másikkal azonosító nélkül létrehozható egy dolgozó objektum.
import java.time.LocalDate; public class Employee { Integer id; String name; String city; double salary; LocalDate birth; public Employee( Integer id, String name, String city, double salary, LocalDate birth) { this.id = id; this.name = name; this.city = city; this.salary = salary; this.birth = birth; } public Employee( String name, String city, double salary, LocalDate birth) { this.name = name; this.city = city; this.salary = salary; this.birth = birth; } }
A dátumokat Java nyelven a LocalDate objektumban érdemes tárolni.
Adatok beszúrására a Statement és a PreparedStatement áll rendelkezésre. A PreparedStatement osztály használata ajánlott.
import java.sql.SQLException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.DriverManager; import java.time.LocalDate; class App { public static void insertEmployee(Employee employee) { Connection conn = null; try { String url = "jdbc:mariadb://localhost:3306/surubt"; conn = DriverManager.getConnection(url, "surubt", "titok"); String sql = "insert into employees" + " (name, city, salary, birth) values" + " (?, ?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, employee.name); pstmt.setString(2, employee.city); pstmt.setDouble(3, employee.salary); pstmt.setDate(4, java.sql.Date.valueOf(employee.birth)); pstmt.execute(); }catch(SQLException ex) { System.err.println("Hiba! Az SQL művelet sikertelen!"); System.err.println(ex.getMessage()); } } public static void main(String[] args) { Employee emp = new Employee( 1, "Csendes Emese", "Szolnok", 345, LocalDate.parse("2002-05-15") ); insertEmployee(emp); } }
A prepareStatement() metódus számára adjunk át egy második paramétert, a Statement osztály egy állandóját.
PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ pstmt.setString(1, employee.name); pstmt.setString(2, employee.city); pstmt.setDouble(3, employee.salary); pstmt.setDate(4, java.sql.Date.valueOf(employee.birth)); pstmt.executeUpdate(); //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv ResultSet res = pstmt.getGeneratedKeys(); if (res.next()) { System.out.println(res.getInt(1)); }
A pstmt objektumból így lekérdezhető a generált azonosító.
import java.sql.SQLException; import java.sql.Statement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.DriverManager; import java.util.ArrayList; class App { public static ArrayList<Employee> getEmployees() { ArrayList<Employee> employeeList = new ArrayList<>(); Connection conn = null; try { String url = "jdbc:mariadb://localhost:3306/surubt"; conn = DriverManager.getConnection(url, "surubt", "titok"); String sql = "select * from employees"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while(rs.next()) { Employee emp = new Employee( rs.getInt("id"), rs.getString("name"), rs.getString("city"), rs.getDouble("salary"), rs.getDate("birth").toLocalDate() ); employeeList.add(emp); } }catch(SQLException ex) { System.err.println("Hiba! Az SQL művelet sikertelen!"); System.err.println(ex.getMessage()); } return employeeList; } public static void main(String[] args) { ArrayList<Employee> employeeList; employeeList = getEmployees(); employeeList.forEach(emp -> { System.out.println(emp.name); }); } }
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class App { public static void deleteEmployee(int id) { Connection conn = null; try { String url = "jdbc:mariadb://localhost:3306/surubt"; conn = DriverManager.getConnection(url, "surubt", "titok"); String sql = "delete from employees where id=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, id); pstmt.execute(); }catch(SQLException ex) { System.err.println("Hiba! Az SQL művelet sikertelen!"); System.err.println(ex.getMessage()); } } public static void main(String[] args) throws Exception { System.out.println("Törlés"); deleteEmployee(7); } }
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.time.LocalDate; public class App { public static void updateEmployee(Employee emp) { Connection conn = null; try { String url = "jdbc:mariadb://localhost:3306/surubt"; conn = DriverManager.getConnection(url, "surubt", "titok"); String sql = "update employees set " + "name=?, city=?, salary=?, birth=? "+ "where id=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, emp.name); pstmt.setString(2, emp.city); pstmt.setDouble(3, emp.salary); pstmt.setDate(4, java.sql.Date.valueOf(emp.birth)); pstmt.setInt(5, emp.id); pstmt.execute(); System.out.println("A frissítés sikeres."); }catch(SQLException ex) { System.err.println("Hiba! Az SQL művelet sikertelen!"); System.err.println(ex.getMessage()); } } public static void main(String[] args) throws Exception { System.out.println("Frissítés..."); Employee emp = new Employee( 6, "Becses Géza", "Miskolc", 391, LocalDate.parse("2000-03-22") ); updateEmployee(emp); } }
javac App.java
Futtatáshoz szükség van a mariadb kliens program útvonalának megadására. Ha helyben van minden:
Futtatás Linuxon:
java -cp .:mariadb-java-client-2.7.1.jar App
Futtatás Windowson:
java -cp .;mariadb-java-client-2.7.1.jar App
Ha szeretnénk ellenőrizni a meghajtó osztály meglétét:
Class.forName("org.mariadb.jdbc.Driver");