Estou tentando descobrir onde está o erro?

5 respostas
B

Olá !!!

Não consegui entender o erro que está ocorrendo, o  meu objetivo é inserir dados no banco, irei abaixo colocar as paginas e o erro que está ocorrendo. Uso o netbeans

---------#inseridados jsp#--------

<%@page contentType=“text/html” pageEncoding=“UTF-8”%>

JSP Page Nome:
Sobrenome:
Salario:

-----------------#servletCadDados.java#-------------------

import java.io.IOException;

import java.io.PrintWriter;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.sql.*;

import javax.servlet.RequestDispatcher;
import javax.servlet.<em>;

import javax.servlet.http.</em>;

import <a href="http://java.io">java.io</a>.<em>;

import java.sql.</em>;
public class servletCadDados extends HttpServlet {

private Statement sql = null;

private Connection con = null;

<a class="mention" href="/u/override">@Override</a>

public void init( ServletConfig c ) throws ServletException {

super.init( c );
try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
            con = DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};dbq=c:/cadempresa.mdb");
            
                    }
catch ( Exception e ) {

e.printStackTrace();

con = null;

}

}

// <a class="mention" href="/u/override">@Override</a>

public void doPost( HttpServletRequest rq, HttpServletResponse rs )

throws ServletException, IOException {
PrintWriter sai;

String nome, sobrenome, salario;

nome =rq.getParameter( “nome” );

sobrenome = rq.getParameter( “sobrenome” );

salario = rq.getParameter( “salario” );
sai = rs.getWriter();

rs.setContentType( text/html );

if ( nome.equals ( “” ) || sobrenome.equals( “” )

) {

sai.println( "

Por favor, preencha os campos " +
“Nome, sobrenome e salario.

” );
sai.close();
return;
}
String dados = “’” + nome + “’,’” + sobrenome + “’,’” + salario + “’”;
boolean sucesso = inserirNoLivro(dados);
if ( sucesso )
sai.println( "

Obrigado " + nome + “,” +

pelo registro .

” );
else
sai.println( “

Seus dados:
” + dados +

não puderam ser registrados.
” +
“Por favor, tente outra vez mais tarde.

” );
sai.close();
}
private boolean inserirNoLivro( String dados ) {
try {
sql = con.createStatement();
sql.execute( "insert into lvisitas " +

"(nome,sobrenome,salario) " +

values ( + dados + ) );

sql.close();

}

catch ( Exception e ) {

System.err.println( ERRO: problemas com o banco de dados. );

e.printStackTrace();

return false;

}

return true;

}

<a class="mention" href="/u/override">@Override</a>

public void destroy() {

try {

con.close();

}

catch ( Exception e ) {

System.err.println( “ERRO ao fechar o BD.” );

}

}

}

--------------------#Error#----------------------

INFO: Server startup in 631 ms
ERRO: problemas com o banco de dados.
java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] A operação deve usar uma consulta atualizável.
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)

----------------#error console depurador#-----------------

Anexando a tomcat_shared_memory_id
Executando programa do usuário
LineBreakpoint servletCadDados.java : 67 enviado com êxito.
LineBreakpoint servletCadDados.java : 67 enviado com êxito.
Não foi possível enviar o ponto de interrupção LineBreakpoint servletCadDados.java : 67, razão: Não há local executável disponível na linha 69 da classe servletCadDados.
Inválido LineBreakpoint servletCadDados.java : 67

Desde já agradeço qualquer ajuda!!!

5 Respostas

P

olha, fica dificil ajudar pois não usando as tags CODE seu codigo fica parcialmente ilegivel e a mensagem de erro é sobre breakpoint inválido, não sobre algum comportamento estranho.

sugiro fortemente vc pegar a apostila fj-21 da caelum e dar uma lida, vc esta concatenando strings para gerar sql e isso é sinal de bagunça - mesmo q vc esteja aprendendo não custa nada aprender de uma boa fonte e com conceitos mais interessantes e corretos.

M

O problema pode estar neste trecho de código:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();

Verifique se você digitou corretamente o nome de driver. :wink:

I

Olha só tenta fazer seu código mais légivel pois quando outros programadores forem dar manutenção não terão dificuldade em enteder o que foi feito, fica mais ou menos assim:

Fábrica de Conexões para o banco de dados, para mudar basta alterar class.forName.

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

public class ConnectionFactory {
	
