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
Verificar a existência de um Banco SQL. Ajuda
28 Respostas
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...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);
}
}
}
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", "");
}
}
}
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.
eu criei uma classe CriaConexao e o código ta assim: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", ""); } } }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?
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).
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");
}
}
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 normalimport 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;
}
}
}
É 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;"
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);
}
}
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.
Quer uma classe que teste o banco,se está conectado?
Tenho que sair se for isso :
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);
}
}
}
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.
a Exception :
Exception in thread "main" java.lang.NullPointerException
at DAO.contatoDAO.criarTabela(contatoDAO.java:92)
at DAO.contatoDAO.insert(contatoDAO.java:22)
at sysi.Main.main(Main.java:43)
Java Result: 1
galera ja tentei de tudo e continua dando erro.... vo postar as classes
package Conexao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* @author Igor Gottschalg
*/
public class CriaConexao {
public static Connection getConexao() throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Conexao estabelicida");
return DriverManager.getConnection("jdbc:mysql://localhost/sysi", "root", "gotts32");
} catch (ClassNotFoundException e) {
throw new SQLException(e.getMessage());
}
}
}
package DAO;
import Conexao.CriaConexao;
import Objeto.contato;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Igor Gottschalg
*/
public class ContatoDAO {
private Connection conexao;
public void ContatoDAO() throws SQLException {
this.conexao = CriaConexao.getConexao();
}
public void insert(contato c) throws SQLException {
criarTabela();
String sql = "INSERT INTO agenda (nome,endereco,telefone,email,webpage,comentario) VALUES (?,?,?,?,?,?)";
PreparedStatement stmt = conexao.prepareStatement(sql);
stmt.setString(1, c.getNome());
stmt.setString(2, c.getEndereco());
stmt.setString(3, c.getTelefone());
stmt.setString(4, c.getEmail());
stmt.setString(5, c.getWebpage());
stmt.setString(6, c.getComentario());
stmt.execute();
stmt.close();
}
public void update(contato c) throws SQLException {
String sql = "UPDATE agenda SET nome=?, endereco=?, telefone=?, email=?, webpage=?, comentario=? WHERE id=?";
PreparedStatement stmt = conexao.prepareStatement(sql);
stmt.setString(1, c.getNome());
stmt.setString(2, c.getEndereco());
stmt.setString(3, c.getTelefone());
stmt.setString(4, c.getEmail());
stmt.setString(5, c.getWebpage());
stmt.setString(6, c.getComentario());
stmt.setInt(7, c.getId());
stmt.execute();
stmt.close();
}
public void delete(contato c) throws SQLException {
String sql = "DELETE FROM agenda WHERE id=?";
PreparedStatement stmt = conexao.prepareStatement(sql);
stmt.setInt(1, c.getId());
stmt.execute();
stmt.close();
}
public List<contato> getlist(String search) throws SQLException {
String sql = "SELECT * FROM agenda WHERE nome LIKE ?";
PreparedStatement stmt = conexao.prepareStatement(sql);
stmt.setString(1, search);
ResultSet rs = stmt.executeQuery();
List<contato> mylist = new ArrayList<contato>();
while (rs.next()) {
contato c1 = new contato();
c1.setNome(rs.getString("nome"));
c1.setEndereco(rs.getString("endereco"));
c1.setTelefone(rs.getString("telefone"));
c1.setEmail(rs.getString("email"));
c1.setWebpage(rs.getString("webpage"));
c1.setComentario(rs.getString("comentario"));
mylist.add(c1);
}
rs.close();
stmt.close();
return mylist;
}
public void criarTabela() throws SQLException {
String sql = "CREATE TABLE IF NOT EXISTS agenda (id INT(11) NOT NULL AUTO_INCREMENT,nome VARCHAR (100),endereco TEXT,telefone TEXT,email VARCHAR (100),webpage VARCHAR (100),comentario VARCHAR (250),PRIMARY KEY (id))";
Statement s = conexao.createStatement();
s.execute(sql);
s.close();
}
}
Oi,
As vezes o problema está no banco e não no código,que banco vc usa…
to usando o [color=red]MYSQL[/color]
mas o estranho que no metodo main eu verifico se o banco existe, e se não ele cria o banco. Isso ta funcionando, mas na depois quando vo conectar para fazer qualquer operação ele da erro, de ponteiro nulo…é muito estranha…pq ele faz uma conexao certa, e a outra da erro
Desculpe mas nunca usei mysql,achei estranho os seus campos tipo text por isso perguntei,mas deve ser do mysql. :roll:
Mas banco as vezes da trabalho mesmo,vc já tem dados inseridos se não tiver,insere alguns direto no banco e testa novamente…
blz…ainda não tinha tentado… vo inserir e depois posto aki o resultado…vlw
O problema é que não se declara tipo de retorno em construtor. Portanto seu objeto contatoDAO deve estar sendo construído com o construtor padrão, deixando sua variável conexão com ponteiro nulo, por isso a exceção.
Retire o tipo de retorno do seu construtor
public ContatoDAO() throws SQLException { //Retire a declaração void
this.conexao = CriaConexao.getConexao();
}
Eric Yuzo deu certo… eu nem tinha percebido isso, vlw pela ajuda…
Galera agora estou com outro problema…
Tenha uma jTabbedPane com várias abas, com as letras do alfabeto.
dentro de cada aba tenha um jLabel com o nome de jA (até jA24).
preciso que quando eu clicar na aba ele altere o texto da jLabel correspondente da aba.
pensei nisto
jTabbedPane1.getComponentAt(jTabbedPane1.getSelectedIndex()).getName();
da certo?