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!
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.
[code]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);
}
}
}[/code]
Alguém poderia me dizer onde está o erro, está estourando uma NullPointerException nessa linha de codigo
prepstm = con.prepareStatement(criarTabela);
Abdon
Março 1, 2010, 5:07pm
#4
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.
“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"...
*/
}
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!
alguem saberia me dizer como posso fazer pra deixar assim (post acima)
vlw!
Um dos modos que encontrei de resolver isso é utilizando uma classe assim:
[code]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;
}[/code]
Seria um modo correto?