	public static Connection getConnection( ) throws SQLException{
		
		try{
			
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("Conectado com o banco de dados com sucesso!!\n");
			return DriverManager.getConnection("jdbc:mysql://localhost/estudo_jdbc","root","");
			
			}catch (ClassNotFoundException e) {
			    throw new SQLException (e.getMessage());
			
		}
	}

}
I

Por mais que quase não usa mais fazer dessa maneira com códigos SQL junto com JAVA, ainda mais depois do que Hibernate ou a própria especificação Java Persistence API. Então essa seria sua classe DAO para realizar um crud simples.

[code]

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ContatoDao {

private Connection connection;

public ContatoDao( ) throws SQLException{

this.connection = ConnectionFactory.getConnection();
}

public void adicionarContato(Contato contato) throws SQLException{

String sql = "insert into contatos (nome, email, endereco) values (?, ?, ?)";
PreparedStatement pstm = connection.prepareStatement(sql);

pstm.setString(1, contato.getNome());
pstm.setString(2, contato.getEmail());
pstm.setString(3, contato.getEndereco());

pstm.execute();
pstm.close();
}

public List listarContatos( ) throws SQLException{

String sql = "select * from contatos where nome like '%a%'" ;

PreparedStatement pstm = this.connection.prepareStatement(sql);
ResultSet result = pstm.executeQuery();

List contatos = new ArrayList( );

while(result.next()){

Contato contato = new Contato( );

contato.setNome(result.getString("nome"));
contato.setEmail(result.getString("email"));
contato.setEndereco(result.getString("endereco"));

contatos.add(contato);
}

result.close();
pstm.close();


return contatos;
}


public void alterarContato(Contato contato) throws SQLException{

String sql = "update contatos set nome = ?, email = ?, endereco = ? where id = ? ";
PreparedStatement pstm = this.connection.prepareStatement(sql);

pstm.setString(1, contato.getNome());
pstm.setString(2, contato.getEmail());
pstm.setString(3, contato.getEndereco());
pstm.setInt(4, contato.getId());

pstm.execute();
pstm.close();

}

public void removerContato(Contato contato) throws SQLException{

String sql = "delete from contatos where id = ?";
PreparedStatement pstm = this.connection.prepareStatement(sql);

pstm.setInt(1, contato.getId());

pstm.execute();
pstm.close();
}

}

I

:oops: Descupe-me todos pois esqueci de fechar o code… agora sim:
segue correto!!!

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.caelum.bean.Contato;

public class ContatoDao {
	
	private Connection connection;
	
	public ContatoDao( ) throws SQLException{
		
		this.connection = ConnectionFactory.getConnection();
	}
	
	public void adicionarContato(Contato contato) throws SQLException{
		
		String sql = "insert into contatos (nome, email, endereco) values (?, ?, ?)";
		PreparedStatement pstm = connection.prepareStatement(sql);
		
		pstm.setString(1, contato.getNome());
		pstm.setString(2, contato.getEmail());
		pstm.setString(3, contato.getEndereco());
		
		pstm.execute();
		pstm.close();
	}
	
	public List<Contato> listarContatos( ) throws SQLException{
		
		String sql = "select * from contatos where nome like '%a%'" ;
		
		PreparedStatement pstm = this.connection.prepareStatement(sql);
		ResultSet result = pstm.executeQuery();
		
		List<Contato> contatos = new ArrayList<Contato>( );
		
		while(result.next()){
			
			Contato contato = new Contato( );
			
			contato.setNome(result.getString("nome"));
			contato.setEmail(result.getString("email"));
			contato.setEndereco(result.getString("endereco"));
			
			contatos.add(contato);
		}
		
		result.close();
		pstm.close();
		
		
		return contatos;
	}
	
	
	public void alterarContato(Contato contato) throws SQLException{
		
		String sql = "update contatos set nome = ?, email = ?, endereco = ? where id = ? ";
		PreparedStatement pstm = this.connection.prepareStatement(sql);
		
		pstm.setString(1, contato.getNome());
		pstm.setString(2, contato.getEmail());
		pstm.setString(3, contato.getEndereco());
		pstm.setInt(4, contato.getId());
		
		pstm.execute();
		pstm.close();
			
	}
	
	public void removerContato(Contato contato) throws SQLException{
		
		String sql = "delete from contatos where id = ?";
		PreparedStatement pstm = this.connection.prepareStatement(sql);
		
		pstm.setInt(1, contato.getId());
		
		pstm.execute();
		pstm.close();
	}

}
Criado 13 de agosto de 2009
Ultima resposta 14 de ago. de 2009
Respostas 5
Participantes 4