Verificar a existência de um Banco SQL. Ajuda

Fala galera.
Estou com uma pequena dúvida. Como faço para verificar se existe um banco de dados [color=blue]SQL [/color]e uma tabela? Caso não exista irei criar eles…
Teria como verificar com algum código [color=orange]JAVA[/color]?
vlw

Você pode tentar utilizar meta data para listar as informações.

Segue um exemplo básico para listar as bases de dados:

//Abre a conexão. Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/","root", "root"); //Trabalho com Meta Data. DatabaseMetaData metaData = conn.getMetaData(); ResultSet rs = metaData.getCatalogs(); while (rs.next()) { System.out.println(rs.getString(1)); }Para listar as tabelas utilize o método metaData.getTables e rs.getString(3):

ResultSet rs = metaData.getTables("nomeDoBanco", null, "%", null); while (rs.next()) { System.out.println(rs.getString(3)); }
Se quiser usar comandos específicos de um banco de dados como “show databases” e “show tables” do MySQL, um Statement comum dá conta do recado.

Não sei se eu entendi direito, mas também pode usar via SQL direto. Depois que conectou no banco, como o amigo mostrou acima você pode executar a seguinte SQL:

"create database if not exists nomedobanco;" //Cria o banco se ele nao existir. "create table if not exists nometabela (bla bla bla dos campos);" //Cria a tabela se ela nao existir.

Abraços

O que seia [color=blue]DatabaseMetaData metaData = conn.getMetaData(); [/color]

Como faço para conectar a um banco depois da conexão com o sql? Seia na hora de usar? ex: na hora de inserir.

Hoje estou com dificuldade para entender as duvidas :roll:

Se for o que estou pensando…[code]

package bancodedados;
import java.sql.*;
/**
*

  • @author
    */
    public class InsereBD
    {
    public static void main(String [] args)
    {
    BDConecta obj=new BDConecta();
    Connection idcon=null;
    idcon=obj.conexaoBD(“teste”);
    if(idcon != null)
    {
    //-----------------
    //criar uma tabela ataves de um comando sql
    //classe para comando: Statement
    try
    {
    Statement cmdsql = idcon.createStatement();

       cmdsql.executeUpdate("INSERT INTO tbLogin(idUsuario,nome,senha)VALUES(2,'Ana','123')");
    
       cmdsql.close();
       System.out.println("Dados foram inseridos com sucesso");
       }
       catch(SQLException ex)
       {
           System.out.println("Erro na criacao da tabela");
       }
       obj.desconexaoBD(idcon);
     }    
    

    }
    }[/code]

eu criei uma classe CriaConexao e o código ta assim:

[code]import java.sql.*;

public class CriaConexao {

public static Connection getConexao() throws SQLException {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Conexão com banco de dados concluída");
        return DriverManager.getConnection("jdbc:mysql://localhost/sysi", "root", "");
    } catch (ClassNotFoundException e) {
        String createdb = "CREATE database IF NOT EXISITS sysi;";
        Connection conn =  DriverManager.getConnection("jdbc:mysql://localhost/", "root", "");
        PreparedStatement s = conn.prepareStatement(createdb);
        s.execute();
        return DriverManager.getConnection("jdbc:mysql://localhost/sysi", "root", "");
    }
}

}
[/code]

pela teoria ele vai tentar conectar ao banco [color=blue]sysi[/color], se não conseguir ele vai cria-lo. Certo?

Será que vai dar certo?

Veja um pouco mais sobre MetaData neste artigo.

[quote=ipixxel]eu criei uma classe CriaConexao e o código ta assim:

[code]import java.sql.*;

public class CriaConexao {

public static Connection getConexao() throws SQLException {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Conexão com banco de dados concluída");
        return DriverManager.getConnection("jdbc:mysql://localhost/sysi", "root", "");
    } catch (ClassNotFoundException e) {
        String createdb = "CREATE database IF NOT EXISITS sysi;";
        Connection conn =  DriverManager.getConnection("jdbc:mysql://localhost/", "root", "");
        PreparedStatement s = conn.prepareStatement(createdb);
        s.execute();
        return DriverManager.getConnection("jdbc:mysql://localhost/sysi", "root", "");
    }
}

}
[/code]

pela teoria ele vai tentar conectar ao banco [color=blue]sysi[/color], se não conseguir ele vai cria-lo. Certo?

