1 21 22 23 package org.apache.derbyTesting.functionTests.tests.jdbcapi; 24 25 import java.sql.Connection ; 26 import java.sql.DriverManager ; 27 import java.sql.ResultSetMetaData ; 28 import java.sql.ResultSet ; 29 import java.sql.Statement ; 30 import java.sql.DatabaseMetaData ; 31 import java.sql.SQLException ; 32 33 import org.apache.derby.tools.ij; 34 import org.apache.derby.tools.JDBCDisplayUtil; 35 import java.io.*; 36 import java.sql.PreparedStatement ; 37 import java.util.Properties ; 38 39 public class metadataMultiConn 40 { 41 42 public static Connection getConnection(String [] args, boolean autoCommit) 43 throws Exception 44 { 45 ij.getPropertyArg(args); 48 Connection conn = ij.startJBMS(); 49 conn.setAutoCommit(autoCommit); 50 return conn; 51 } 52 53 public static void main(String [] args) 54 throws Exception 55 { 56 System.out.println("Test metadataMultiConn starting"); 57 58 Connection conn1 = getConnection(args, false); 60 metadataCalls(conn1); 61 62 Connection conn2= getConnection(args, false); 63 64 metadataCalls(conn2); 65 66 Connection conn3 = getConnection(args, false); 67 metadataCalls(conn3); 68 69 conn1.commit(); 70 conn2.commit(); 71 checkConsistencyOfAllTables(conn3); 72 73 System.out.println("Test metadataMultiConn finishes."); 74 } 75 76 77 public static void metadataCalls(Connection conn) 78 throws Exception 79 { 80 System.out.println("A new connection is doing metadata calls, but never commit..."); 81 82 DatabaseMetaData dmd = conn.getMetaData(); 83 getTypeInfo(dmd,System.out); 84 getTables(dmd,System.out); 85 getColumnInfo(dmd, "%",System.out); 86 getPrimaryKeys(dmd, "%",System.out); 87 getExportedKeys(dmd, "%",System.out); 88 89 } 90 91 public static void getTypeInfo(DatabaseMetaData dmd,PrintStream out) 92 throws SQLException 93 { 94 ResultSet rs = dmd.getTypeInfo(); 95 out.println("Submitted getTypeInfo request"); 96 while (rs.next()) 97 { 98 String typeName = rs.getString(1); 100 101 short dataType = rs.getShort(2); 103 104 int precision = rs.getInt(3); 106 107 String literalPrefix = rs.getString(4); 110 111 String literalSuffix = rs.getString(5); 114 115 String createParams = rs.getString(6); 118 119 short nullable = rs.getShort(7); 124 125 boolean caseSensitive = rs.getBoolean(8); 127 128 short searchable = rs.getShort(9); 134 135 boolean unsignedAttribute = rs.getBoolean(10); 137 138 boolean fixedPrecScale = rs.getBoolean(11); 140 141 boolean autoIncrement = rs.getBoolean(12); 144 145 String localTypeName = rs.getString(13); 148 149 short minimumScale = rs.getShort(14); 151 152 short maximumScale = rs.getShort(15); 154 155 157 159 161 } 163 rs.close(); 164 } 165 166 public static void getTables(DatabaseMetaData dmd,PrintStream out) 167 throws SQLException 168 { 169 String types[] = new String [1]; 170 types[0] = "TABLE"; 171 ResultSet rs = dmd.getTables(null, null, null, types); 172 while (rs.next()) 173 { 174 String tableCat = rs.getString(1); 176 177 String tableSchem = rs.getString(2); 179 180 String tableName = rs.getString(3); 182 183 String tableType = rs.getString(4); 188 189 String remarks = rs.getString(5); 191 } 192 rs.close(); 193 } 194 195 public static void getColumnInfo(DatabaseMetaData dmd, String tablePattern,PrintStream out) 196 throws SQLException 197 { 198 out.println("Getting column info for " + tablePattern); 199 ResultSet rs = dmd.getColumns(null, null, tablePattern, "%"); 200 while (rs.next()) 201 { 202 String tableCat = rs.getString(1); 204 205 String tableSchem = rs.getString(2); 207 208 String tableName = rs.getString(3); 210 211 String columnName = rs.getString(4); 213 214 short dataType = rs.getShort(5); 216 217 String typeName = rs.getString(6); 219 220 int columnSize = rs.getInt(7); 224 225 227 int decimalDigits = rs.getInt(9); 229 230 int numPrecRadix = rs.getInt(10); 232 233 int nullable = rs.getInt(11); 238 239 String remarks = rs.getString(12); 241 242 String columnDef = rs.getString(13); 244 245 247 249 int charOctetLength = rs.getInt(16); 252 253 257 262 } 265 rs.close(); 266 } 267 268 public static void getPrimaryKeys(DatabaseMetaData dmd, String tablePattern,PrintStream out) 269 throws SQLException 270 { 271 ResultSet rs = dmd.getPrimaryKeys(null, null, tablePattern); 272 while (rs.next()) 273 { 274 String tableCat = rs.getString(1); 276 277 String tableSchem = rs.getString(2); 279 280 String tableName = rs.getString(3); 282 283 String columnName = rs.getString(4); 285 286 short keySeq = rs.getShort(5); 288 289 String pkName = rs.getString(6); 291 } 292 rs.close(); 293 } 294 295 public static void getExportedKeys(DatabaseMetaData dmd, String tablePattern,PrintStream out) 296 throws SQLException 297 { 298 ResultSet rs = dmd.getExportedKeys(null, null, tablePattern); 299 while (rs.next()) 300 { 301 String pkTableCat = rs.getString(1); 303 304 String pkTableSchem = rs.getString(2); 306 307 String pkTableName = rs.getString(3); 309 310 String pkColumnName = rs.getString(4); 312 313 String fkTableCat = rs.getString(5); 316 317 String fkTableSchem = rs.getString(6); 320 321 String fkTableName = rs.getString(7); 323 324 String fkColumnName = rs.getString(8); 326 327 short keySeq = rs.getShort(9); 329 330 short updateRule = rs.getShort(10); 344 345 short deleteRule = rs.getShort(11); 358 359 String fkName = rs.getString(12); 361 362 String pkName = rs.getString(13); 364 365 short deferrability = rs.getShort(14); 371 372 } 373 rs.close(); 374 } 375 376 383 384 public static void checkConsistencyOfAllTables(Connection conn) throws SQLException { 385 386 Statement s = conn.createStatement(); 388 ResultSet rs = s.executeQuery("SELECT schemaname, tablename, " + 389 "SYSCS_UTIL.SYSCS_CHECK_TABLE(schemaname, tablename) " + 390 "FROM sys.sysschemas s, sys.systables t " + 391 "WHERE s.schemaid = t.schemaid"); 392 boolean consistent = true; 393 boolean allconsistent = true; 394 while (rs.next()) { 395 consistent = rs.getBoolean(3); 396 if (!consistent) { 397 allconsistent = false; 398 System.out.println(rs.getString(1) + "." + rs.getString(2) + " is not consistent."); 399 } 400 } 401 rs.close(); 402 if (allconsistent) 403 System.out.println("All tables are consistent."); 404 s.close(); 405 } 406 } 407 408 | Popular Tags |