Criando Tabelas SQL [RESOLVIDO]

Bom dia,

eu preciso criar o banco de dados e as tabelas do banco quando abro o programa pela primeira vez. Ele instala, roda mas não cria as tabelas e nem o banco. Alguém poderia me dizer o que está errado com o código ou como que faço da forma correta? Obrigado.

	            	String sqlcreate = "CREATE DATABASE DBAllure";
	            	String sqluse = "USE DBAllure";
	            	String sqlagenda = "CREATE TABLE agenda ( idagenda integer NOT NULL, idcliente integer NOT NULL, " +
	            			"agenome character varying(15) NOT NULL, agesobrenome character varying(30) NOT NULL, " +
	            			"agedata date NOT NULL, agehora time without time zone NOT NULL, CONSTRAINT idagenda_pk PRIMARY KEY (idagenda ))";
	            	String sqlclientes = "CREATE TABLE clientes ( idcliente integer NOT NULL, clinome character varying(15) NOT NULL, " +
	            			"clisobrenome character varying(30) NOT NULL, clidatanasc date NOT NULL, clirg character varying(20) NOT NULL, " +
	            			"cliuf character varying(2) NOT NULL, clicep character varying(10), clicidade character varying(40), " +
	            			"clibairro character varying(40), clirua character varying(40), clinumero integer, " +
	            			"clicomplemento character varying(40), clitelres character varying(14), clitelcel character varying(14), " +
	            			"clitelcom character varying(14), cliplanodesaude character varying(40) NOT NULL, cliemail character varying(40), " +
	            			"cliobservacao character varying(400), CONSTRAINT clientes_pkey PRIMARY KEY (idcliente ))";
	            	String sqlconsultas = "CREATE TABLE consultas ( idconsulta integer NOT NULL, idcliente integer NOT NULL," +
	            			"condata date NOT NULL, conhora time without time zone NOT NULL, conobservacao character varying(400), " +
	            			"CONSTRAINT consultas_pkey PRIMARY KEY (idconsulta ))";
	            	String sqllogin = "CREATE TABLE login ( idlogin integer NOT NULL, logaccount character varying(20) NOT NULL, " +
	            			"logpassword character varying(20) NOT NULL, acesso integer, CONSTRAINT login_pkey PRIMARY KEY (idlogin ))";
	            	String sqlplanos = "CREATE TABLE planos ( idplano integer NOT NULL, nomeplano character varying(30) NOT NULL, " +
	            			"CONSTRAINT pk_planos PRIMARY KEY (idplano ))";
	            	String sqlresponsavel = "CREATE TABLE responsavel ( idresponsavel integer NOT NULL, idcliente integer NOT NULL, " +
	            			"respnome character varying(40) NOT NULL, respsobrenome character varying(40) NOT NULL, respdatanasc date NOT NULL, " +
	            			"resprg character varying(20) NOT NULL, respuf character varying(2) NOT NULL, respcep character varying(10), " +
	            			"respcidade character varying(40), respbairro character varying(40), resprua character varying(40), " +
	            			"respnumero integer, respcomplemento character varying(40), resptelres character varying(14), " +
	            			"resptelcel character varying(14), resptelcom character varying(14), respemail character varying(40), " +
	            			"respobservacao character varying(400), CONSTRAINT responsavel_pkey PRIMARY KEY (idresponsavel ))";
	            	try {
	            		JOptionPane.showMessageDialog(null, "Chegou até aqui");
						           s.execute(sqlcreate);
						           s.execute(sqluse);
						           s.execute(sqlagenda);
						           s.execute(sqlclientes);
						           s.execute(sqlconsultas);
						           s.execute(sqllogin);
						           s.execute(sqlplanos);
						           s.execute(sqlresponsavel);
						          JOptionPane.showMessageDialog(null, "Chegou até aqui também");
					            } catch (SQLException e) {
						          e.printStackTrace();
					            }

lucaslzl ,
como vc tá abrindo a conexão com seu BD?Qual o BD?s é seu statement?

Dica: use hibernate
=]

“s” é o statement, estou utilizando o banco PostgreSql. Esse código eh de catch, se ele não conseguir conectar com o banco ele deveria criar o banco e as tabelas.

O código da classe:

package utilitarios;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;

public class Connect {

