Delegar construtor através de um int

7 respostas
guisantogui

Boa tarde pessoal!

Estou com uma duvida em um sistema que devo criar, ele tem que ser possivel criar tabelas para salvar em um banco de dados, ateh aqui tranquilo, mas qdo eu me deparo que o usuario podera criar uma tabela com tres colunas e outra com 5, fica meio complicado de definir o parametro do objeto, pensei em usar um numero inteiro para definir a cada nova tabela o numero de colunas, ai esta o meu problema, como eu faço para definir através desse inteiro o nro de paramentros do objeto??

Alguem tem uma solução melhor?
Estou aqui para aprender!!

Obrigado a todos!

7 Respostas

Marky.Vasconcelos

Voce pode usar um método que recebe n parametros.

public void createTable(ColumnDescription..cols){
for(ColumnDescription col : cols){
//Faz algo com esse objeto.
}
}

Supondo que voce tem uma classe dessas por exemplo.

guisantogui
public class Tabelas {

   public void criarTabelaDoProjeto(){

       String criarTabela = "CREATE TABLE Gráfica (Cliente VARCHAR(80), Apelido VARCHAR(40), Endereço VARCHAR(110), Bairro VARCHAR ," +
               "Cidade VARCHAR(50), CEP VARCHAR(20), Telefone VARCHAR(50), FAX VARCHAR(50), E-mail geral (100), HomePage (80)) ";
       try
       {
           PreparedStatement prepstm = null;
           Connection con = null;

           prepstm = con.prepareStatement(criarTabela);
           prepstm.execute();
       }
       catch (SQLException ex) {
           Logger.getLogger(Tabelas.class.getName()).log(Level.SEVERE, null, ex);
       }
   }
}

Alguém poderia me dizer onde está o erro, está estourando uma NullPointerException nessa linha de codigo

prepstm = con.prepareStatement(criarTabela);
Abdon

Vc não esta instanciando o seu objeto connection:

Connection con = null;  
       prepstm = con.prepareStatement(criarTabela);

Logo sua connection esta nula e quando vc executa conn.prepareStatement vc tem um NPE.

T

con.prepareStatement(criarTabela);”

você tem que obter a conexao de algum lugar.
veja como obter uma conexao algo do tipo

/*
    ** driverClass is the JDBC driver class name as a String.
    */

    try
    {
	Class.forName (driverClass);
	connection = DriverManager.getConnection (url,
	    userName, password);
	connection.setAutoCommit (false);
    }
    catch (SQLException ex)
    {
	/*
	** "Connect error"...
	*/
    }
    catch (java.lang.ClassNotFoundException ex)
    {
	/*
	** "Driver error"...
	*/
    }
guisantogui

eh q eu fiz a conecção em outra classe e queria fazer apenas a criação da tabela nessa classe, sabe deixar mais organizado! :wink:

guisantogui

alguem saberia me dizer como posso fazer pra deixar assim (post acima)

vlw! :wink:

Trebloc

Um dos modos que encontrei de resolver isso é utilizando uma classe assim:

public class ConnectionUtil
{
	// construtor privador
	private ConnectionUtil()
	{
	}

	// tenta abrir a conexão
	public static void connect(String url, String username, String password, String driver) throws SQLException, ClassNotFoundException
	{
		Class.forName(driver);
		conn = DriverManager.getConnection(url, username, password);
	}
	
	// tenta fechar a conexão
	public static void close() throws SQLException
	{
		conn.close();
	}

	// prepara um Statement
	public static PreparedStatement prepareStatement(String sql) throws SQLException
	{
		return conn.prepareStatement(sql);
	}

	// a conexão
	private static Connection conn;
}

Seria um modo correto?

Criado 1 de março de 2010
Ultima resposta 1 de mar. de 2010
Respostas 7
Participantes 5