Atribuir resultado de uma consulta SQL numa variável

2 respostas
protonfranklin

Boa noite,

Como faço para atribuir o valor de uma consulta sql a uma variável?

Estou usando netbeans e postgre e numa consulta normal posso recuperar qualquer dado que queira, mas num comando insert faço uma consulta para pegar a sequence do banco para
gerar o código da chave primária mas não consigo atribuir o valor do resultado que é um inteiro numa variável. Acredito que o erro esteja no seguinte código:

int sequence = 0;
        
        try {
            String nextValue = "select nextval( 

Quem puder me ajudar agradeço.faturamento.tbandeira_cartoes_tcodigo_pk_seq 

Quem puder me ajudar agradeço.)";
            conexao.executeSQL(nextValue);
            
            if (conexao.rs.next()){
                conexao.rs.first();
                sequence = conexao.rs.getInt(nextValue);
                
            }

            conexao.Conexao();
            String qryInsere =  " INSERT INTO "                         +
                                " faturamento.tbandeira_cartoes ( "     +
                                " tcodigo_pk, "                         +
                                " tdescricao, "                         +
                                " tdata "                               +
                                " )  "                                  +
                                " VALUES ( "                            +
                                sequence +","                           +
                                " 

Quem puder me ajudar agradeço."+jTextField3.getText()+" 

Quem puder me ajudar agradeço.,"        +
                                " 

Quem puder me ajudar agradeço."+jTextField4.getText()+" 

Quem puder me ajudar agradeço.)";

            conexao.executeSQL(qryInsere);
            conexao.rs.close();

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Falha na inclusão do registro.");
        }

Quem puder me ajudar agradeço.

2 Respostas

E
... = conexao.rs.getInt(nextValue);

O parâmetro para getInt é um inteiro, que é o número da coluna que você quer pegar no registro (começando por 1), ou então o nome da coluna que você quer pegar no registro. No seu caso, nextVal não é um nome de coluna (é um nome da função), mas você sabe que o resultado tem apenas uma coluna. Então passe o inteiro 1, simplesmente:

... = conexao.rs.getInt (1);
protonfranklin

O problema está resolvido, só faço um adendo é que quando corrigido o código como fui instruído, estava gerando uma exceção. Debugando o código pude verificar que quando era executada a linha ... = conexao.rs.getInt (1); caia na exceção. Fiz alguns testes e foi resolvido inserido a seguinte linha antes da mencionada ...conexao.rs.first(); posicionando o registro na primeira linha mesmo sabendo que o resultado é somente de uma linha.
Portanto o código ficou assim:

try {
            
            conexao.Conexao();

            StringBuilder nextValue = new StringBuilder();
            nextValue.append("select nextval(

Mas resolvido essa questão, me deparei com outra logo em seguida.

No término da execução é exibida a seguinte mensagem de erro.

18/03/2010 11:19:06 menu.ConnectionDB executeSQL
SEVERE: null
org.postgresql.util.PSQLException: Nenhum resultado foi retornado pela consulta.
        at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:236)
        at menu.ConnectionDB.executeSQL(ConnectionDB.java:53)

Este erro é gerado mais o registro é inserido com sucesso. Debugando novamente meu código encontrei a falha numa classe chamada ConnectionDB, classe que executa o que preciso no banco. Como ela é pequena vou postar ela completa e sinalizar onde o erro acontece.

[code]package menu;

/**Classe para realizar conexões de banco de dados usando JDBC.
 * @author Aecio e Franklin
 * @version 1.0
 * @since Release 01 da aplicação
 */


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.DriverManager;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConnectionDB {

    private static Connection CONNECTION;
    private Statement stmt;
    public static ResultSet rs;

    /** Método construtor.
     */
    public void Conexao() {

        try {

            Class.forName(org.postgresql.Driver.class.getName());
            CONNECTION = DriverManager.getConnection("jdbc:postgresql://localhost/sirius_erp","adm","036403");

        } catch (Exception e) {

            e.printStackTrace();

        }
    }//end init block

    /** Método para retorno do objeto de conexão.
     *  */
    public static Connection getConnection(){
        return CONNECTION;
    }

    /**Método para executar comandos SQL.
     * @param sql Parâmetro contendo o comando sql para consultas.
     */
    public ResultSet executeSQL(StringBuilder sql){

        try {
            stmt = getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql.toString());
            return rs;

        } catch (SQLException ex) {
            Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
            
        }

        return null;
    }

}//end class

