2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
5 package cz.frantovo.superPostak;
7 import java.security.MessageDigest;
8 import java.security.NoSuchAlgorithmException;
9 import java.sql.Connection;
10 import java.sql.DriverManager;
11 import java.sql.SQLException;
12 import java.util.Arrays;
13 import java.util.logging.Level;
14 import java.util.logging.Logger;
17 * Vrstva pro připojení k databázi
22 private static Logger log = Logger.getLogger(Data.class.getName());
23 private static Connection spojeni;
24 private static byte[] hash;
25 private static MessageDigest sha;
27 public static synchronized DataSQL getSpojeniSQL(String url, String jmeno, char[] heslo) throws SQLException {
28 return new DataSQL(getSpojeni(url, jmeno, heslo));
31 private static synchronized Connection getSpojeni(String url, String jmeno, char[] heslo) throws SQLException {
32 if (Arrays.equals(hash, hashuj(url, jmeno, heslo)) && spojeni != null && !spojeni.isClosed()) {
33 log.log(Level.INFO, "Znovupoužívám DB spojení.");
35 spojeni = getNoveSpojeni(url, jmeno, heslo);
41 private static Connection getNoveSpojeni(
42 String url, String jmeno, char[] heslo) throws SQLException {
43 /** Pokusíme se uzavřít staré spojení */
44 if (spojeni != null && !spojeni.isClosed()) {
47 } catch (Exception e) {
48 log.log(Level.INFO, "Nepodařilo se uzavřít spojení", e);
52 /** Vrátíme nové spojení */
53 hash = hashuj(url, jmeno, heslo);
54 spojeni = DriverManager.getConnection(url, jmeno, String.valueOf(heslo));
55 log.log(Level.INFO, "Otevřeno nové spoejní spojení k databázi: " + url);
59 private static byte[] hashuj(String url, String jmeno, char[] heslo) {
62 sha = MessageDigest.getInstance("SHA-256");
64 String text = url + "/" + jmeno + "/" + String.valueOf(heslo);
65 return sha.digest(text.getBytes());
67 } catch (NoSuchAlgorithmException e) {
68 /** Tohle by nemělo nikdy nastat. V nouzovém případě použijeme součet hodnot místo hashe. */
69 log.log(Level.SEVERE, "Neexistující hashovací algoritmus", e);
70 String soucet = url + "/" + jmeno + String.valueOf(heslo).length();
71 return soucet.getBytes();