Mercurial Hosting > luan
annotate src/luan/modules/sql/Database.java @ 1337:8b61c8c4e07a
remove slf4j
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 15 Feb 2019 07:14:50 -0700 |
parents | 25746915a241 |
children | a015a0b5c388 |
rev | line source |
---|---|
1267 | 1 package luan.modules.sql; |
2 | |
3 import java.sql.Connection; | |
4 import java.sql.DriverManager; | |
5 import java.sql.Statement; | |
6 import java.sql.PreparedStatement; | |
7 import java.sql.ResultSet; | |
8 import java.sql.SQLException; | |
9 import java.util.Map; | |
10 import java.util.HashMap; | |
11 import java.util.Properties; | |
1337 | 12 import luan.lib.logging.Logger; |
13 import luan.lib.logging.LoggerFactory; | |
1267 | 14 import luan.LuanTable; |
15 import luan.LuanException; | |
16 | |
17 | |
1268
725e52076f03
remove broken pooling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1267
diff
changeset
|
18 public final class Database { |
1267 | 19 private static final Logger logger = LoggerFactory.getLogger(Database.class); |
20 | |
21 public final Connection con; | |
22 private final Map<String,PreparedStatement> pstmts = new HashMap<String,PreparedStatement>(); | |
23 | |
24 public Database(Connection con) { | |
25 this.con = con; | |
26 } | |
27 | |
1268
725e52076f03
remove broken pooling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1267
diff
changeset
|
28 public Database(LuanTable specTbl) |
1267 | 29 throws LuanException, ClassNotFoundException, SQLException |
30 { | |
1268
725e52076f03
remove broken pooling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1267
diff
changeset
|
31 Map<Object,Object> spec = specTbl.asMap(); |
1267 | 32 String cls = getString(spec,"class"); |
33 Class.forName(cls); | |
34 String url = getString(spec,"url"); | |
35 Properties props = new Properties(); | |
36 props.putAll(spec); | |
37 this.con = DriverManager.getConnection(url,props); | |
38 } | |
39 | |
40 private static String getString(Map spec,String key) throws LuanException { | |
41 Object val = spec.remove(key); | |
42 if( val==null ) | |
43 throw new LuanException( "parameter '"+key+"' is required" ); | |
44 if( !(val instanceof String) ) | |
45 throw new LuanException( "parameter '"+key+"' must be a string" ); | |
46 return (String)val; | |
47 } | |
48 | |
49 private PreparedStatement prepareStatement(String sql,Object[] args) throws SQLException { | |
50 PreparedStatement pstmt = pstmts.get(sql); | |
51 if( pstmt==null ) { | |
52 pstmt = con.prepareStatement(sql); | |
53 pstmts.put(sql,pstmt); | |
54 } | |
55 for( int i=0; i<args.length; i++ ) { | |
56 pstmt.setObject(i+1,args[i]); | |
57 } | |
58 return pstmt; | |
59 } | |
60 | |
61 public ResultSet query(String sql,Object... args) throws SQLException { | |
62 if( args.length == 0 ) { | |
63 Statement stmt = con.createStatement(); | |
64 return stmt.executeQuery(sql); | |
65 } else { | |
66 PreparedStatement pstmt = prepareStatement(sql,args); | |
67 return pstmt.executeQuery(); | |
68 } | |
69 } | |
70 | |
71 public int update(String sql,Object... args) throws SQLException { | |
72 if( args.length == 0 ) { | |
73 Statement stmt = con.createStatement(); | |
74 int n = stmt.executeUpdate(sql); | |
75 stmt.close(); | |
76 return n; | |
77 } else { | |
78 PreparedStatement pstmt = prepareStatement(sql,args); | |
79 return pstmt.executeUpdate(); | |
80 } | |
81 } | |
82 | |
83 } |