o erro acontece justamente na linha 53 que é onde passo meu SQL. Mas desde já agradeço a solução para o primeiro problema.

faturamento.tbandeira_cartoes_tcodigo_pk_seq

Mas resolvido essa questão, me deparei com outra logo em seguida.

No término da execução é exibida a seguinte mensagem de erro.

18/03/2010 11:19:06 menu.ConnectionDB executeSQL
SEVERE: null
org.postgresql.util.PSQLException: Nenhum resultado foi retornado pela consulta.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:236)
at menu.ConnectionDB.executeSQL(ConnectionDB.java:53)

Este erro é gerado mais o registro é inserido com sucesso. Debugando novamente meu código encontrei a falha numa classe chamada ConnectionDB, classe que executa o que preciso no banco. Como ela é pequena vou postar ela completa e sinalizar onde o erro acontece.

package menu;

/**Classe para realizar conexões de banco de dados usando JDBC.
 * @author Aecio e Franklin
 * @version 1.0
 * @since Release 01 da aplicação
 */


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.DriverManager;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConnectionDB {

    private static Connection CONNECTION;
    private Statement stmt;
    public static ResultSet rs;

    /** Método construtor.
     */
    public void Conexao() {

        try {

            Class.forName(org.postgresql.Driver.class.getName());
            CONNECTION = DriverManager.getConnection("jdbc:postgresql://localhost/sirius_erp","adm","036403");

        } catch (Exception e) {

            e.printStackTrace();

        }
    }//end init block

    /** Método para retorno do objeto de conexão.
     *  */
    public static Connection getConnection(){
        return CONNECTION;
    }

    /**Método para executar comandos SQL.
     * @param sql Parâmetro contendo o comando sql para consultas.
     */
    public ResultSet executeSQL(StringBuilder sql){

        try {
            stmt = getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql.toString());
            return rs;

        } catch (SQLException ex) {
            Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
            
        }

        return null;
    }

}//end class

o erro acontece justamente na linha 53 que é onde passo meu SQL. Mas desde já agradeço a solução para o primeiro problema.

)as sequencia");

conexao.executeSQL(nextValue);
conexao.rs.first();
sequence = (conexao.rs.getInt(1));

StringBuilder qryInsere = new StringBuilder();

qryInsere.append(" INSERT INTO ");
qryInsere.append(" faturamento.tbandeira_cartoes ( " );
qryInsere.append(" tcodigo_pk, " );
qryInsere.append(" tdescricao, " );
qryInsere.append(" tdata " );
qryInsere.append(" ) " );
qryInsere.append(" VALUES ( " );
qryInsere.append(sequence +"," );
qryInsere.append("

Mas resolvido essa questão, me deparei com outra logo em seguida.

No término da execução é exibida a seguinte mensagem de erro.

18/03/2010 11:19:06 menu.ConnectionDB executeSQL
SEVERE: null
org.postgresql.util.PSQLException: Nenhum resultado foi retornado pela consulta.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:236)
at menu.ConnectionDB.executeSQL(ConnectionDB.java:53)

Este erro é gerado mais o registro é inserido com sucesso. Debugando novamente meu código encontrei a falha numa classe chamada ConnectionDB, classe que executa o que preciso no banco. Como ela é pequena vou postar ela completa e sinalizar onde o erro acontece.

package menu;

/**Classe para realizar conexões de banco de dados usando JDBC.
 * @author Aecio e Franklin
 * @version 1.0
 * @since Release 01 da aplicação
 */


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.DriverManager;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConnectionDB {

    private static Connection CONNECTION;
    private Statement stmt;
    public static ResultSet rs;

    /** Método construtor.
     */
    public void Conexao() {

        try {

            Class.forName(org.postgresql.Driver.class.getName());
            CONNECTION = DriverManager.getConnection("jdbc:postgresql://localhost/sirius_erp","adm","036403");

        } catch (Exception e) {

            e.printStackTrace();

        }
    }//end init block

    /** Método para retorno do objeto de conexão.
     *  */
    public static Connection getConnection(){
        return CONNECTION;
    }

    /**Método para executar comandos SQL.
     * @param sql Parâmetro contendo o comando sql para consultas.
     */
    public ResultSet executeSQL(StringBuilder sql){

        try {
            stmt = getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql.toString());
            return rs;

        } catch (SQLException ex) {
            Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
            
        }

        return null;
    }

}//end class

o erro acontece justamente na linha 53 que é onde passo meu SQL. Mas desde já agradeço a solução para o primeiro problema.

"+jTextField3.getText()+"

Mas resolvido essa questão, me deparei com outra logo em seguida.

No término da execução é exibida a seguinte mensagem de erro.

18/03/2010 11:19:06 menu.ConnectionDB executeSQL
SEVERE: null
org.postgresql.util.PSQLException: Nenhum resultado foi retornado pela consulta.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:236)
at menu.ConnectionDB.executeSQL(ConnectionDB.java:53)

Este erro é gerado mais o registro é inserido com sucesso. Debugando novamente meu código encontrei a falha numa classe chamada ConnectionDB, classe que executa o que preciso no banco. Como ela é pequena vou postar ela completa e sinalizar onde o erro acontece.

package menu;

/**Classe para realizar conexões de banco de dados usando JDBC.
 * @author Aecio e Franklin
 * @version 1.0
 * @since Release 01 da aplicação
 */


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.DriverManager;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConnectionDB {

    private static Connection CONNECTION;
    private Statement stmt;
    public static ResultSet rs;

    /** Método construtor.
     */
    public void Conexao() {

        try {

            Class.forName(org.postgresql.Driver.class.getName());
            CONNECTION = DriverManager.getConnection("jdbc:postgresql://localhost/sirius_erp","adm","036403");

        } catch (Exception e) {

            e.printStackTrace();

        }
    }//end init block

    /** Método para retorno do objeto de conexão.
     *  */
    public static Connection getConnection(){
        return CONNECTION;
    }

    /**Método para executar comandos SQL.
     * @param sql Parâmetro contendo o comando sql para consultas.
     */
    public ResultSet executeSQL(StringBuilder sql){

        try {
            stmt = getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql.toString());
            return rs;

        } catch (SQLException ex) {
            Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
            
        }

        return null;
    }

}//end class

o erro acontece justamente na linha 53 que é onde passo meu SQL. Mas desde já agradeço a solução para o primeiro problema.

," );
qryInsere.append("

Mas resolvido essa questão, me deparei com outra logo em seguida.

No término da execução é exibida a seguinte mensagem de erro.

18/03/2010 11:19:06 menu.ConnectionDB executeSQL
SEVERE: null
org.postgresql.util.PSQLException: Nenhum resultado foi retornado pela consulta.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:236)
at menu.ConnectionDB.executeSQL(ConnectionDB.java:53)

Este erro é gerado mais o registro é inserido com sucesso. Debugando novamente meu código encontrei a falha numa classe chamada ConnectionDB, classe que executa o que preciso no banco. Como ela é pequena vou postar ela completa e sinalizar onde o erro acontece.

package menu;

/**Classe para realizar conexões de banco de dados usando JDBC.
 * @author Aecio e Franklin
 * @version 1.0
 * @since Release 01 da aplicação
 */


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.DriverManager;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConnectionDB {

    private static Connection CONNECTION;
    private Statement stmt;
    public static ResultSet rs;

    /** Método construtor.
     */
    public void Conexao() {

        try {

            Class.forName(org.postgresql.Driver.class.getName());
            CONNECTION = DriverManager.getConnection("jdbc:postgresql://localhost/sirius_erp","adm","036403");

        } catch (Exception e) {

            e.printStackTrace();

        }
    }//end init block

    /** Método para retorno do objeto de conexão.
     *  */
    public static Connection getConnection(){
        return CONNECTION;
    }

    /**Método para executar comandos SQL.
     * @param sql Parâmetro contendo o comando sql para consultas.
     */
    public ResultSet executeSQL(StringBuilder sql){

        try {
            stmt = getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql.toString());
            return rs;

        } catch (SQLException ex) {
            Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
            
        }

        return null;
    }

}//end class

