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?
[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.