Mercurial Hosting > nabble
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 } |
