📄 testmetadata.java
字号:
checkFalse(meta.supportsMixedCaseIdentifiers());
check(meta.supportsMixedCaseQuotedIdentifiers());
checkFalse(meta.supportsMultipleResultSets());
check(meta.supportsMultipleTransactions());
check(meta.supportsNonNullableColumns());
checkFalse(meta.supportsOpenCursorsAcrossCommit());
checkFalse(meta.supportsOpenCursorsAcrossRollback());
check(meta.supportsOpenStatementsAcrossCommit());
check(meta.supportsOpenStatementsAcrossRollback());
check(meta.supportsOrderByUnrelated());
check(meta.supportsOuterJoins());
check(meta.supportsPositionedDelete());
check(meta.supportsPositionedUpdate());
check(meta.supportsResultSetConcurrency(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY));
check(meta.supportsResultSetConcurrency(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE));
check(meta.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY));
check(meta.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE));
checkFalse(meta.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY));
checkFalse(meta.supportsResultSetConcurrency(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE));
if (config.jdk14) {
checkFalse(meta.supportsResultSetHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT));
check(meta.supportsResultSetHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT));
check(meta.supportsSavepoints());
checkFalse(meta.supportsStatementPooling());
}
check(meta.supportsResultSetType(ResultSet.TYPE_FORWARD_ONLY));
check(meta.supportsResultSetType(ResultSet.TYPE_SCROLL_INSENSITIVE));
checkFalse(meta.supportsResultSetType(ResultSet.TYPE_SCROLL_SENSITIVE));
check(meta.supportsSchemasInDataManipulation());
check(meta.supportsSchemasInIndexDefinitions());
check(meta.supportsSchemasInPrivilegeDefinitions());
check(meta.supportsSchemasInProcedureCalls());
check(meta.supportsSchemasInTableDefinitions());
check(meta.supportsSelectForUpdate());
checkFalse(meta.supportsStoredProcedures());
check(meta.supportsSubqueriesInComparisons());
check(meta.supportsSubqueriesInExists());
check(meta.supportsSubqueriesInIns());
check(meta.supportsSubqueriesInQuantifieds());
check(meta.supportsTableCorrelationNames());
check(meta.supportsTransactions());
check(meta.supportsTransactionIsolationLevel(Connection.TRANSACTION_NONE));
check(meta.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_COMMITTED));
check(meta.supportsTransactionIsolationLevel(Connection.TRANSACTION_READ_UNCOMMITTED));
check(meta.supportsTransactionIsolationLevel(Connection.TRANSACTION_REPEATABLE_READ));
check(meta.supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE));
check(meta.supportsUnion());
check(meta.supportsUnionAll());
checkFalse(meta.updatesAreDetected(ResultSet.TYPE_FORWARD_ONLY));
checkFalse(meta.updatesAreDetected(ResultSet.TYPE_SCROLL_INSENSITIVE));
checkFalse(meta.updatesAreDetected(ResultSet.TYPE_SCROLL_SENSITIVE));
checkFalse(meta.usesLocalFilePerTable());
check(meta.usesLocalFiles());
}
void test(Connection conn) throws Exception {
DatabaseMetaData meta = conn.getMetaData();
Statement stat = conn.createStatement();
ResultSet rs;
conn.setReadOnly(true);
conn.setReadOnly(false);
checkFalse(conn.isReadOnly());
check(conn.isReadOnly() == meta.isReadOnly());
check(conn == meta.getConnection());
// currently, setCatalog is ignored
conn.setCatalog("XYZ");
trace(conn.getCatalog());
String product = meta.getDatabaseProductName();
trace("meta.getDatabaseProductName:" + product);
String version = meta.getDatabaseProductVersion();
trace("meta.getDatabaseProductVersion:" + version);
int major = meta.getDriverMajorVersion();
trace("meta.getDriverMajorVersion:" + major);
int minor = meta.getDriverMinorVersion();
trace("meta.getDriverMinorVersion:" + minor);
String driverName = meta.getDriverName();
trace("meta.getDriverName:" + driverName);
String driverVersion = meta.getDriverVersion();
trace("meta.getDriverVersion:" + driverVersion);
meta.getSearchStringEscape();
String url = meta.getURL();
trace("meta.getURL:" + url);
String user = meta.getUserName();
trace("meta.getUserName:" + user);
trace("meta.nullsAreSortedHigh:" + meta.nullsAreSortedHigh());
trace("meta.nullsAreSortedLow:" + meta.nullsAreSortedLow());
trace("meta.nullsAreSortedAtStart:" + meta.nullsAreSortedAtStart());
trace("meta.nullsAreSortedAtEnd:" + meta.nullsAreSortedAtEnd());
int count = (meta.nullsAreSortedHigh() ? 1 : 0) + (meta.nullsAreSortedLow() ? 1 : 0)
+ (meta.nullsAreSortedAtStart() ? 1 : 0) + (meta.nullsAreSortedAtEnd() ? 1 : 0);
check(count == 1);
trace("meta.allProceduresAreCallable:" + meta.allProceduresAreCallable());
check(meta.allProceduresAreCallable());
trace("meta.allTablesAreSelectable:" + meta.allTablesAreSelectable());
check(meta.allTablesAreSelectable());
trace("getTables");
rs = meta.getTables(null, Constants.SCHEMA_MAIN, null, new String[] { "TABLE" });
testResultSetMeta(rs, 6, new String[] { "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "TABLE_TYPE", "REMARKS",
"SQL" }, new int[] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR,
Types.VARCHAR }, null, null);
if (rs.next()) {
error("Database is not empty after dropping all tables");
}
stat.executeUpdate("CREATE TABLE TEST(" + "ID INT PRIMARY KEY," + "TEXT_V VARCHAR(120),"
+ "DEC_V DECIMAL(12,3)," + "DATE_V DATETIME," + "BLOB_V BLOB," + "CLOB_V CLOB" + ")");
rs = meta.getTables(null, Constants.SCHEMA_MAIN, null, new String[] { "TABLE" });
testResultSetOrdered(rs, new String[][] { { catalog, Constants.SCHEMA_MAIN, "TEST", "TABLE", "" } });
trace("getColumns");
rs = meta.getColumns(null, null, "TEST", null);
testResultSetMeta(rs, 18, new String[] { "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME", "DATA_TYPE",
"TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH", "DECIMAL_DIGITS", "NUM_PREC_RADIX", "NULLABLE", "REMARKS",
"COLUMN_DEF", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "CHAR_OCTET_LENGTH", "ORDINAL_POSITION",
"IS_NULLABLE" }, new int[] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR,
Types.SMALLINT, Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.INTEGER, Types.INTEGER,
Types.SMALLINT, Types.VARCHAR, Types.VARCHAR, Types.SMALLINT, Types.INTEGER, Types.INTEGER,
Types.INTEGER, Types.VARCHAR }, null, null);
testResultSetOrdered(rs,
new String[][] {
{ catalog, Constants.SCHEMA_MAIN, "TEST", "ID", "" + Types.INTEGER, "INTEGER", "10", "10", "0",
"10", "" + DatabaseMetaData.columnNoNulls, "", null, "" + Types.INTEGER, "0", "10", "1",
"NO" },
{ catalog, Constants.SCHEMA_MAIN, "TEST", "TEXT_V", "" + Types.VARCHAR, "VARCHAR", "120",
"120", "0", "10", "" + DatabaseMetaData.columnNullable, "", null, "" + Types.VARCHAR,
"0", "120", "2", "YES" },
{ catalog, Constants.SCHEMA_MAIN, "TEST", "DEC_V", "" + Types.DECIMAL, "DECIMAL", "12", "12",
"3", "10", "" + DatabaseMetaData.columnNullable, "", null, "" + Types.DECIMAL, "0", "12",
"3", "YES" },
{ catalog, Constants.SCHEMA_MAIN, "TEST", "DATE_V", "" + Types.TIMESTAMP, "TIMESTAMP", "23",
"23", "10", "10", "" + DatabaseMetaData.columnNullable, "", null, "" + Types.TIMESTAMP,
"0", "23", "4", "YES" },
{ catalog, Constants.SCHEMA_MAIN, "TEST", "BLOB_V", "" + Types.BLOB, "BLOB",
"" + Integer.MAX_VALUE, "" + Integer.MAX_VALUE, "0", "10",
"" + DatabaseMetaData.columnNullable, "", null, "" + Types.BLOB, "0",
"" + Integer.MAX_VALUE, "5", "YES" },
{ catalog, Constants.SCHEMA_MAIN, "TEST", "CLOB_V", "" + Types.CLOB, "CLOB",
"" + Integer.MAX_VALUE, "" + Integer.MAX_VALUE, "0", "10",
"" + DatabaseMetaData.columnNullable, "", null, "" + Types.CLOB, "0",
"" + Integer.MAX_VALUE, "6", "YES" } });
/*
* rs=meta.getColumns(null,null,"TEST",null); while(rs.next()) { int
* datatype=rs.getInt(5); }
*/
trace("getIndexInfo");
stat.executeUpdate("CREATE INDEX IDX_TEXT_DEC ON TEST(TEXT_V,DEC_V)");
stat.executeUpdate("CREATE UNIQUE INDEX IDX_DATE ON TEST(DATE_V)");
rs = meta.getIndexInfo(null, null, "TEST", false, false);
testResultSetMeta(rs, 14, new String[] { "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "NON_UNIQUE",
"INDEX_QUALIFIER", "INDEX_NAME", "TYPE", "ORDINAL_POSITION", "COLUMN_NAME", "ASC_OR_DESC",
"CARDINALITY", "PAGES", "FILTER_CONDITION", "SORT_TYPE"}, new int[] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR,
DataType.TYPE_BOOLEAN, Types.VARCHAR, Types.VARCHAR, Types.SMALLINT, Types.SMALLINT, Types.VARCHAR,
Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.VARCHAR, Types.INTEGER}, null, null);
testResultSetOrdered(rs, new String[][] {
{ catalog, Constants.SCHEMA_MAIN, "TEST", "FALSE", catalog, "IDX_DATE",
"" + DatabaseMetaData.tableIndexOther, "1", "DATE_V", "A", "0", "0", "" },
{ catalog, Constants.SCHEMA_MAIN, "TEST", "FALSE", catalog, "PRIMARY_KEY_2",
"" + DatabaseMetaData.tableIndexOther, "1", "ID", "A", "0", "0", "" },
{ catalog, Constants.SCHEMA_MAIN, "TEST", "TRUE", catalog, "IDX_TEXT_DEC",
"" + DatabaseMetaData.tableIndexOther, "1", "TEXT_V", "A", "0", "0", "" },
{ catalog, Constants.SCHEMA_MAIN, "TEST", "TRUE", catalog, "IDX_TEXT_DEC",
"" + DatabaseMetaData.tableIndexOther, "2", "DEC_V", "A", "0", "0", "" }, });
stat.executeUpdate("DROP INDEX IDX_TEXT_DEC");
stat.executeUpdate("DROP INDEX IDX_DATE");
rs = meta.getIndexInfo(null, null, "TEST", false, false);
testResultSetMeta(rs, 14, new String[] { "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "NON_UNIQUE",
"INDEX_QUALIFIER", "INDEX_NAME", "TYPE", "ORDINAL_POSITION", "COLUMN_NAME", "ASC_OR_DESC",
"CARDINALITY", "PAGES", "FILTER_CONDITION", "SORT_TYPE" }, new int[] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR,
DataType.TYPE_BOOLEAN, Types.VARCHAR, Types.VARCHAR, Types.SMALLINT, Types.SMALLINT, Types.VARCHAR,
Types.VARCHAR, Types.INTEGER, Types.INTEGER, Types.VARCHAR, Types.INTEGER }, null, null);
testResultSetOrdered(rs, new String[][] { { catalog, Constants.SCHEMA_MAIN, "TEST", "FALSE", catalog,
"PRIMARY_KEY_2", "" + DatabaseMetaData.tableIndexOther, "1", "ID", "A", "0", "0", "" } });
trace("getPrimaryKeys");
rs = meta.getPrimaryKeys(null, null, "TEST");
testResultSetMeta(rs, 6, new String[] { "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME", "KEY_SEQ",
"PK_NAME" }, new int[] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.SMALLINT,
Types.VARCHAR }, null, null);
testResultSetOrdered(rs,
new String[][] { { catalog, Constants.SCHEMA_MAIN, "TEST", "ID", "1", "PRIMARY_KEY_2" }, });
trace("getTables - using a wildcard");
stat.executeUpdate("CREATE TABLE T_2(B INT,A VARCHAR(6),C INT,PRIMARY KEY(C,A,B))");
stat.executeUpdate("CREATE TABLE TX2(B INT,A VARCHAR(6),C INT,PRIMARY KEY(C,A,B))");
rs = meta.getTables(null, null, "T_2", null);
testResultSetOrdered(rs, new String[][] { { catalog, Constants.SCHEMA_MAIN, "TX2", "TABLE", "" },
{ catalog, Constants.SCHEMA_MAIN, "T_2", "TABLE", "" } });
trace("getTables - using a quoted _ character");
rs = meta.getTables(null, null, "T\\_2", null);
testResultSetOrdered(rs, new String[][] { { catalog, Constants.SCHEMA_MAIN, "T_2", "TABLE", "" } });
trace("getTables - using the % wildcard");
rs = meta.getTables(null, Constants.SCHEMA_MAIN, "%", new String[] { "TABLE" });
testResultSetOrdered(rs, new String[][] { { catalog, Constants.SCHEMA_MAIN, "TEST", "TABLE", "" },
{ catalog, Constants.SCHEMA_MAIN, "TX2", "TABLE", "" },
{ catalog, Constants.SCHEMA_MAIN, "T_2", "TABLE", "" } });
stat.execute("DROP TABLE TEST");
trace("getColumns - using wildcards");
rs = meta.getColumns(null, null, "___", "B%");
testResultSetOrdered(rs, new String[][] {
{ catalog, Constants.SCHEMA_MAIN, "TX2", "B", "" + Types.INTEGER, "INTEGER", "10" /*
* ,
* null,
* "0",
* "10", "" +
* DatabaseMetaData.columnNoNulls,
* null,
* null,
* null,
* null,
* null,
* "1",
* "NO"
*/},
{ catalog, Constants.SCHEMA_MAIN, "T_2", "B", "" + Types.INTEGER, "INTEGER", "10" /*
* ,
* null,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -