Problemas com RETURN_GENERATED_KEYS

6 respostas
M

Boa tarde pessoal :)
Tô com um probleminha usando RETURN_GENERATED_KEYS e SQL Server, eu já usei esse recurso com MySQL e funcionou direitinho, mas no SQL Server tá entrando em um exception, que é java.lang.UnsupportedOperationException

segue as classes

Conexao.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.mjjoias.data;

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

/**
 *
 * @author markin
 */
public class Conexao {

    // <editor-fold desc="Atributos">
    private Connection conexao = null;
    // </editor-fold>

    // <editor-fold desc="Construtor">
    public Conexao()
    {

    }
    // </editor-fold>

    // <editor-fold desc="Métodos Públicos">
    /**
     * Método responsável por abrir a conexão com o BD
     * @return Conexão com o BD
     */
    public Connection openConnection(){
        try{
            // define o driver JDBC do banco de dados:
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

            String url = "jdbc:odbc:mjjoias";
            conexao = DriverManager.getConnection(url);
        }catch(Exception ex){
            ex.getMessage();
        }
        return conexao;
    }

    /**
     * Método responsável por fechar a conexão com o BD
     */
    public void closeConnection(){
        try{
            conexao.close();
        }catch(Exception ex){
            ex.getMessage();
        }
    }
    // </editor-fold>
}
PessoaData.java
public class PessoaData extends Conexao{
    //<editor-fold desc="Métodos Públicos">
    /**
     * Método Responsável por incluir uma Pessoa
     * @param bean Dados da Pessoa
     */
    public void Inclui(PessoaBean bean){
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        String SQL = "INSERT INTO Pessoas VALUES(?,?,?,?,?,?,?,?,?,?)";

        try{
            pstmt = openConnection().prepareStatement(SQL, PreparedStatement.RETURN_GENERATED_KEYS);

            pstmt.setString(1, bean.getNome());
            pstmt.setString(2, bean.getLogradouro());
            pstmt.setString(3, bean.getBairro());
            pstmt.setString(4, bean.getCidade());
            pstmt.setString(5, bean.getCep());
            pstmt.setString(6, bean.getUF());
            pstmt.setString(7, bean.getTelefone());
            pstmt.setString(8, bean.getCelular());
            pstmt.setString(9, bean.getFax());
            pstmt.setString(10, bean.getEmail());

            pstmt.executeUpdate();

            rs = pstmt.getGeneratedKeys();
            rs.next();
            bean.setIdPessoa(rs.getInt(1));

            pstmt.close();
        }catch(Exception ex){
            ex.getMessage();
        }finally{
            closeConnection();
        }
    }
    //</editor-fold>
}
O erro é nessa linha:
pstmt = openConnection().prepareStatement(SQL, PreparedStatement.RETURN_GENERATED_KEYS);
Se alguém souber o que está acontecendo e puder ajudar, muito obrigado :D

6 Respostas

T

Não use o ODBC-JDBC Bridge (que foi o que você usou) com SQL Server se quiser usar essa opção RETURN_GENERATED_KEYS. Esse bridge não suporta essa opção.

Use o driver JTDS (recomendado; http://jtds.sourceforge.net/ ) ou o da Microsoft (http://msdn.microsoft.com/en-us/data/aa937724.aspx )

M

thingol:
Não use o ODBC-JDBC Bridge (que foi o que você usou) com SQL Server se quiser usar essa opção RETURN_GENERATED_KEYS. Esse bridge não suporta essa opção.

Use o driver JTDS (recomendado; http://jtds.sourceforge.net/ ) ou o da Microsoft (http://msdn.microsoft.com/en-us/data/aa937724.aspx )

já baixei o jtds aqui, agora tô tentando fazer a conexão, mas tô com problema na url.
Já usei ela de várias maneiras e nenhuma conectou

String url = “jdbc:jtds:sqlserver://localhost/BDJoias”;

String url = “jdbc:jtds:sqlserver://SQLEXPRESS/BDJoias”;

String url = “jdbc:jtds:sqlserver://127.0.0.1/BDJoias”;

String url = “jdbc:jtds:sqlserver://localhost:1433/BDJoias;instance=SQLEXPRESS”;

ja coloquei até o nome do computador e nada, vc sabe me dizer onde tá o erro?

M

usando essa String:

String url = “jdbc:jtds:sqlserver://localhost:1433/BDJoias;instance=SQLEXPRESS”;

mudou o exception para Unable to get information from SQL Server: localhost

T

http://jtds.sourceforge.net/faq.html#urlFormat

Uma dica: pode ser, por exemplo, que o SQL Server não esteja habilitado para aceitar conexões TCP. Verifique isso na instalação do SQL Server (deve ser algo como “Surface Area Configuration” ou outra coisa de nome esotérico.
http://msdn.microsoft.com/en-us/library/ms173748(SQL.90).aspx

M

thingol:
http://jtds.sourceforge.net/faq.html#urlFormat

Uma dica: pode ser, por exemplo, que o SQL Server não esteja habilitado para aceitar conexões TCP. Verifique isso na instalação do SQL Server (deve ser algo como “Surface Area Configuration” ou outra coisa de nome esotérico.
http://msdn.microsoft.com/en-us/library/ms173748(SQL.90).aspx


Eu já tinha configurado isso e ainda assim não funciona ^^ vou continuar pesquisando, obrigado pela ajuda.

M

Resolvi o problema, faltava importar uma DLL para a pasta Bin do SQL Server.

Obrigado pela ajuda thingol :smiley:

Criado 9 de março de 2009
Ultima resposta 9 de mar. de 2009
Respostas 6
Participantes 2