	 final private String driver = "org.postgresql.Driver";
	 final private String url = "jdbc:postgresql://localhost:5432/DBAllure";
	 final private String usuario = "postgres";
     final private String senha = "root";
     private Connection conexao;
     public Statement s;
     public ResultSet r;
	

     public boolean conecta()
     {
         boolean result = true;
         try
         {
             Class.forName(driver);
             conexao = DriverManager.getConnection(url, usuario, senha);
             //JOptionPane.showMessageDialog(null, "Conectou com o banco de dados");
         }
         catch(ClassNotFoundException Driver)
         {
             JOptionPane.showMessageDialog(null, "Driver nao localizado: "+Driver);
             result = false;
         }
         catch(SQLException Fonte)
         {
            // JOptionPane.showMessageDialog(null, "Deu erro na conexão "+ 
            //         "com a fonte de dados"+Fonte);
             result = false;
             String conecao = "Dejesa criar as tabelas do banco de dados?";
             int opcao_escolhida = JOptionPane.showConfirmDialog(null, conecao, " ", JOptionPane.YES_NO_OPTION);
	            if (opcao_escolhida == JOptionPane.YES_OPTION)
	            {
	            	String sqlcreate = "CREATE DATABASE DBAllure";
	            	String sqluse = "USE DBAllure";
	            	String sqlagenda = "CREATE TABLE agenda ( idagenda integer NOT NULL, idcliente integer NOT NULL, " +
	            			"agenome character varying(15) NOT NULL, agesobrenome character varying(30) NOT NULL, " +
	            			"agedata date NOT NULL, agehora time without time zone NOT NULL, CONSTRAINT idagenda_pk PRIMARY KEY (idagenda ))";
	            	String sqlclientes = "CREATE TABLE clientes ( idcliente integer NOT NULL, clinome character varying(15) NOT NULL, " +
	            			"clisobrenome character varying(30) NOT NULL, clidatanasc date NOT NULL, clirg character varying(20) NOT NULL, " +
	            			"cliuf character varying(2) NOT NULL, clicep character varying(10), clicidade character varying(40), " +
	            			"clibairro character varying(40), clirua character varying(40), clinumero integer, " +
	            			"clicomplemento character varying(40), clitelres character varying(14), clitelcel character varying(14), " +
	            			"clitelcom character varying(14), cliplanodesaude character varying(40) NOT NULL, cliemail character varying(40), " +
	            			"cliobservacao character varying(400), CONSTRAINT clientes_pkey PRIMARY KEY (idcliente ))";
	            	String sqlconsultas = "CREATE TABLE consultas ( idconsulta integer NOT NULL, idcliente integer NOT NULL," +
	            			"condata date NOT NULL, conhora time without time zone NOT NULL, conobservacao character varying(400), " +
	            			"CONSTRAINT consultas_pkey PRIMARY KEY (idconsulta ))";
	            	String sqllogin = "CREATE TABLE login ( idlogin integer NOT NULL, logaccount character varying(20) NOT NULL, " +
	            			"logpassword character varying(20) NOT NULL, acesso integer, CONSTRAINT login_pkey PRIMARY KEY (idlogin ))";
	            	String sqlplanos = "CREATE TABLE planos ( idplano integer NOT NULL, nomeplano character varying(30) NOT NULL, " +
	            			"CONSTRAINT pk_planos PRIMARY KEY (idplano ))";
	            	String sqlresponsavel = "CREATE TABLE responsavel ( idresponsavel integer NOT NULL, idcliente integer NOT NULL, " +
	            			"respnome character varying(40) NOT NULL, respsobrenome character varying(40) NOT NULL, respdatanasc date NOT NULL, " +
	            			"resprg character varying(20) NOT NULL, respuf character varying(2) NOT NULL, respcep character varying(10), " +
	            			"respcidade character varying(40), respbairro character varying(40), resprua character varying(40), " +
	            			"respnumero integer, respcomplemento character varying(40), resptelres character varying(14), " +
	            			"resptelcel character varying(14), resptelcom character varying(14), respemail character varying(40), " +
	            			"respobservacao character varying(400), CONSTRAINT responsavel_pkey PRIMARY KEY (idresponsavel ))";
	            	try {
	            		JOptionPane.showMessageDialog(null, "Chegou até aqui");
						s.execute(sqlcreate);
						s.execute(sqluse);
						s.execute(sqlagenda);
						s.execute(sqlclientes);
						s.execute(sqlconsultas);
						s.execute(sqllogin);
						s.execute(sqlplanos);
						s.execute(sqlresponsavel);
						JOptionPane.showMessageDialog(null, "Chegou até aqui também");
					} catch (SQLException e) {
						e.printStackTrace();
					}
	            }
         }
      return result;
     }
     
