Não consigo fazer um insert no banco de dados

5 respostas
jemoliveira

Ola pessoal estou fazendo um exemplo de conexão com banco de dados

mais o que me parece no meu metod inserir os dados não são incluidos na base

vou passar o codigo pra ficar mais facil

public class Aula {

	private Connection conn;
	private PreparedStatement pstmt;
	private Statement stmt;
	private ResultSet rs;
	
	Cliente cliente = new Cliente();
	

	public void open() {

		try {
			// Carrenga um drive em tempo de execução
			Class.forName("org.hsqldb.jdbcDriver");
			System.out.println("Drive carregado");

			// Tentando estabelecer uma conexão com banco de dados
			conn = DriverManager.getConnection("jdbc:hsqldb:file:C:/banco/hsql/aula", "sa", "");
			System.out.println("Conexão com banco de dados estabelecida");

		} catch (ClassNotFoundException e) {
			System.out.println("Erro ao carregar o drive");
			e.printStackTrace();
		} catch (SQLException e) {
			System.out.println("Erro ao tentar estabelecer uma conexão");
			e.printStackTrace();
		}

	}
	
	public void close() {
		
		try {
			if (stmt != null)
				stmt.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}		
	}
	
	public void inserir() {
		
		try {
			
			cliente.setId(10);
			cliente.setNome("Test");
			
			//Abrindo a conexão com o banco
			open();
			
			//Instanciando o objeto statement (stmt)
			stmt = conn.createStatement();
			
			//Executando uma instrução sql.
			stmt.executeUpdate("INSERT INTO ALUNO VALUES (" + cliente.getId() + ", '" + cliente.getNome() + "')");
			
			// Fechando a conexão com o banco de dados
			close();			
			
		} catch (SQLException e) {
			// Fechando a conexão com o banco
			close();
			e.printStackTrace();
		}		
	}
	
	public ResultSet buscarAlunos() {
		
		try {
			
			open();
			stmt = conn.createStatement();
			rs = stmt.executeQuery("SELECT id, nome FROM ALUNO");
						
			while (rs.next()) {

				cliente.setId(rs.getInt("id"));
				cliente.setNome(rs.getString("nome"));
				
				System.out.println("ID: " + cliente.getId());
				System.out.println("Nome: " + cliente.getNome());
			}
						
			close();
			
			return rs;
			
		} catch (SQLException e) {
			close();
			e.printStackTrace();
		}
		return null;
	}
	
	
	
	public static void main(String[] args) {
		
		Aula aula =  new Aula();
		aula.inserir();
		aula.buscarAlunos();	
	}
}

5 Respostas

Pedrosa

Você precisa informar também os nomes das colunas do seu INSERT:

SQL = "INSERT INTO TABELA (coluna1, coluna2) VALUES (?,?)";
conn.prepareStatement(SQL)
stmt.setInt(1, valor1);
stmt.setString(2, valor2);

E use prepareStatement para setar os valores na query, não precisando se preocupar com as aspas, note que assim a query é montado com os ? de acordo com o tipo do seu objeto.

von.juliano

Tenta fazer o seguinte, inclua a seguinte linha no final do seu método open():conn.setAutoCommit(true);
Blz? Flw! :thumbup:

peczenyj

A primeira coisa que eu aprendi sobre banco de dados foram os conceitos de Commit/Rollback.

Se vc não tem isso claro sugiro uma revisão rapida pois o controle transacional é algo muito importante.

E quando for criar codigo sql via concatenação de strings pense que alguem pode informar um dado assim

' ; drop all tables ; '

ou coisa do tipo (na verdade se vc tiver alguma coisa com apóstrofo ja vai dar pau no banco).

jemoliveira

fiz isso não funcionou

pelo que vejo deve ser alguma coisa com o commit
mais ja tentei conn.commit autoCommit e nada não funciona

peczenyj

executeUpdate retorna um inteiro. qual inteiro está retornando?

Criado 29 de fevereiro de 2008
Ultima resposta 29 de fev. de 2008
Respostas 5
Participantes 4