org.apache.jena.sdb.sql.TableUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jena-sdb Show documentation
Show all versions of jena-sdb Show documentation
SDB is a persistence layer for use with Apache Jena that uses an SQL database to store triples/quads.
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.sdb.sql;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class TableUtils
{
public static void dump(SDBConnection conn, String tableName)
{
ResultSetJDBC tableData = null ;
try {
tableData = conn.execQuery("SELECT * FROM "+tableName) ;
RS.printResultSet(tableData.get()) ;
tableData.close() ;
} catch (SQLException ex)
{ throw new SDBExceptionSQL(ex) ; }
finally { RS.close(tableData) ; }
}
public static void dump(Connection conn, String tableName)
{
try {
Statement s = conn.createStatement() ; // Not closed - happens when result set closed
try ( ResultSet tableData = s.executeQuery("SELECT * FROM "+tableName) ) {
RS.printResultSet(tableData) ;
tableData.close() ;
}
} catch (SQLException ex)
{ throw new SDBExceptionSQL(ex) ; }
}
/** Does this table exist?
*
* @throws SQLException */
public static boolean hasTable(Connection connection, String table, String... types) throws SQLException
{
if (types.length == 0) types = null;
// MySQL bug -- doesn't see temporary tables!
// Postgres likes lowercase -- I'll try all options
boolean hasTable = false ;
try ( ResultSet tableData = connection.getMetaData().getTables(null, null, table, types)) {
hasTable = tableData.next();
}
if (!hasTable) { // Try lowercase
try ( ResultSet tableData = connection.getMetaData().getTables(null, null, table.toLowerCase(), types) ) {
hasTable = tableData.next();
}
}
if (!hasTable) { // Try uppercase
try ( ResultSet tableData = connection.getMetaData().getTables(null, null, table.toUpperCase(), types) ) {
hasTable = tableData.next();
}
}
return hasTable;
}
public static boolean hasTable(SDBConnectionHolder holder, String table, String... types) throws SQLException {
return hasTable(holder.connection().getSqlConnection(), table, types);
}
/** Get the names of the application tables */
public static List getTableNames(Connection connection)
{
return getTableNames(connection, "TABLE") ;
}
/** Get the names of the tables of a particular type*/
public static List getTableNames(Connection connection, String tableTypeName)
{
try {
List tableNames = new ArrayList() ;
ResultSet rs = connection.getMetaData().getTables(null, null, null, new String[]{tableTypeName});
while(rs.next())
{
String tableName = rs.getString("TABLE_NAME");
// String tableType = rs.getString("TABLE_TYPE");
// if ( tableType.equalsIgnoreCase("TABLE") )
tableNames.add(tableName) ;
}
return tableNames ;
} catch (SQLException ex) { throw new SDBExceptionSQL(ex) ; }
}
/** Get the size of a table (usually called 'Triples') **/
public static long getTableSize(Connection connection, String table)
{
long size = -1;
try ( ResultSet res = connection.createStatement().executeQuery("SELECT COUNT(*) FROM " + table) ) {
if (res.next())
size = res.getLong(1);
} catch (SQLException e) { throw new SDBExceptionSQL(e) ; }
return size;
}
public static void dropTable(SDBConnection connection, String tableName)
{
try {
if (TableUtils.hasTable(connection.getSqlConnection(), tableName))
connection.execSilent("DROP TABLE "+tableName) ;
} catch (SQLException ex)
{ throw new SDBExceptionSQL("SQLException : Can't drop table: "+tableName, ex) ; }
}
public static void dropTableSilent(SDBConnection connection, String tableName)
{
connection.execSilent("DROP TABLE "+tableName) ;
}
}