     public void desconecta()
     {
         try 
         {
             conexao.close();
             //JOptionPane.showMessageDialog(null, "Banco Fechado");
         }
         catch(SQLException Fonte)
         {
             JOptionPane.showMessageDialog(null, "Não foi possivel fechar o banco de dados");
         }
     }
     
     public void executeSQL(String sql)
     {
         try
         {
             s = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
             r = s.executeQuery(sql);                
         }
         catch(SQLException sqlex)
         {
             JOptionPane.showMessageDialog(null, "Não foi possivel "+
                     "executar o comando SQL"+sqlex);
         }
     }   
}

qual o erro, o que acontece?

Não dá erro, ele apenas não cria. E, não sei se tem algo errado, ou faltou eu fazer algo no código.

Ja garantiu que ele lança o SQLException na hora de conectar?

opa…
Onde vc cria o objeto statement? …
vc tentou conectar com banco de dados…
deu uma SQLExpcetion… mas nao vi vc criando o
statement… deveria ter dado null pointer ne?
dshuasdhuads

Na linha 18 eu crio o statement.

nao, vc nao criou o Statement na linha 18.
APenas declarou

Como que crio o statement?

Sugiro que leia algum tutorial sobre conexão com banco de dados em java (JDBC no caso)…

acho que:

http://docs.oracle.com/javase/tutorial/jdbc/basics/processingsqlstatements.html

rresolve para o teu caso :slight_smile:

ao invés de usar o

 s.execute(sqlcreate);  

use o método que vc criou:

public void executeSQL(sqlcreate)  

Tudo bem vou testar. Muito obrigado! :slight_smile:

Bom dia Polverini e Lucas

Eu passei por isso …

depois de tanto tentar …

  • no Mysql percebi que tem um banco de configurações no proprio banco, isso quando instala o Mysql ele cria … mysql, test, “tipo um banco padrao de instalação”

Então já que tem um banco … fiz o seguinte;

1 - fiz conexao com o banco mysql, (apenas para ter uma sessão de acesso)
2 - feito isso posso executar CREATE DATABASE … , create table … ETC

ve se ajuda

Eu fiz isso, ele conecta no banco padrão do PostgreeSql mas, ele não cria as tabelas. Quando o usuario carrega o programa ele testa se existe um arquivo (se não existir é porque é a primeira vez que roda o programa).

