1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.java.sql; 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Connection; 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.DatabaseMetaData; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Driver; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.PreparedStatement; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.ResultSet; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.SQLException; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Statement; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Properties; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Vector; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.logging.Logger; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.DatabaseCreator; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.Support_SQL; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.ThreadPool; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class StressTest extends TestCase { 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Vector<Connection> vc = new Vector<Connection>(); 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static Connection conn; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static Statement statement; 41f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 42c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann public void setUp() throws Exception { 4379870d81001ab3dc70b3bce7dfcca70153a3a14fUrs Grob super.setUp(); 44c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann Support_SQL.loadDriver(); 45c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann conn = Support_SQL.getConnection(); 46c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement = conn.createStatement(); 47c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann createTestTables(); 48c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann vc.clear(); 49c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann protected void tearDown() throws Exception { 52c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann closeConnections(); 53c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.close(); 54c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann conn.close(); 55c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann super.tearDown(); 56c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann private void createTestTables() { 59c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann try { 60c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann DatabaseMetaData meta = conn.getMetaData(); 61c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann ResultSet userTab = meta.getTables(null, null, null, null); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 63c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann while (userTab.next()) { 64c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann String tableName = userTab.getString("TABLE_NAME"); 65c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann if (tableName.equals(DatabaseCreator.TEST_TABLE2)) { 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project statement.execute(DatabaseCreator.DROP_TABLE2); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.execute(DatabaseCreator.CREATE_TABLE2); 70c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } catch (SQLException sql) { 71c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann fail("Unexpected SQLException " + sql.toString()); 72c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 73c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann return; 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 76c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann private void dropTestTables() { 77c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann try { 78c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann statement.execute(DatabaseCreator.DROP_TABLE2); 79c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } catch (SQLException sql) { 80c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann fail("Unexpected SQLException " + sql.toString()); 81c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann } 82c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann return; 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 84f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 85c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// /** 86c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// * @see junit.framework.TestCase#setUp() 87c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// */ 88c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// @Override 89c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// protected void setUp() throws Exception { 90c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// super.setUp(); 91c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// vc.clear(); 92c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// } 93c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// 94c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// /** 95c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// * @see junit.framework.TestCase#tearDown() 96c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// */ 97c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// @Override 98c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// protected void tearDown() throws Exception { 99c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// closeConnections(); 100c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// statement.execute("DELETE FROM " + DatabaseCreator.TEST_TABLE2); 101c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// super.tearDown(); 102c02ce7cca7338064f937c86fae7b019728911525Jorg Pleumann// } 103f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 105229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * StressTest#testManyConnectionsUsingOneThread(). Create many 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connections to the DataBase using one thread. 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testManyConnectionsUsingOneThread() { 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int maxConnections = getConnectionNum(); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project openConnections(maxConnections); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect number of created connections", 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maxConnections, vc.size()); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected Exception " + e.toString()); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 120229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * StressTest#testManyConnectionsUsingManyThreads(). Create many 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * connections to the DataBase using some threads. 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testManyConnectionsUsingManyThreads() { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int numTasks = getConnectionNum(); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ThreadPool threadPool = new ThreadPool(numTasks); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // run example tasks 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < numTasks; i++) { 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project threadPool.runTask(createTask(i)); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // close the pool and wait for all tasks to finish. 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project threadPool.join(); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Unable to create a connection", numTasks, vc.size()); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (numTasks != Support_SQL.sqlMaxConnections) { 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // try to create connection n + 1 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Connection c = Support_SQL.getConnection(); 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.close(); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("It is possible to create more than " + numTasks 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "connections"); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException sql) { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 149229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * StressTest#testInsertOfManyRowsUsingOneThread(). Insert a lot of 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * records to the Database using a maximum number of connections. 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testInsertOfManyRowsUsingOneThread() { 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Logger.global 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .info("java.sql stress test: single thread and many operations."); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int maxConnections = getConnectionNum(); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Logger.global.info("Opening " + maxConnections + " to database " 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + Support_SQL.getFilename()); 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project openConnections(maxConnections); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int tasksPerConnection = Support_SQL.sqlMaxTasks / maxConnections; 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Logger.global.info("TasksPerConnection = " + Support_SQL.sqlMaxTasks 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " by (maxConnections) " + maxConnections + " = " 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + tasksPerConnection); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int pk = 1; 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < vc.size(); ++i) { 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Logger.global.info(" creating " + tasksPerConnection 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "tasks for Connection " + i); 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Connection c = vc.elementAt(i); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int j = 0; j < tasksPerConnection; ++j) { 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(c, pk++); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = statement 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .executeQuery("SELECT COUNT(*) as counter FROM " 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE2); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("RecordSet is empty", rs.next()); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect number of records", tasksPerConnection 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * maxConnections, rs.getInt("counter")); 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException sql) { 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected SQLException " + sql.toString()); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @tests 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testInsertOfManyRowsUsingManyThreads() { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Logger.global.info("java.sql stress test: multiple threads and many operations."); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int numConnections = getConnectionNum(); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int tasksPerConnection = Support_SQL.sqlMaxTasks / numConnections; 196f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Logger.global.info("Opening "+numConnections+" to database "+Support_SQL.getFilename()); 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ThreadPool threadPool = new ThreadPool(numConnections); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < numConnections; ++i) { 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Logger.global.info(" creating "+tasksPerConnection+ " tasks for Connection "+i); 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project threadPool.runTask(insertTask(numConnections, i)); 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // close the pool and wait for all tasks to finish. 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project threadPool.join(); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Unable to create a connection", numConnections, vc.size()); 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ResultSet rs = statement 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .executeQuery("SELECT COUNT(*) as counter FROM " 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + DatabaseCreator.TEST_TABLE2); 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("RecordSet is empty", rs.next()); 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect number of records", tasksPerConnection 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * numConnections, rs.getInt("counter")); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rs.close(); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException sql) { 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected SQLException " + sql.toString()); 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int getConnectionNum() { 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int num = Support_SQL.sqlMaxConnections; 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int mc = conn.getMetaData().getMaxConnections(); 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (mc != 0) { 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (num != mc) { 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.err.println("Will be used no more than " + mc 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " connections to the DataBase"); 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project num = mc; 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException sql) { 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected SQLException " + sql.toString()); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return num; 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void openConnections(int maxConnections) { 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int i = 0; 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (; i < maxConnections; ++i) { 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Connection c = Support_SQL.getConnection(); 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (c == null) { 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Unable to create a connection", 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project maxConnections, i); 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project vc.add(c); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException sql) { 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Unable to create a connection", maxConnections, i); 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void closeConnections() { 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int i = 0; 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (; i < vc.size(); ++i) { 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project vc.elementAt(i).close(); 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException sql) { 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Unable to close a connection", vc.size(), i); 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Runnable createTask(final int taskID) { 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new Runnable() { 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Connection c = Support_SQL.getConnection(); 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (c == null) { 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (this) { 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project vc.add(c); 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException sql) { 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // nothing to do 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Runnable insertTask(final int numConnections, final int taskID) { 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new Runnable() { 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Connection c = Support_SQL.getConnection(); 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (c == null) { 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (this) { 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project vc.add(c); 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int tasksPerConnection = Support_SQL.sqlMaxTasks 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project / numConnections; 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < tasksPerConnection; ++i) { 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project insertNewRecord(c, (i + 1) + tasksPerConnection 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * taskID); 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException sql) { 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // do nothing 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void insertNewRecord(Connection c, int pk) { 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String query = "INSERT INTO " + DatabaseCreator.TEST_TABLE2 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + "(finteger, ftext, fcharacter, fdecimal, fnumeric," 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " fsmallint, ffloat, freal, fdouble, fdate, ftime)" 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project PreparedStatement ps = c.prepareStatement(query); 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.setInt(1, pk); 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.setString(2, "text"); 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.setString(3, "chr"); 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.setFloat(4, 0.1f); 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.setFloat(5, 0.2f); 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.setShort(6, (short) 3); 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.setFloat(7, 0.4f); 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.setDouble(8, 0.5); 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.setDouble(9, 0.6); 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.setDate(10, new java.sql.Date(System.currentTimeMillis())); 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.setTime(11, new java.sql.Time(System.currentTimeMillis())); 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.execute(); 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ps.close(); 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (SQLException sql) { 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected SQLException " + sql.toString()); 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 340