Não fecha a conexão com o banco de dados a tempo?

1 resposta
VictorMatuk

Bem, eu tenho o seguinte código abaixo.

private static String conexao = "jdbc:odbc:xpm_db";
private static String login = "root";
private static String senha = "ghgh";
private static String driver = "sun.jdbc.odbc.JdbcOdbcDriver";

private static void insereDB(String query) {
	try {
		Class.forName(driver);
		Connection con = DriverManager.getConnection(conexao, login, senha);
		Statement stmt = con.createStatement();
		stmt.execute(query);
		stmt.close();
		con.close();
	} catch (Exception e) {
		System.out.println(e);
	}
}

public static void insereRequisicao(JTable tabela, int BDU, int nDaReq) {
	String material = "";
	int qtd = 0;
	for(int i = 1; i < tabela.getRowCount(); i++) {
		for(int j = 0; j < tabela.getColumnCount(); j++) {
			if(j == 1)
				material = tabela.getValueAt(i, j).toString();
			if(j == 2)
				qtd = Integer.parseInt(tabela.getValueAt(i, j).toString());
		}
	}
	insereDB("INSERT INTO movimentorequisicao (nDaReq, material, qtd, bdu) VALUES (" + nDaReq + ", '" + material + "', " + qtd + ", " + BDU + ");");
}

Pelo que viram, eu recebo uma JTable na função insereRequisicao, então eu pego os valores que quero e guardo para usar numa query que envio para a insereDB.

O Problema é que se essa JTable vier com mais de uma linha para inserir no for, a insereDB dá problema. O Erro é: java.sql.SQLException: General error

Ou seja, só vai a primeira linha da JTable. Se tiver 3 linhas, só vai a 1 e dá dois erros: java.sql.SQLException: General error

Eu verifiquei na internet que pode ser porque o java não fecha a conexão com o banco de dados a tempo. O Q acham?

Eu já fiz os testes, e as querys estão corretas. (Fiz um Syso... das queries e roda lindo);

1 Resposta

Nicolas_Fernandes
VictorMatuk:
Bem, eu tenho o seguinte código abaixo.
private static String conexao = "jdbc:odbc:xpm_db";
private static String login = "root";
private static String senha = "ghgh";
private static String driver = "sun.jdbc.odbc.JdbcOdbcDriver";

private static void insereDB(String query) {
	try {
		Class.forName(driver);
		Connection con = DriverManager.getConnection(conexao, login, senha);
		Statement stmt = con.createStatement();
		stmt.execute(query);
		stmt.close();
		con.close();
	} catch (Exception e) {
		System.out.println(e);
	}
}

public static void insereRequisicao(JTable tabela, int BDU, int nDaReq) {
	String material = "";
	int qtd = 0;
	for(int i = 1; i < tabela.getRowCount(); i++) {
		for(int j = 0; j < tabela.getColumnCount(); j++) {
			if(j == 1)
				material = tabela.getValueAt(i, j).toString();
			if(j == 2)
				qtd = Integer.parseInt(tabela.getValueAt(i, j).toString());
		}
	}
	insereDB("INSERT INTO movimentorequisicao (nDaReq, material, qtd, bdu) VALUES (" + nDaReq + ", '" + material + "', " + qtd + ", " + BDU + ");");
}

Pelo que viram, eu recebo uma JTable na função insereRequisicao, então eu pego os valores que quero e guardo para usar numa query que envio para a insereDB.

O Problema é que se essa JTable vier com mais de uma linha para inserir no for, a insereDB dá problema. O Erro é: java.sql.SQLException: General error

Ou seja, só vai a primeira linha da JTable. Se tiver 3 linhas, só vai a 1 e dá dois erros: java.sql.SQLException: General error

Eu verifiquei na internet que pode ser porque o java não fecha a conexão com o banco de dados a tempo. O Q acham?

Eu já fiz os testes, e as querys estão corretas. (Fiz um Syso... das queries e roda lindo);

Opa, Victor!
Tudo bem?

Antes de tudo, não use o DefaultTableModel. Ele gera uma série de implicações que vão te complicar a vida, como agora.
Crie um modelo estendendo de AbstractTableModel para a sua tabela, onde você trabalha diretamente com as classes de negócio.
Siga o link na minha assinatura, onde o ViniGodoy ensina a criar um model.

Ao criar o modelo, você pode fazer um método para requisitar todos os itens da tabela:
public List<SuaClasse> requisitarValores()
{
   return Collections.unmodifiableList(suaListaControle);
}
Ao pegar seus valores, itere sobre eles e faça suas operações:
for ( SuaClasse objeto : modelo.requisitarValores() )
{
   String matricula = objeto.getNome();
   Integer quantidade = objeto.getQuantidade();
}

Assim fica mais simples!
Abraços!

Criado 29 de setembro de 2010
Ultima resposta 29 de set. de 2010
Respostas 1
Participantes 2