Será que vai dar certo?[/quote]
O ClassNotFoundException pode ser lançado pelo método Class.forName(). A exceção lançada pelo getConnection é um SQLException. Ao invés de declará-la, trate-a com o código que esta no catch (ClassNotFoundException e).

sim… erro meu

[code]import java.sql.*;

public class CriaConexao {

public static Connection getConexao() throws ClassNotFoundException, SQLException {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Conexão com banco de dados concluída");
        return DriverManager.getConnection("jdbc:mysql://localhost/sysi", "root", "gotts32");
    } catch (SQLException e) {
        String createdb = "CREATE database IF NOT EXISIST sysi;";
        Connection conn =  DriverManager.getConnection("jdbc:mysql://localhost/", "root", "gotts32");
        PreparedStatement s = conn.prepareStatement(createdb);
        s.execute();
        s.close();
        return DriverManager.getConnection("jdbc:mysql://localhost/sysi", "root", "gotts32");
    }
}[/code]

Agora deu certo?

ainda não… vo fazer o seguinte:

no metodo main vo verificar se exite o banco [color=blue]sysi[/color]. se ele não existir vo criar ele. E na classe CriaConexao vai ficar normal

[code]import java.sql.*;

public class CriaConexao {

public static Connection getConexao() throws SQLException {
    try {
        Class.forName("com.mysql.jdbc.Driver");
        return DriverManager.getConnection("jdbc:mysql://localhost/sysi", "root", "gotts32");
    } catch (ClassNotFoundException e) {
        System.out.println(e);
        System.out.println("erro");
        return null;
    }
}

}
[/code]
acho que vai ser mais fácil

É web ou desktop?Só uma perguntinha,pode parecer boba, vc criou o driver ?

Quero dizer a conecção ODBC…

desktop
criei…eu consegui conectar e fazer todas as operações…só nunca tinha tentado fazer essas verificações da existência de um banco antes de usalo.

Não é EXISIST e sim EXISTS.

String createdb = "CREATE database IF NOT EXISTS sysi;"

meu metodo main ta assim:

[code] public static void main(String[] args) {
int exsist =0;
try {
Class.forName(“com.mysql.jdbc.Driver”);
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost”, “root”, “gotts32”);
DatabaseMetaData metaData = conn.getMetaData();
ResultSet rs = metaData.getCatalogs();
while (rs.next()) {
System.out.println(rs.getString(1));
if(rs.getString(1).equals(“sysi”)){
exsist=1;
}
}
if (exsist==1){
Connection conexao = conn;
String sql = “CREATE DATABASE IF NOT EXISTS sysi”;
PreparedStatement stmt = conexao.prepareStatement(sql);
stmt.execute();
stmt.close();
}
} catch (SQLException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException e) {
System.out.println(e);
}

    contatoDAO dao =  new contatoDAO();
    contato c = new contato();
    c.setNome("Igor");
    try {
        dao.insert(c);
    } catch (SQLException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}[/code]

[quote=ipixxel]desktop
criei…eu consegui conectar e fazer todas as operações…só nunca tinha tentado fazer essas verificações da existência de um banco antes de usalo.[/quote]

Quer uma classe que teste o banco,se está conectado?

Tenho que sair se for isso :

[code]

package bancodedados;
import java.sql.*;
/**
*

  • @author 18693
    */
    public class TestaConexaoBD {
    public static void main(String [] args){
    BDConecta obj=new BDConecta();
    Connection idcon=null;
    idcon=obj.conexaoBD(“teste”);
    if(idcon != null)
    {
    obj.desconexaoBD(idcon);
    }
    }
    }[/code]

Boa sorte!

consegui galera… o código fico assim:

int exsist =0; try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost", "root", "gotts32"); Connection conexao = conn; String sql = "CREATE DATABASE IF NOT EXISTS sysi"; Statement stmt = conexao.createStatement(); stmt.execute(sql); stmt.close(); } catch (SQLException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException e) { System.out.println(e); }

vlw pela ajuda

galera o que ta de errado neste código:

public void criarTabela() throws SQLException{ String sql = "CREATE TABLE IF NOT EXISTS agenda (" + "id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT," + "nome VCHAR(100)," + "endereco TEXT," + "telefone TEXT," + "email VCHAR(100)," + "webpage VCHAR(100)," + "comentario VCHAR(250)," + "PRIMARY KEY (id)" + ")"; Statement stmt = conexao.createStatement(); stmt.execute(sql); stmt.close(); }

Tenta VARCHAR no lugar de VCHAR. Se não for isto poste poste a exceção.