comparison src/fschmidt/db/base/DbDatabaseImpl.java @ 68:00520880ad02

add fschmidt source
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 05 Oct 2025 17:24:15 -0600
parents
children
comparison
equal deleted inserted replaced
67:9d0fefce6985 68:00520880ad02
1 /*
2 Copyright (c) 2008 Franklin Schmidt <fschmidt@gmail.com>
3
4 Permission is hereby granted, free of charge, to any person obtaining a copy
5 of this software and associated documentation files (the "Software"), to deal
6 in the Software without restriction, including without limitation the rights
7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 copies of the Software, and to permit persons to whom the Software is
9 furnished to do so, subject to the following conditions:
10
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
13
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 THE SOFTWARE.
21 */
22
23 package fschmidt.db.base;
24
25 import java.sql.Connection;
26 import java.sql.SQLException;
27 import java.sql.DriverManager;
28 import java.sql.PreparedStatement;
29 import java.text.DateFormat;
30 import java.text.SimpleDateFormat;
31 import java.util.Properties;
32 import fschmidt.db.DbObject;
33 import fschmidt.db.DbKey;
34 import fschmidt.db.DbKeySetter;
35 import fschmidt.db.DbObjectFactory;
36 import fschmidt.db.SQLRuntimeException;
37 import fschmidt.db.LongKey;
38 import fschmidt.db.StringKey;
39 import fschmidt.db.DbStorable;
40 import fschmidt.db.extend.DbRecordExt;
41 import fschmidt.db.extend.DbDatabaseExt;
42 import fschmidt.db.extend.DbTableExt;
43 import fschmidt.db.extend.DbTransaction;
44
45
46 public abstract class DbDatabaseImpl extends DbDatabaseExt {
47 private final String url;
48 private final Properties props = new Properties();
49
50 public DbDatabaseImpl(String url,String user,String password) {
51 this.url = url;
52 props.setProperty("user",user);
53 props.setProperty("password",password);
54 }
55
56 public void setProperty(String key,String value) {
57 props.setProperty(key,value);
58 }
59
60 public Properties getProperties() {
61 return props;
62 }
63
64 public Connection getConnection()
65 throws SQLException
66 {
67 return DriverManager.getConnection(url,props);
68 }
69
70 public <K extends DbKey,V extends DbObject<K,V>> DbTableExt<K,V> newTable(DbDatabaseExt database,String tableName,DbKeySetter<K> keySetter,DbObjectFactory<K,V> objectFactory) {
71 return new DbTableImpl<K,V>(database,tableName,keySetter,objectFactory);
72 }
73
74 public <K extends DbKey,V extends DbObject<K,V>> DbRecordExt<K,V> newRecord(DbTableExt<K,V> table,V obj,K key) {
75 return new DbRecordImpl<K,V>(table,obj,key);
76 }
77
78 public <K extends DbKey,V extends DbObject<K,V>> DbRecordExt<K,V> newRecord(DbTableExt<K,V> table,V obj) {
79 return new DbRecordImpl<K,V>(table,obj);
80 }
81
82 public boolean isInTransaction() {
83 throw new UnsupportedOperationException();
84 }
85
86 public void beginTransaction()
87 throws SQLRuntimeException
88 {
89 throw new UnsupportedOperationException();
90 }
91
92 public void commitTransaction()
93 throws SQLRuntimeException
94 {
95 throw new UnsupportedOperationException();
96 }
97
98 public void endTransaction()
99 throws SQLRuntimeException
100 {
101 throw new UnsupportedOperationException();
102 }
103
104 public void runBeforeCommit(Runnable r) {
105 r.run();
106 }
107
108 public void runAfterCommit(Runnable r) {
109 r.run();
110 }
111
112 public DbTransaction getTransaction() {
113 return null;
114 }
115
116 public void ignoreRunnablesInThisTransaction() {
117 throw new UnsupportedOperationException();
118 }
119
120
121 public DbKeySetter<LongKey> newIdentityLongKeySetter(String fieldName) {
122 return new LongKeySetter(fieldName);
123 }
124
125 public DbKeySetter<LongKey> newAssignedLongKeySetter(String fieldName) {
126 return new LongForeignKeySetter(fieldName);
127 }
128
129 public DbKeySetter<StringKey> newAssignedStringKeySetter(String fieldName) {
130 return new StringKeySetter(fieldName);
131 }
132
133 public void setValue(PreparedStatement stmt,int idx,Object value)
134 throws SQLException
135 {
136 if( value==null ) {
137 throw new SQLException("null value");
138 } else if( value instanceof DbStorable ) {
139 ((DbStorable)value).setField(stmt,idx);
140 } else if( value instanceof Character ) {
141 stmt.setString(idx,value.toString());
142 } else if( value instanceof java.util.Date ) {
143 stmt.setTimestamp(idx,new java.sql.Timestamp(((java.util.Date)value).getTime()));
144 } else if( (new byte[0]).getClass().isInstance(value) ) {
145 stmt.setBytes(idx,(byte[])value);
146 } else if( value instanceof Boolean ) {
147 stmt.setBoolean( idx, ((Boolean)value).booleanValue() );
148 } else if( value instanceof Float ) {
149 stmt.setFloat( idx, ((Float)value).floatValue() );
150 } else {
151 stmt.setObject(idx,value);
152 }
153 }
154
155
156
157
158 public String quote(String s) {
159 return "'" + stringEncode(s) + "'";
160 }
161
162 public String stringEncode(String s) {
163 StringBuilder buf = new StringBuilder();
164 int n = s.length();
165 for( int i=0; i<n; i++ ) {
166 char c = s.charAt(i);
167 switch(c) {
168 case '\n':
169 buf.append("\\n");
170 break;
171 case '\t':
172 buf.append("\\t");
173 break;
174 case '\r':
175 buf.append("\\r");
176 break;
177 case '\'':
178 buf.append("\\'");
179 break;
180 default:
181 buf.append(c);
182 }
183 }
184 return buf.toString();
185 }
186
187 private static final DateFormat dateFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
188
189 public String quote(java.util.Date date) {
190 return "'" + stringEncode(date) + "'";
191 }
192
193 public String stringEncode(java.util.Date date) {
194 return dateFmt.format(date);
195 }
196
197 }