1 21 22 package org.opensubsystems.core.persist.db.driver.hsqldb; 23 24 import java.sql.CallableStatement ; 25 import java.sql.Connection ; 26 import java.sql.PreparedStatement ; 27 import java.sql.ResultSet ; 28 import java.sql.SQLException ; 29 import java.sql.Statement ; 30 import java.util.logging.Level ; 31 import java.util.logging.Logger ; 32 33 import org.opensubsystems.core.util.DatabaseUtils; 34 import org.opensubsystems.core.util.Log; 35 import org.opensubsystems.core.error.OSSDatabaseAccessException; 36 import org.opensubsystems.core.error.OSSException; 37 import org.opensubsystems.core.persist.db.DatabaseConnectionFactory; 38 import org.opensubsystems.core.persist.db.driver.DatabaseTestSchema; 39 40 50 public class HsqlDBDatabaseTestSchema extends DatabaseTestSchema 51 { 52 61 62 64 67 private static Logger s_logger = Log.getInstance(HsqlDBDatabaseTestSchema.class); 68 69 71 76 public HsqlDBDatabaseTestSchema( 77 ) throws OSSException 78 { 79 super(); 80 } 81 82 83 85 88 public void create( 89 Connection cntDBConnection, 90 String strUserName 91 ) throws SQLException 92 { 93 super.create(cntDBConnection, strUserName); 95 96 Statement stmQuery = null; 98 try 99 { 100 stmQuery = cntDBConnection.createStatement(); 101 102 if (stmQuery.execute("CREATE TABLE GENERATEDKEY_TEST" + NL + 103 "(" + NL + 104 " TEST_KEY INTEGER IDENTITY," + NL + 105 " TEST_VALUE VARCHAR(50) NOT NULL" + NL + 106 ")")) 107 { 108 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 110 } 111 s_logger.log(Level.FINEST, "Table GENERATEDKEY_TEST created."); 112 122 } 123 catch (SQLException sqleExc) 124 { 125 s_logger.log(Level.WARNING, "Failed to create database test schema.", 126 sqleExc); 127 throw sqleExc; 128 } 129 finally 130 { 131 DatabaseUtils.closeStatement(stmQuery); 132 } 133 } 134 135 138 public void createDataSource( 139 DatabaseConnectionFactory dbConnectionFactory, 140 String strDataSourceName, 141 String strDatabaseDriver, 142 String strDatabaseURL, 143 String strUserName, 144 String strUserPassword 145 ) throws OSSDatabaseAccessException 146 { 147 dbConnectionFactory.addDataSource(strDataSourceName, 149 strDatabaseDriver, 150 strDatabaseURL + "2", strUserName, 152 strUserPassword); 153 } 154 155 158 public String getInsertGeneratedKey( 159 ) 160 { 161 return "insert into generatedkey_test(test_key, test_value) values (null, ?)"; 162 } 163 164 167 public int[] executeInsertGeneratedKey2( 168 Connection dbConnection, 169 String strValue 170 ) throws SQLException 171 { 172 PreparedStatement insertStatement = null; 173 CallableStatement callStatement = null; 174 ResultSet rsResults = null; 175 int iInsertCount = 0; 176 int iGeneratedKey = 0; 177 int[] returnValues = null; 178 179 try 180 { 181 insertStatement = dbConnection.prepareStatement(getInsertGeneratedKey()); 182 insertStatement.setString(1, strValue); 183 iInsertCount = insertStatement.executeUpdate(); 184 185 callStatement = dbConnection.prepareCall("call identity()"); 186 187 rsResults = callStatement.executeQuery(); 188 if (rsResults.next()) 189 { 190 iGeneratedKey = rsResults.getInt(1); 191 192 returnValues = new int[2]; 193 returnValues[0] = iInsertCount; 194 returnValues[1] = iGeneratedKey; 195 } 196 } 197 finally 198 { 199 DatabaseUtils.closeStatement(insertStatement); 200 DatabaseUtils.closeResultSetAndStatement(rsResults, callStatement); 201 } 202 203 return returnValues; 204 } 205 206 209 public int executeUpdateTestValue( 210 Connection dbConnection, 211 String strOldValue, 212 String strNewValue 213 ) throws SQLException 214 { 215 PreparedStatement updateStatement = null; 216 int iUpdateCount = 0; 217 218 try 219 { 220 updateStatement = dbConnection.prepareStatement( 221 "update TRANSACTION_TEST set TEST_VALUE = ? where TEST_VALUE = ?"); 222 updateStatement.setString(1, strNewValue); 223 updateStatement.setString(2, strOldValue); 224 225 iUpdateCount = updateStatement.executeUpdate(); 229 } 230 finally 231 { 232 DatabaseUtils.closeStatement(updateStatement); 233 } 234 235 return iUpdateCount; 236 } 237 238 239 242 public int[] executeInsertRow( 243 Connection dbConnection, 244 String strValue) 245 throws SQLException 246 { 247 PreparedStatement insertStatement = null; 248 int iInsertCount = 0; 249 int iInsertCountReturnedFromSP = 0; 250 int[] returnValues = null; 251 252 try 253 { 254 insertStatement = dbConnection.prepareStatement(getInsertGeneratedKey()); 255 insertStatement.setString(1, strValue); 256 iInsertCount = insertStatement.executeUpdate(); 257 258 returnValues = new int[2]; 259 260 returnValues[0] = iInsertCount; 262 263 returnValues[1] = iInsertCountReturnedFromSP; 266 } 267 finally 268 { 269 DatabaseUtils.closeStatement(insertStatement); 270 } 271 return returnValues; 273 } 274 275 278 public void createTestUser( 279 Connection cntAdminDBConnection, 280 String strDatabaseURL, 281 String strUserName, 282 String strUserPassword 283 ) throws SQLException 284 { 285 Statement stmQuery = null; 286 try 287 { 288 String strCreateUserQuery = "CREATE USER " + strUserName + " PASSWORD " 289 + strUserPassword + " ADMIN"; 290 291 stmQuery = cntAdminDBConnection.createStatement(); 292 293 if (stmQuery.execute(strCreateUserQuery)) 294 { 295 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 297 } 298 } 299 finally 300 { 301 DatabaseUtils.closeStatement(stmQuery); 302 } 303 } 304 305 308 public void dropTestUser( 309 Connection cntAdminDBConnection, 310 String strDatabaseURL, 311 String strUserName 312 ) throws SQLException 313 { 314 Statement stmQuery = null; 315 try 316 { 317 String strDropUserQuery = "DROP USER " + strUserName; 318 319 stmQuery = cntAdminDBConnection.createStatement(); 320 321 if (stmQuery.execute(strDropUserQuery)) 322 { 323 stmQuery.getMoreResults(Statement.CLOSE_ALL_RESULTS); 325 } 326 } 327 finally 328 { 329 DatabaseUtils.closeStatement(stmQuery); 330 } 331 } 332 } 333 | Popular Tags |