1267
|
1 java()
|
|
2 local Luan = require "luan:Luan.luan"
|
|
3 local error = Luan.error
|
|
4 local new_error = Luan.new_error or error()
|
|
5 local set_metatable = Luan.set_metatable or error()
|
|
6 local Database = require "java:luan.modules.sql.Database"
|
|
7 local Logging = require "luan:logging/Logging.luan"
|
|
8 local logger = Logging.logger "Sql"
|
|
9
|
|
10
|
|
11 local Sql = {}
|
|
12
|
|
13 local mt = {}
|
|
14
|
|
15 function mt.__gc(database)
|
|
16 if not database.is_closed then
|
|
17 logger.error(database.created)
|
|
18 database.close()
|
|
19 end
|
|
20 end
|
|
21
|
|
22 function Sql.database(spec)
|
|
23 local database = {}
|
|
24 set_metatable(database,mt)
|
|
25 local java_database = Database.get(spec)
|
|
26 java_database.uses = java_database.uses + 1
|
|
27 database.is_closed = false
|
|
28 database.java = java_database
|
|
29 database.created = new_error "not closed, created:"
|
|
30 database.update = java_database.update
|
|
31
|
|
32 function database.close()
|
|
33 if not database.is_closed then
|
|
34 database.is_closed = true
|
|
35 java_database.uses > 0 or error "java_database.uses <= 0"
|
|
36 java_database.uses = java_database.uses - 1
|
|
37 if java_database.uses == 0 then
|
|
38 java_database.close()
|
|
39 end
|
|
40 end
|
|
41 end
|
|
42
|
|
43 function database.query(sql,...)
|
|
44 local rs = java_database.query(sql,...)
|
|
45 local mt = {}
|
|
46 function mt.__index(_,key)
|
|
47 local rtn = rs.getObject(key)
|
|
48 return not rs.wasNull() and rtn or nil
|
|
49 end
|
|
50 local result = {}
|
|
51 set_metatable(result,mt)
|
|
52 return function()
|
|
53 if rs.isClosed() then
|
|
54 return nil
|
|
55 end
|
|
56 if not rs.next() then
|
|
57 rs.close()
|
|
58 return nil
|
|
59 end
|
|
60 return result
|
|
61 end
|
|
62 end
|
|
63
|
|
64 return database
|
|
65 end
|
|
66
|
|
67 return Sql
|