use of org.h2.Driver in project h2database by h2database.
the class TableLink method readMetaData.
private void readMetaData() throws SQLException {
DatabaseMetaData meta = conn.getConnection().getMetaData();
storesLowerCase = meta.storesLowerCaseIdentifiers();
storesMixedCase = meta.storesMixedCaseIdentifiers();
storesMixedCaseQuoted = meta.storesMixedCaseQuotedIdentifiers();
supportsMixedCaseIdentifiers = meta.supportsMixedCaseIdentifiers();
ResultSet rs = meta.getTables(null, originalSchema, originalTable, null);
if (rs.next() && rs.next()) {
throw DbException.get(ErrorCode.SCHEMA_NAME_MUST_MATCH, originalTable);
}
rs.close();
rs = meta.getColumns(null, originalSchema, originalTable, null);
int i = 0;
ArrayList<Column> columnList = New.arrayList();
HashMap<String, Column> columnMap = new HashMap<>();
String catalog = null, schema = null;
while (rs.next()) {
String thisCatalog = rs.getString("TABLE_CAT");
if (catalog == null) {
catalog = thisCatalog;
}
String thisSchema = rs.getString("TABLE_SCHEM");
if (schema == null) {
schema = thisSchema;
}
if (!Objects.equals(catalog, thisCatalog) || !Objects.equals(schema, thisSchema)) {
// if the table exists in multiple schemas or tables,
// use the alternative solution
columnMap.clear();
columnList.clear();
break;
}
String n = rs.getString("COLUMN_NAME");
n = convertColumnName(n);
int sqlType = rs.getInt("DATA_TYPE");
String sqlTypeName = rs.getString("TYPE_NAME");
long precision = rs.getInt("COLUMN_SIZE");
precision = convertPrecision(sqlType, precision);
int scale = rs.getInt("DECIMAL_DIGITS");
scale = convertScale(sqlType, scale);
int displaySize = MathUtils.convertLongToInt(precision);
int type = DataType.convertSQLTypeToValueType(sqlType, sqlTypeName);
Column col = new Column(n, type, precision, scale, displaySize);
col.setTable(this, i++);
columnList.add(col);
columnMap.put(n, col);
}
rs.close();
if (originalTable.indexOf('.') < 0 && !StringUtils.isNullOrEmpty(schema)) {
qualifiedTableName = schema + "." + originalTable;
} else {
qualifiedTableName = originalTable;
}
try (Statement stat = conn.getConnection().createStatement()) {
rs = stat.executeQuery("SELECT * FROM " + qualifiedTableName + " T WHERE 1=0");
if (columnList.isEmpty()) {
// alternative solution
ResultSetMetaData rsMeta = rs.getMetaData();
for (i = 0; i < rsMeta.getColumnCount(); ) {
String n = rsMeta.getColumnName(i + 1);
n = convertColumnName(n);
int sqlType = rsMeta.getColumnType(i + 1);
long precision = rsMeta.getPrecision(i + 1);
precision = convertPrecision(sqlType, precision);
int scale = rsMeta.getScale(i + 1);
scale = convertScale(sqlType, scale);
int displaySize = rsMeta.getColumnDisplaySize(i + 1);
int type = DataType.getValueTypeFromResultSet(rsMeta, i + 1);
Column col = new Column(n, type, precision, scale, displaySize);
col.setTable(this, i++);
columnList.add(col);
columnMap.put(n, col);
}
}
rs.close();
} catch (Exception e) {
throw DbException.get(ErrorCode.TABLE_OR_VIEW_NOT_FOUND_1, e, originalTable + "(" + e.toString() + ")");
}
Column[] cols = columnList.toArray(new Column[0]);
setColumns(cols);
int id = getId();
linkedIndex = new LinkedIndex(this, id, IndexColumn.wrap(cols), IndexType.createNonUnique(false));
indexes.add(linkedIndex);
try {
rs = meta.getPrimaryKeys(null, originalSchema, originalTable);
} catch (Exception e) {
// Some ODBC bridge drivers don't support it:
// some combinations of "DataDirect SequeLink(R) for JDBC"
// http://www.datadirect.com/index.ssp
rs = null;
}
String pkName = "";
ArrayList<Column> list;
if (rs != null && rs.next()) {
// the problem is, the rows are not sorted by KEY_SEQ
list = New.arrayList();
do {
int idx = rs.getInt("KEY_SEQ");
if (pkName == null) {
pkName = rs.getString("PK_NAME");
}
while (list.size() < idx) {
list.add(null);
}
String col = rs.getString("COLUMN_NAME");
col = convertColumnName(col);
Column column = columnMap.get(col);
if (idx == 0) {
// workaround for a bug in the SQLite JDBC driver
list.add(column);
} else {
list.set(idx - 1, column);
}
} while (rs.next());
addIndex(list, IndexType.createPrimaryKey(false, false));
rs.close();
}
try {
rs = meta.getIndexInfo(null, originalSchema, originalTable, false, true);
} catch (Exception e) {
// Oracle throws an exception if the table is not found or is a
// SYNONYM
rs = null;
}
String indexName = null;
list = New.arrayList();
IndexType indexType = null;
if (rs != null) {
while (rs.next()) {
if (rs.getShort("TYPE") == DatabaseMetaData.tableIndexStatistic) {
// ignore index statistics
continue;
}
String newIndex = rs.getString("INDEX_NAME");
if (pkName.equals(newIndex)) {
continue;
}
if (indexName != null && !indexName.equals(newIndex)) {
addIndex(list, indexType);
indexName = null;
}
if (indexName == null) {
indexName = newIndex;
list.clear();
}
boolean unique = !rs.getBoolean("NON_UNIQUE");
indexType = unique ? IndexType.createUnique(false, false) : IndexType.createNonUnique(false);
String col = rs.getString("COLUMN_NAME");
col = convertColumnName(col);
Column column = columnMap.get(col);
list.add(column);
}
rs.close();
}
if (indexName != null) {
addIndex(list, indexType);
}
}
use of org.h2.Driver in project h2database by h2database.
the class Shell method connect.
private void connect() throws IOException, SQLException {
String url = "jdbc:h2:~/test";
String user = "";
String driver = null;
try {
Properties prop;
if ("null".equals(serverPropertiesDir)) {
prop = new Properties();
} else {
prop = SortedProperties.loadProperties(serverPropertiesDir + "/" + Constants.SERVER_PROPERTIES_NAME);
}
String data = null;
boolean found = false;
for (int i = 0; ; i++) {
String d = prop.getProperty(String.valueOf(i));
if (d == null) {
break;
}
found = true;
data = d;
}
if (found) {
ConnectionInfo info = new ConnectionInfo(data);
url = info.url;
user = info.user;
driver = info.driver;
}
} catch (IOException e) {
// ignore
}
println("[Enter] " + url);
print("URL ");
url = readLine(url).trim();
if (driver == null) {
driver = JdbcUtils.getDriver(url);
}
if (driver != null) {
println("[Enter] " + driver);
}
print("Driver ");
driver = readLine(driver).trim();
println("[Enter] " + user);
print("User ");
user = readLine(user);
println("[Enter] Hide");
print("Password ");
String password = readLine();
if (password.length() == 0) {
password = readPassword();
}
conn = JdbcUtils.getConnection(driver, url, user, password);
stat = conn.createStatement();
println("Connected");
}
use of org.h2.Driver in project h2database by h2database.
the class JdbcDataSource method getJdbcConnection.
private JdbcConnection getJdbcConnection(String user, char[] password) throws SQLException {
if (isDebugEnabled()) {
debugCode("getJdbcConnection(" + quote(user) + ", new char[0]);");
}
Properties info = new Properties();
info.setProperty("user", user);
info.put("password", password);
Connection conn = Driver.load().connect(url, info);
if (conn == null) {
throw new SQLException("No suitable driver found for " + url, "08001", 8001);
} else if (!(conn instanceof JdbcConnection)) {
throw new SQLException("Connecting with old version is not supported: " + url, "08001", 8001);
}
return (JdbcConnection) conn;
}
use of org.h2.Driver in project h2database by h2database.
the class TestDriver method testDriverObject.
private void testDriverObject() throws Exception {
Driver instance = Driver.load();
assertTrue(DriverManager.getDriver("jdbc:h2:~/test") == instance);
Driver.unload();
try {
java.sql.Driver d = DriverManager.getDriver("jdbc:h2:~/test");
fail(d.toString());
} catch (SQLException e) {
// ignore
}
Driver.load();
assertTrue(DriverManager.getDriver("jdbc:h2:~/test") == instance);
}
use of org.h2.Driver in project h2database by h2database.
the class TestWeb method testWebApp.
private void testWebApp() throws Exception {
Server server = new Server();
server.setOut(new PrintStream(new ByteArrayOutputStream()));
server.runTool("-web", "-webPort", "8182", "-properties", "null", "-tcp", "-tcpPort", "9101");
try {
String url = "http://localhost:8182";
WebClient client;
String result;
client = new WebClient();
result = client.get(url);
client.readSessionId(result);
client.get(url, "login.jsp");
client.get(url, "adminSave.do");
result = client.get(url, "index.do?language=de");
result = client.get(url, "login.jsp");
assertContains(result, "Einstellung");
result = client.get(url, "index.do?language=en");
result = client.get(url, "login.jsp");
assertTrue(result.indexOf("Einstellung") < 0);
result = client.get(url, "test.do?driver=abc" + "&url=jdbc:abc:mem: " + getTestName() + "&user=sa&password=sa&name=_test_");
assertContains(result, "Exception");
result = client.get(url, "test.do?driver=org.h2.Driver" + "&url=jdbc:h2:mem:" + getTestName() + "&user=sa&password=sa&name=_test_");
assertTrue(result.indexOf("Exception") < 0);
result = client.get(url, "login.do?driver=org.h2.Driver" + "&url=jdbc:h2:mem:" + getTestName() + "&user=sa&password=sa&name=_test_");
result = client.get(url, "header.jsp");
result = client.get(url, "query.do?sql=" + "create table test(id int primary key, name varchar);" + "insert into test values(1, 'Hello')");
result = client.get(url, "query.do?sql=create sequence test_sequence");
result = client.get(url, "query.do?sql=create schema test_schema");
result = client.get(url, "query.do?sql=" + "create view test_view as select * from test");
result = client.get(url, "tables.do");
result = client.get(url, "query.jsp");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "Hello");
result = client.get(url, "query.do?sql=select * from test");
result = client.get(url, "query.do?sql=@META select * from test");
assertContains(result, "typeName");
result = client.get(url, "query.do?sql=delete from test");
result = client.get(url, "query.do?sql=@LOOP 1000 " + "insert into test values(?, 'Hello ' || ?/*RND*/)");
assertContains(result, "1000 * (Prepared)");
result = client.get(url, "query.do?sql=select * from test");
result = client.get(url, "query.do?sql=@list select * from test");
assertContains(result, "Row #");
result = client.get(url, "query.do?sql=@parameter_meta " + "select * from test where id = ?");
assertContains(result, "INTEGER");
result = client.get(url, "query.do?sql=@edit select * from test");
assertContains(result, "editResult.do");
result = client.get(url, "query.do?sql=" + StringUtils.urlEncode("select space(100001) a, 1 b"));
assertContains(result, "...");
result = client.get(url, "query.do?sql=" + StringUtils.urlEncode("call '<&>'"));
assertContains(result, "<&>");
result = client.get(url, "query.do?sql=@HISTORY");
result = client.get(url, "getHistory.do?id=4");
assertContains(result, "select * from test");
result = client.get(url, "query.do?sql=delete from test");
// op 1 (row -1: insert, otherwise update): ok,
// 2: delete 3: cancel,
result = client.get(url, "editResult.do?sql=@edit " + "select * from test&op=1&row=-1&r-1c1=1&r-1c2=Hello");
assertContains(result, "1");
assertContains(result, "Hello");
result = client.get(url, "editResult.do?sql=@edit " + "select * from test&op=1&row=1&r1c1=1&r1c2=Hallo");
assertContains(result, "1");
assertContains(result, "Hallo");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "1");
assertContains(result, "Hallo");
result = client.get(url, "editResult.do?sql=@edit " + "select * from test&op=2&row=1");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "no rows");
// autoComplete
result = client.get(url, "autoCompleteList.do?query=select 'abc");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=select 'abc''");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=select 'abc' ");
assertContains(StringUtils.urlDecode(result), "||");
result = client.get(url, "autoCompleteList.do?query=select 'abc' |");
assertContains(StringUtils.urlDecode(result), "|");
result = client.get(url, "autoCompleteList.do?query=select 'abc' || ");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=call timestamp '2");
assertContains(result, "20");
result = client.get(url, "autoCompleteList.do?query=call time '1");
assertContains(StringUtils.urlDecode(result), "12:00:00");
result = client.get(url, "autoCompleteList.do?query=" + "call timestamp '2001-01-01 12:00:00.");
assertContains(result, "nanoseconds");
result = client.get(url, "autoCompleteList.do?query=" + "call timestamp '2001-01-01 12:00:00.00");
assertContains(result, "nanoseconds");
result = client.get(url, "autoCompleteList.do?query=" + "call $$ hello world");
assertContains(StringUtils.urlDecode(result), "$$");
result = client.get(url, "autoCompleteList.do?query=alter index ");
assertContains(StringUtils.urlDecode(result), "character");
result = client.get(url, "autoCompleteList.do?query=alter index idx");
assertContains(StringUtils.urlDecode(result), "character");
result = client.get(url, "autoCompleteList.do?query=alter index \"IDX_");
assertContains(StringUtils.urlDecode(result), "\"");
result = client.get(url, "autoCompleteList.do?query=alter index \"IDX_\"\"");
assertContains(StringUtils.urlDecode(result), "\"");
result = client.get(url, "autoCompleteList.do?query=help ");
assertContains(result, "anything");
result = client.get(url, "autoCompleteList.do?query=help select");
assertContains(result, "anything");
result = client.get(url, "autoCompleteList.do?query=call ");
assertContains(result, "0x");
result = client.get(url, "autoCompleteList.do?query=call 0");
assertContains(result, ".");
result = client.get(url, "autoCompleteList.do?query=se");
assertContains(result, "select");
assertContains(result, "set");
result = client.get(url, "tables.do");
assertContains(result, "TEST");
result = client.get(url, "autoCompleteList.do?query=" + "select * from ");
assertContains(result, "test");
result = client.get(url, "autoCompleteList.do?query=" + "select * from test t where t.");
assertContains(result, "id");
result = client.get(url, "autoCompleteList.do?query=" + "select id x from test te where t");
assertContains(result, "te");
result = client.get(url, "autoCompleteList.do?query=" + "select * from test where name = '");
assertContains(StringUtils.urlDecode(result), "'");
result = client.get(url, "autoCompleteList.do?query=" + "select * from information_schema.columns where columns.");
assertContains(result, "column_name");
result = client.get(url, "query.do?sql=delete from test");
// special commands
result = client.get(url, "query.do?sql=@autocommit_true");
assertContains(result, "Auto commit is now ON");
result = client.get(url, "query.do?sql=@autocommit_false");
assertContains(result, "Auto commit is now OFF");
result = client.get(url, "query.do?sql=@cancel");
assertContains(result, "There is currently no running statement");
result = client.get(url, "query.do?sql=@generated insert into test(id) values(test_sequence.nextval)");
assertContains(result, "<tr><th>ID</th></tr><tr><td>1</td></tr>");
result = client.get(url, "query.do?sql=@maxrows 2000");
assertContains(result, "Max rowcount is set");
result = client.get(url, "query.do?sql=@password_hash user password");
assertContains(result, "501cf5c163c184c26e62e76d25d441979f8f25dfd7a683484995b4a43a112fdf");
result = client.get(url, "query.do?sql=@sleep 1");
assertContains(result, "Ok");
result = client.get(url, "query.do?sql=@catalogs");
assertContains(result, "PUBLIC");
result = client.get(url, "query.do?sql=@column_privileges null null null TEST null");
assertContains(result, "PRIVILEGE");
result = client.get(url, "query.do?sql=@cross_references null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url, "query.do?sql=@exported_keys null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url, "query.do?sql=@imported_keys null null null TEST");
assertContains(result, "PKTABLE_NAME");
result = client.get(url, "query.do?sql=@primary_keys null null null TEST");
assertContains(result, "PK_NAME");
result = client.get(url, "query.do?sql=@procedures null null null");
assertContains(result, "PROCEDURE_NAME");
result = client.get(url, "query.do?sql=@procedure_columns");
assertContains(result, "PROCEDURE_NAME");
result = client.get(url, "query.do?sql=@schemas");
assertContains(result, "PUBLIC");
result = client.get(url, "query.do?sql=@table_privileges");
assertContains(result, "PRIVILEGE");
result = client.get(url, "query.do?sql=@table_types");
assertContains(result, "SYSTEM TABLE");
result = client.get(url, "query.do?sql=@type_info");
assertContains(result, "CLOB");
result = client.get(url, "query.do?sql=@version_columns");
assertContains(result, "PSEUDO_COLUMN");
result = client.get(url, "query.do?sql=@attributes");
assertContains(result, "Feature not supported: "attributes"");
result = client.get(url, "query.do?sql=@super_tables");
assertContains(result, "SUPERTABLE_NAME");
result = client.get(url, "query.do?sql=@super_types");
assertContains(result, "Feature not supported: "superTypes"");
result = client.get(url, "query.do?sql=@prof_start");
assertContains(result, "Ok");
result = client.get(url, "query.do?sql=@prof_stop");
assertContains(result, "Top Stack Trace(s)");
result = client.get(url, "query.do?sql=@best_row_identifier null null TEST");
assertContains(result, "SCOPE");
assertContains(result, "COLUMN_NAME");
assertContains(result, "ID");
result = client.get(url, "query.do?sql=@udts");
assertContains(result, "CLASS_NAME");
result = client.get(url, "query.do?sql=@udts null null null 1,2,3");
assertContains(result, "CLASS_NAME");
result = client.get(url, "query.do?sql=@LOOP 10 " + "@STATEMENT insert into test values(?, 'Hello')");
result = client.get(url, "query.do?sql=select * from test");
assertContains(result, "8");
result = client.get(url, "query.do?sql=@EDIT select * from test");
assertContains(result, "editRow");
result = client.get(url, "query.do?sql=@AUTOCOMMIT TRUE");
result = client.get(url, "query.do?sql=@AUTOCOMMIT FALSE");
result = client.get(url, "query.do?sql=@TRANSACTION_ISOLATION");
result = client.get(url, "query.do?sql=@SET MAXROWS 1");
result = client.get(url, "query.do?sql=select * from test order by id");
result = client.get(url, "query.do?sql=@SET MAXROWS 1000");
result = client.get(url, "query.do?sql=@TABLES");
assertContains(result, "TEST");
result = client.get(url, "query.do?sql=@COLUMNS null null TEST");
assertContains(result, "ID");
result = client.get(url, "query.do?sql=@INDEX_INFO null null TEST");
assertContains(result, "PRIMARY");
result = client.get(url, "query.do?sql=@CATALOG");
assertContains(result, "PUBLIC");
result = client.get(url, "query.do?sql=@MEMORY");
assertContains(result, "Used");
result = client.get(url, "query.do?sql=@INFO");
assertContains(result, "getCatalog");
result = client.get(url, "logout.do");
result = client.get(url, "login.do?driver=org.h2.Driver&" + "url=jdbc:h2:mem:" + getTestName() + "&user=sa&password=sa&name=_test_");
result = client.get(url, "logout.do");
result = client.get(url, "settingRemove.do?name=_test_");
client.get(url, "admin.do");
} finally {
server.shutdown();
}
}
Aggregations