Mercurial Hosting > luan
annotate src/luan/modules/sql/Database.java @ 1802:ca98dee04e08 default tip
add Parsers.json_null
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 21 Apr 2024 21:25:15 -0600 |
parents | 225808b90cee |
children |
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; | |
1402
27efb1fcbcb5
move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents:
1392
diff
changeset
|
12 import goodjava.logging.Logger; |
27efb1fcbcb5
move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents:
1392
diff
changeset
|
13 import goodjava.logging.LoggerFactory; |
1341
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
14 import luan.Luan; |
1267 | 15 import luan.LuanTable; |
16 import luan.LuanException; | |
1392 | 17 import luan.modules.Utils; |
1267 | 18 |
19 | |
1268
725e52076f03
remove broken pooling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1267
diff
changeset
|
20 public final class Database { |
1267 | 21 private static final Logger logger = LoggerFactory.getLogger(Database.class); |
22 | |
23 public final Connection con; | |
24 private final Map<String,PreparedStatement> pstmts = new HashMap<String,PreparedStatement>(); | |
1341
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
25 private int fetchSize = 0; |
1267 | 26 |
27 public Database(Connection con) { | |
28 this.con = con; | |
29 } | |
30 | |
1420 | 31 public Database(LuanTable spec) |
1267 | 32 throws LuanException, ClassNotFoundException, SQLException |
33 { | |
1420 | 34 spec = new LuanTable(spec); |
1392 | 35 String cls = Utils.removeRequiredString(spec,"class"); |
1267 | 36 Class.forName(cls); |
1392 | 37 String url = Utils.removeRequiredString(spec,"url"); |
1267 | 38 Properties props = new Properties(); |
1420 | 39 props.putAll(spec.asMap()); |
1267 | 40 this.con = DriverManager.getConnection(url,props); |
1392 | 41 spec.remove("user"); |
42 spec.remove("password"); | |
1420 | 43 set2(spec); |
1341
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
44 } |
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
45 |
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
46 public void set(LuanTable options) throws LuanException, SQLException { |
1420 | 47 set2(new LuanTable(options)); |
1341
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
48 } |
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
49 |
1420 | 50 private void set2(LuanTable options) throws LuanException, SQLException { |
1392 | 51 Boolean autoCommit = Utils.removeBoolean(options,"auto_commit"); |
52 if( autoCommit != null ) | |
53 con.setAutoCommit(autoCommit); | |
54 Integer n = Utils.removeInteger(options,"fetch_size"); | |
55 if( n != null ) | |
1341
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
56 fetchSize = n; |
1392 | 57 Utils.checkEmpty(options); |
1267 | 58 } |
59 | |
1341
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
60 private void fix(Statement stmt) throws SQLException { |
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
61 if( fetchSize > 0 ) |
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
62 stmt.setFetchSize(fetchSize); |
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
63 } |
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
64 |
1267 | 65 private PreparedStatement prepareStatement(String sql,Object[] args) throws SQLException { |
66 PreparedStatement pstmt = pstmts.get(sql); | |
67 if( pstmt==null ) { | |
68 pstmt = con.prepareStatement(sql); | |
1341
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
69 fix(pstmt); |
1267 | 70 pstmts.put(sql,pstmt); |
71 } | |
72 for( int i=0; i<args.length; i++ ) { | |
73 pstmt.setObject(i+1,args[i]); | |
74 } | |
75 return pstmt; | |
76 } | |
77 | |
78 public ResultSet query(String sql,Object... args) throws SQLException { | |
79 if( args.length == 0 ) { | |
80 Statement stmt = con.createStatement(); | |
1341
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
81 fix(stmt); |
1267 | 82 return stmt.executeQuery(sql); |
83 } else { | |
84 PreparedStatement pstmt = prepareStatement(sql,args); | |
85 return pstmt.executeQuery(); | |
86 } | |
87 } | |
88 | |
89 public int update(String sql,Object... args) throws SQLException { | |
90 if( args.length == 0 ) { | |
91 Statement stmt = con.createStatement(); | |
1341
a015a0b5c388
add Html.decode(), Lucene.count_tokens(), lucene boosts, Sql.database.set()
Franklin Schmidt <fschmidt@gmail.com>
parents:
1337
diff
changeset
|
92 fix(stmt); |
1267 | 93 int n = stmt.executeUpdate(sql); |
94 stmt.close(); | |
95 return n; | |
96 } else { | |
97 PreparedStatement pstmt = prepareStatement(sql,args); | |
98 return pstmt.executeUpdate(); | |
99 } | |
100 } | |
101 | |
102 } |