Olá pessoal,
Estou usando HSQLDB, mas me surgiu uma dúvida, como faço para criar uma tabela somente se ela não existe?
O HSQLDB não tem suporte a "CREATE TABLE IF NOT EXISTS … ".
Alguém sabe como faço para fazer algo parecido?
Obrigado, até mais!
Olá pessoal,
Estou usando HSQLDB, mas me surgiu uma dúvida, como faço para criar uma tabela somente se ela não existe?
O HSQLDB não tem suporte a "CREATE TABLE IF NOT EXISTS … ".
Alguém sabe como faço para fazer algo parecido?
Obrigado, até mais!
Tendo a connection, vc pode retornar todas as tables do banco num ResultSet
Connection connection = ...;
DatabaseMetaData dbData = connection.getMetaData();
ResultSet tables = dbData.getTables("catalog", "schema", null, null);
Olá fabiofalci,
Eu acho que estava indo pelo caminho certo então, eu tava usando DatabaseMetaData, mas acho que eu não soube manipular o ResultSet de forma correta para montar a condição, estou postando meu código, teria como me dar mais uma força com isso? Me chateei com essa limitação do HSQLDB.
Veja meu código, ta rodando tudo certinho, sem exceptions. Tem alguma coisa errada aí? Eu entendo que quando rodasse o código na primeira vez deveria ter como saída: TABELA NAO EXISTE!!! e em seguida criaria a tabela e inseriria os dados, até aí tudo bem, acontece sem erro, mas nas vezes seguintes deveria ter como saída: TABELA EXISTE!!!, mas não, cai sempre no ELSE.
import java.sql.*;
public class BancoDeDados{
public BancoDeDados(){
try{
Class.forName("org.hsqldb.jdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:hsqldb:file:db/banco","SA","");
Statement stm = conn.createStatement();
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet tabelas = dbmd.getTables(null, null, "dicas", null);
if(tabelas.next()){
System.out.println("TABELA EXISTE!!!");
}else{
System.out.println("TABELA NAO EXISTE!!!");
stm.executeUpdate("CREATE TEXT TABLE dicas (pri BIGINT NOT NULL IDENTITY, codigo CHAR(3), dica VARCHAR(200))");
stm.execute("SET TABLE dicas SOURCE 'dicas.csv'");
System.out.println("TABELA CRIADA!!!");
}
stm.executeUpdate("INSERT INTO dicas(codigo, dica) VALUES('ABC', 'Delano')");
System.out.println("TABELA POPULADA!!!");
stm.executeUpdate("INSERT INTO dicas(codigo, dica) VALUES('DEF', 'Lima')");
System.out.println("TABELA POPULADA!!!");
ResultSet rs = stm.executeQuery("SELECT * FROM dicas");
System.out.println("CODIGO\tNOME");
while(rs.next())
System.out.println(rs.getString("codigo") +"\t"+rs.getString("dica"));
}catch(SQLException e){
System.out.println("FALHOU!!!");
}catch(ClassNotFoundException e){
System.out.println("Problema ao buscar Drive!!!");
}
}
public static void main(String args[]){
BancoDeDados app = new BancoDeDados();
}
}
EDIT: Fiz algumas modificações, mas não interferem muito no meu problema, agora resolvi outro problema que estava tendo, mas ainda assim não consigo detectar a presença da tabela. Estou inserindo dados e acessando a tabela e agora é uma tabela em modo texto. Agora só falta resolver esse problema com relação a criar a tabela apenas quando necessário.
Desde já agradeço pela ajuda... Abraço!