Código de criação de tabelas:

				if (regi.criar() == 1){
					new Login().setVisible(true);
		        	dispose();
				}
				else{
					String conecao = "Dejesa criar as tabelas do banco de dados?";
		             int opcao_escolhida = JOptionPane.showConfirmDialog(null, conecao, " ", JOptionPane.YES_NO_OPTION);
			            if (opcao_escolhida == JOptionPane.YES_OPTION)
			            {
			            	String sqlcreate = "CREATE DATABASE DBAllure";
			            	String sqluse = "USE DBAllure";
			            	String sqlagenda = "CREATE TABLE agenda ( idagenda integer NOT NULL, idcliente integer NOT NULL, " +
			            			"agenome character varying(15) NOT NULL, agesobrenome character varying(30) NOT NULL, " +
			            			"agedata date NOT NULL, agehora time without time zone NOT NULL, CONSTRAINT idagenda_pk PRIMARY KEY (idagenda ))";
			            	String sqlclientes = "CREATE TABLE clientes ( idcliente integer NOT NULL, clinome character varying(15) NOT NULL, " +
			            			"clisobrenome character varying(30) NOT NULL, clidatanasc date NOT NULL, clirg character varying(20) NOT NULL, " +
			            			"cliuf character varying(2) NOT NULL, clicep character varying(10), clicidade character varying(40), " +
			            			"clibairro character varying(40), clirua character varying(40), clinumero integer, " +
			            			"clicomplemento character varying(40), clitelres character varying(14), clitelcel character varying(14), " +
			            			"clitelcom character varying(14), cliplanodesaude character varying(40) NOT NULL, cliemail character varying(40), " +
			            			"cliobservacao character varying(400), CONSTRAINT clientes_pkey PRIMARY KEY (idcliente ))";
			            	String sqlconsultas = "CREATE TABLE consultas ( idconsulta integer NOT NULL, idcliente integer NOT NULL," +
			            			"condata date NOT NULL, conhora time without time zone NOT NULL, conobservacao character varying(400), " +
			            			"CONSTRAINT consultas_pkey PRIMARY KEY (idconsulta ))";
			            	String sqllogin = "CREATE TABLE login ( idlogin integer NOT NULL, logaccount character varying(20) NOT NULL, " +
			            			"logpassword character varying(20) NOT NULL, acesso integer, CONSTRAINT login_pkey PRIMARY KEY (idlogin ))";
			            	String sqlplanos = "CREATE TABLE planos ( idplano integer NOT NULL, nomeplano character varying(30) NOT NULL, " +
			            			"CONSTRAINT pk_planos PRIMARY KEY (idplano ))";
			            	String sqlresponsavel = "CREATE TABLE responsavel ( idresponsavel integer NOT NULL, idcliente integer NOT NULL, " +
			            			"respnome character varying(40) NOT NULL, respsobrenome character varying(40) NOT NULL, respdatanasc date NOT NULL, " +
			            			"resprg character varying(20) NOT NULL, respuf character varying(2) NOT NULL, respcep character varying(10), " +
			            			"respcidade character varying(40), respbairro character varying(40), resprua character varying(40), " +
			            			"respnumero integer, respcomplemento character varying(40), resptelres character varying(14), " +
			            			"resptelcel character varying(14), resptelcom character varying(14), respemail character varying(40), " +
			            			"respobservacao character varying(400), CONSTRAINT responsavel_pkey PRIMARY KEY (idresponsavel ))";
			            	
			            		JOptionPane.showMessageDialog(null, "Chegou até aqui");
								try {								
									con_progress.s.execute(sqlcreate);
									con_progress.s.execute(sqluse);
									con_progress.s.execute(sqlagenda);
									con_progress.s.execute(sqlclientes);
									con_progress.s.execute(sqlconsultas);
									con_progress.s.execute(sqllogin);
									con_progress.s.execute(sqlplanos);
									con_progress.s.execute(sqlresponsavel);
									JOptionPane.showMessageDialog(null, "Chegou até aqui também");
								} catch (SQLException e) {
									JOptionPane.showMessageDialog(null, ""+e);
								}
			            }

Sabem se eu fiz algo errado no código? Tentei colocar “executeSql” mas não funciona, dá erro mesmo antes de compilar.

Código da classe connect:

       public class Connect {

	 final private String driver = "org.postgresql.Driver";
	 final private String url = "jdbc:postgresql://localhost:5432/postgres";
	 final private String usuario = "postgres";
     final private String senha = "root";
     private Connection conexao;
     public Statement s = null;
     public ResultSet r;

     Values val_connect = new Values();
     
     public boolean conecta()
     {
         boolean result = true;
         try
         {
             Class.forName(driver);
             conexao = DriverManager.getConnection(url, usuario, senha);
             JOptionPane.showMessageDialog(null, "Conectou com o banco de dados");
         }
         catch(ClassNotFoundException Driver)
         {
             JOptionPane.showMessageDialog(null, "Driver nao localizado: "+Driver);
             result = false;
         }
         catch(SQLException Fonte)
         {
             JOptionPane.showMessageDialog(null, "Deu erro na conexão "+ 
                    "com a fonte de dados"+Fonte);
             result = false;
         }
      return result;
     }
     
     public void desconecta()
     {
         try 
         {
             conexao.close();
             //JOptionPane.showMessageDialog(null, "Banco Fechado");
         }
         catch(SQLException Fonte)
         {
             JOptionPane.showMessageDialog(null, "Não foi possivel fechar o banco de dados");
         }
     }  
     
     public void executeSQL(String sql)
     {
         try
         {
             s = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
             r = s.executeQuery(sql);                
         }
         catch(SQLException sqlex)
         {
             JOptionPane.showMessageDialog(null, "Não foi possivel "+
                     "executar o comando SQL"+sqlex);
         }
     } 
}

Era melhor você seguir a dica do nosso amigo d34d_d3v1l, usar hibernate. Mas, um dia passei por isso e fiz quase uma ‘gambí’, criei as tabelas no bd, logo em seguida efetuei um backup e, a primeira vez que executava o programa restaurava o backup. Mas siga a dica citada acima.