o erro acontece justamente na linha 53 que é onde passo meu SQL. Mas desde já agradeço a solução para o primeiro problema.

"+jTextField4.getText()+"

Mas resolvido essa questão, me deparei com outra logo em seguida.

No término da execução é exibida a seguinte mensagem de erro.

18/03/2010 11:19:06 menu.ConnectionDB executeSQL
SEVERE: null
org.postgresql.util.PSQLException: Nenhum resultado foi retornado pela consulta.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:236)
at menu.ConnectionDB.executeSQL(ConnectionDB.java:53)

Este erro é gerado mais o registro é inserido com sucesso. Debugando novamente meu código encontrei a falha numa classe chamada ConnectionDB, classe que executa o que preciso no banco. Como ela é pequena vou postar ela completa e sinalizar onde o erro acontece.

package menu;

/**Classe para realizar conexões de banco de dados usando JDBC.
 * @author Aecio e Franklin
 * @version 1.0
 * @since Release 01 da aplicação
 */


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.DriverManager;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConnectionDB {

    private static Connection CONNECTION;
    private Statement stmt;
    public static ResultSet rs;

    /** Método construtor.
     */
    public void Conexao() {

        try {

            Class.forName(org.postgresql.Driver.class.getName());
            CONNECTION = DriverManager.getConnection("jdbc:postgresql://localhost/sirius_erp","adm","036403");

        } catch (Exception e) {

            e.printStackTrace();

        }
    }//end init block

    /** Método para retorno do objeto de conexão.
     *  */
    public static Connection getConnection(){
        return CONNECTION;
    }

    /**Método para executar comandos SQL.
     * @param sql Parâmetro contendo o comando sql para consultas.
     */
    public ResultSet executeSQL(StringBuilder sql){

        try {
            stmt = getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql.toString());
            return rs;

        } catch (SQLException ex) {
            Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
            
        }

        return null;
    }

}//end class

o erro acontece justamente na linha 53 que é onde passo meu SQL. Mas desde já agradeço a solução para o primeiro problema.

" );
qryInsere.append(" ) " );

conexao.executeSQL(qryInsere);

} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Falha na inclusão do registro.");
}[/code]

Mas resolvido essa questão, me deparei com outra logo em seguida.

No término da execução é exibida a seguinte mensagem de erro.

18/03/2010 11:19:06 menu.ConnectionDB executeSQL
SEVERE: null
org.postgresql.util.PSQLException: Nenhum resultado foi retornado pela consulta.
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:236)
at menu.ConnectionDB.executeSQL(ConnectionDB.java:53)

Este erro é gerado mais o registro é inserido com sucesso. Debugando novamente meu código encontrei a falha numa classe chamada ConnectionDB, classe que executa o que preciso no banco. Como ela é pequena vou postar ela completa e sinalizar onde o erro acontece.

package menu;

/**Classe para realizar conexões de banco de dados usando JDBC.
 * @author Aecio e Franklin
 * @version 1.0
 * @since Release 01 da aplicação
 */


import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.DriverManager;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConnectionDB {

    private static Connection CONNECTION;
    private Statement stmt;
    public static ResultSet rs;

    /** Método construtor.
     */
    public void Conexao() {

        try {

            Class.forName(org.postgresql.Driver.class.getName());
            CONNECTION = DriverManager.getConnection("jdbc:postgresql://localhost/sirius_erp","adm","036403");

        } catch (Exception e) {

            e.printStackTrace();

        }
    }//end init block

    /** Método para retorno do objeto de conexão.
     *  */
    public static Connection getConnection(){
        return CONNECTION;
    }

    /**Método para executar comandos SQL.
     * @param sql Parâmetro contendo o comando sql para consultas.
     */
    public ResultSet executeSQL(StringBuilder sql){

        try {
            stmt = getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql.toString());
            return rs;

        } catch (SQLException ex) {
            Logger.getLogger(ConnectionDB.class.getName()).log(Level.SEVERE, null, ex);
            
        }

        return null;
    }

}//end class

o erro acontece justamente na linha 53 que é onde passo meu SQL. Mas desde já agradeço a solução para o primeiro problema.

Criado 17 de março de 2010
Ultima resposta 18 de mar. de 2010
Respostas 2
Participantes 2