package db; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.sql.*; import java.util.LinkedList; import java.util.List; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import ksiazka.kucharska.CB_Model; public class Cookbook { public static final String DRIVER = "org.sqlite.JDBC"; public static final String DB_URL = "jdbc:sqlite:cookbook.db"; private Connection conn; private Statement stat; public Cookbook() { try { Class.forName(Cookbook.DRIVER); } catch (ClassNotFoundException e) { System.err.println("Brak sterownika JDBC"); e.printStackTrace(); } try { conn = DriverManager.getConnection(DB_URL); stat = conn.createStatement(); } catch (SQLException e) { System.err.println("Problem z otwarciem polaczenia"); e.printStackTrace(); } createTables(); } public boolean createTables() { String createRecipes = "CREATE TABLE IF NOT EXISTS recipes (id INTEGER PRIMARY KEY AUTOINCREMENT, name varchar, ingredients varchar, description varchar, tags varchar, img blob)"; try { stat.execute(createRecipes); } catch (SQLException e) { System.err.println("Blad przy tworzeniu tabeli"); e.printStackTrace(); return false; } return true; } public boolean insertRecipe(String name, String ingredients, String description, String tags, byte[] imgArr) { try { PreparedStatement prepStmt = conn.prepareStatement( "INSERT INTO recipes VALUES (NULL, ?, ?, ?, ?, ?);"); prepStmt.setString(1, name); prepStmt.setString(2, ingredients); prepStmt.setString(3, description); prepStmt.setString(4, tags); prepStmt.setBytes(5, imgArr); prepStmt.execute(); } catch (SQLException e) { System.err.println("Blad przy wstawianiu przepisu"); e.printStackTrace(); return false; } return true; } public boolean insertRecipe(CB_Model ob) { try { PreparedStatement prepStmt = conn.prepareStatement( "INSERT INTO recipes VALUES (NULL, ?, ?, ?, ?, ?);"); prepStmt.setString(1, ob.getName()); prepStmt.setString(2, ob.getIngredients()); prepStmt.setString(3, ob.getDescription()); prepStmt.setString(4, ob.getTags()); prepStmt.setBytes(5, ob.getImageArr()); prepStmt.execute(); } catch (SQLException e) { System.err.println("Blad przy wstawianiu przepisu"); e.printStackTrace(); return false; } return true; } public CB_Model selectRecipe(String name) { CB_Model selectedRecipe; try { PreparedStatement query = conn.prepareStatement("SELECT * FROM recipes WHERE name=?"); query.setString(1, name); ResultSet result = query.executeQuery(); int id; String ingredients, description, tags; ImageIcon pict; id = result.getInt("id"); ingredients = result.getString("ingredients"); description = result.getString("description"); tags = result.getString("tags"); pict = new ImageIcon(result.getBytes("img")); selectedRecipe = new CB_Model(id, name, ingredients, description, tags, pict); } catch (SQLException e) { e.printStackTrace(); return null; } return selectedRecipe; } public boolean deleteRecipe(String name){ try { PreparedStatement query = conn.prepareStatement("DELETE FROM recipes WHERE name=?"); query.setString(1, name); query.execute(); } catch (SQLException e) { e.printStackTrace(); return false; } return true; } public List obtainNames(){ List names = new LinkedList(); try { ResultSet result = stat.executeQuery("SELECT name FROM recipes"); String name; while(result.next()){ name = result.getString("name"); names.add(name); } } catch (SQLException e) { e.printStackTrace(); return null; } return names; } public List obtainSearchedNames(String n, String t){ List names = new LinkedList(); try { String whereClause = ""; if (n != "") whereClause += "name LIKE ?"; if (t != "") { if (n != "") whereClause += " OR "; whereClause += "tags LIKE ?"; } PreparedStatement query = conn.prepareStatement("SELECT name FROM recipes WHERE " + whereClause); if (n != "") query.setString(1, "%"+n+"%"); if (t != "") query.setString(((n!="")? 2 : 1), "%"+t+"%"); ResultSet result = query.executeQuery(); String name; while(result.next()){ name = result.getString("name"); names.add(name); } } catch (SQLException e) { e.printStackTrace(); return null; } return names; } public void closeConnection() { try { conn.close(); } catch (SQLException e) { System.err.println("Problem z zamknieciem polaczenia"); e.printStackTrace(); } } }