root/java/SuperPostak/src/cz/frantovo/superPostak/Data.java @ 13:b15d81be8af3

Revision 13:b15d81be8af3, 2.5 KB (checked in by František Kučera <franta-hg@…>, 12 years ago)

drobnosti: lgoování, formátování, netbeans…

Line 
1package cz.frantovo.superPostak;
2
3import java.security.MessageDigest;
4import java.security.NoSuchAlgorithmException;
5import java.sql.Connection;
6import java.sql.DriverManager;
7import java.sql.SQLException;
8import java.util.Arrays;
9import java.util.logging.Level;
10import java.util.logging.Logger;
11
12/**
13 * Vrstva pro připojení k databázi
14 * @author fiki
15 */
16public class Data {
17
18    private static final Logger log = Logger.getLogger(Data.class.getName());
19    private static Connection spojeni;
20    private static byte[] hash;
21    private static MessageDigest sha;
22
23    public static synchronized DataSQL getSpojeniSQL(String url, String jmeno, char[] heslo) throws SQLException {
24        return new DataSQL(getSpojeni(url, jmeno, heslo));
25    }
26
27    private static synchronized Connection getSpojeni(String url, String jmeno, char[] heslo) throws SQLException {
28        if (Arrays.equals(hash, hashuj(url, jmeno, heslo)) && spojeni != null && !spojeni.isClosed()) {
29            log.log(Level.INFO, "Znovupoužívám DB spojení.");
30        } else {
31            spojeni = getNoveSpojeni(url, jmeno, heslo);
32        }
33
34        return spojeni;
35    }
36
37    private static Connection getNoveSpojeni(
38            String url, String jmeno, char[] heslo) throws SQLException {
39        /** Pokusíme se uzavřít staré spojení */
40        if (spojeni != null && !spojeni.isClosed()) {
41            try {
42                spojeni.close();
43            } catch (Exception e) {
44                log.log(Level.INFO, "Nepodařilo se uzavřít spojení", e);
45            }
46        }
47
48        /** Vrátíme nové spojení */
49        hash = hashuj(url, jmeno, heslo);
50        spojeni = DriverManager.getConnection(url, jmeno, String.valueOf(heslo));
51        log.log(Level.INFO, "Otevřeno nové spoejní spojení k databázi: {0}", url);
52        return spojeni;
53    }
54
55    private static byte[] hashuj(String url, String jmeno, char[] heslo) {
56        try {
57            if (sha == null) {
58                sha = MessageDigest.getInstance("SHA-256");
59            }
60            String text = url + "/" + jmeno + "/" + String.valueOf(heslo);
61            return sha.digest(text.getBytes());
62
63        } catch (NoSuchAlgorithmException e) {
64            /** Tohle by nemělo nikdy nastat. V nouzovém případě použijeme součet hodnot místo hashe. */
65            log.log(Level.SEVERE, "Neexistující hashovací algoritmus", e);
66            String soucet = url + "/" + jmeno + String.valueOf(heslo).length();
67            return soucet.getBytes();
68        }
69    }
70}
71
72
Note: See TracBrowser for help on using the browser.