root/java/SuperPostak/src/cz/frantovo/superPostak/Data.java @ 1:699b6c66228b

Revision 0:e76872ad5226, 2.6 KB (checked in by František Kučera <franta-hg@…>, 16 years ago)

Přidání SuperPošťáka? do Mercurialu (původně byl v Subversionu)
Postak – základ, knihovna
SuperPostak? – GUI nadstavba
SuperPostak?2 – pokus o implementaci aplikace jako modulu pro Netbeans, POZOR: není přidán do Mercurialu, možná později (pravděpodobně se ale nebude používat)

Line 
1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5package cz.frantovo.superPostak;
6
7import java.security.MessageDigest;
8import java.security.NoSuchAlgorithmException;
9import java.sql.Connection;
10import java.sql.DriverManager;
11import java.sql.SQLException;
12import java.util.Arrays;
13import java.util.logging.Level;
14import java.util.logging.Logger;
15
16/**
17 * Vrstva pro připojení k databázi
18 * @author fiki
19 */
20public class Data {
21
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;
26
27    public static synchronized DataSQL getSpojeniSQL(String url, String jmeno, char[] heslo) throws SQLException {
28        return new DataSQL(getSpojeni(url, jmeno, heslo));
29    }
30
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í.");
34        } else {
35            spojeni = getNoveSpojeni(url, jmeno, heslo);
36        }
37
38        return spojeni;
39    }
40
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()) {
45            try {
46                spojeni.close();
47            } catch (Exception e) {
48                log.log(Level.INFO, "Nepodařilo se uzavřít spojení", e);
49            }
50        }
51
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);
56        return spojeni;
57    }
58
59    private static byte[] hashuj(String url, String jmeno, char[] heslo) {
60        try {
61            if (sha == null) {
62                sha = MessageDigest.getInstance("SHA-256");
63            }
64            String text = url + "/" + jmeno + "/" + String.valueOf(heslo);
65            return sha.digest(text.getBytes());
66
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();
72        }
73    }
74}
75
76
Note: See TracBrowser for help on using the browser.