Jdbc + postgresql(dw) + inserÇÃo automatizada

10 respostas
Tiberio

Opa galera, não sei o que acontece com o meu código, mas toda vez que o rodo, tenho este retorno:

---------------------------------------------------------------------------------------------------------------------------------
run:
Connected to dw (Datawarehouse)
org.postgresql.util.PSQLException: ERROR: relation "prova" does not exist
Position: 15
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:252)
at bd.oraclejdbc.main(oraclejdbc.java:123)
BUILD SUCCESSFUL (total time: 2 seconds)
---------------------------------------------------------------------------------------------------------------------------------

Segue o meu código:
package bd;

import java.sql.*;

import java.sql.SQLException.*;

public class oraclejdbc{

    public oraclejdbc() {

    }

    Connection conn;
    Statement stmt;
    ResultSetMetaData rsmd;
    int numberOfColumns;

    public void initializeOracleConn(String pHost, String pPort, String pSid,
                      String pLogin, String pPassword, String pComment) throws Exception{

        // Don't forget to add Oracle JDBC Library

        //DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

        String jdbcdriver;
        String host;
        String port;
        String sid;
        String login;
        String password;
        String comment;

        /** Sample Values
        jdbcdriver = "jdbc:oracle:thin";
        host = "demo.domain.com";
        port = "1525";
        sid = "DEMO";
        login = "demo";
        password = "demo";
        */

        jdbcdriver = "jdbc:postgresql";
        host = pHost;
        port = pPort;
        sid = pSid;
        login = pLogin;
        password = pPassword;
        comment = pComment;
        
        conn = DriverManager.getConnection(jdbcdriver + "://" + host + ":" + port + ":" + sid,login,password);
        conn.setAutoCommit (false);

        System.out.println("Connected to " + sid + " (" + comment + ")");

    }

    public int executeQuery(String Query) throws Exception {

        stmt = conn.createStatement();
        ResultSet rset = stmt.executeQuery(Query);
        rsmd = rset.getMetaData();
        numberOfColumns = rsmd.getColumnCount();

        System.out.println(numberOfColumns + " columns.");
        System.out.print("LINE N°" + ";");

        for(int i=1; i < numberOfColumns; i++){
            
            System.out.print(rsmd.getColumnName(i) + ";");

        }

        System.out.println(rsmd.getColumnName(numberOfColumns));

        int count = 0;
        while (rset.next()) {

            count++;
            System.out.print(count);
            System.out.print(";");
            for(int i=1; i < numberOfColumns; i++){

                System.out.print(rset.getString(i));
                System.out.print(";");

            }

            System.out.println(rset.getString(numberOfColumns));

        }

        System.out.println(count + " records.");

        return count;

    }

    public static void main(String[] args) {

        oraclejdbc oraclejdbc = new oraclejdbc();

        String host;
        String port;
        String login;
        String password;
        String comment;
        String sid;

        // To customize
        sid = "dw";
        host = "localhost";
        port = "5432";
        login = "postgres";
        password = "654321";
        

        comment = "Datawarehouse";
        try{

            oraclejdbc.initializeOracleConn(host, port, sid, login, password, comment);
            String Query = "select * from PROVA";
            int numRecords = oraclejdbc.executeQuery(Query);

        }catch (Exception e){
            e.printStackTrace();
        }


    }

}

Sabendo que a conexao está correta com o banco de dados, e que a mesma consulta ("select * from prova;") no pgAdmin do postgree me retorna a tabela com 1 dado inserido (que eu mesmo inseri na mão).
Se alguém tiver alguma idéia, agradecerei.
Aproveitando o tópicos, após eu solucionar meu problema, tenho uma pergunta, como faço a inserção de dados (java -> bd), sendo que meus dados estão em um .txt ??
[]'s

10 Respostas

R

Você incluiu o JAR do driver de banco de dados na sua aplicação? Acho que também será preciso usar Class.forName() para iniciar o driver, mas parece que do Java 6 em diante isso não é mais necessário.

Tiberio

Uso o netbeans, e sim, inclui lá em libraries o jar do driver de banco de dados.
Será necessario ?

R

Você parece ter feito tudo certo, também estou confuso. É como se a tabela “PROVA” não existisse. Você está usando no pgAdmin os mesmos parâmetros de conexão do seu programa Java?

Tiberio

Sim, estou, tanto que a conexao do banco de dados ocorre de forma correta !
Eu tambem nao consigo entender o que se passa o.O.

rogelgarcia

Se vc criou a tabela com aspas… CREATE TABLE 'prova… a tabela se torna case sensitive…

ou seja SELECT * FROM prova será diferente de SELECT * FROM PROVA

Troque no seu programa de

para

pra ver se dá certo

Tiberio

Nao criei com aspas, e ja tentei de ambos os modos…

rogelgarcia

Então… pode ser q o pgadmin tá num banco… e o seu programa tá em outro

Tiberio

Nao é isso, quase que certeza, por que seguindo a logica de meu erro, mostra que foi possivel fazer a conexao…
Argh…
Ta tenso…

EDITADO:

Consegui arrumar, mudei o bd de dw para o postgres que é o padrao que é criado pelo postgreSQL, e funcionou !

Agora uma segunda pergunta, como adicionarei dados, a partir de um .txt ??
Tenho um arquivo de texto com dados do enem, que preciso adicionar, entao preciso de um loop, mas como ? nao tenho ideia…

[]'s e valeu pela ajuda pessoal

rogelgarcia

Ajusta aí no seu código … esse trecho que [size=15]mostra todas as tabelas do banco de dados[/size]:

Connection con = DriverManager.getConnection(.....);

      // get the database metadata
      DatabaseMetaData dmd = con.getMetaData();

      // get a list of all tables
      getListOfAllTables(listOfTables, dmd);
private void getListOfAllTables(List listOfTables, DatabaseMetaData dmd) 
  throws SQLException {
    String[] tableTypes = {
        "TABLE",
        "VIEW",
        "ALIAS",
        "SYNONYM",
        "GLOBAL TEMPORARY",
        "LOCAL TEMPORARY",
        "SYSTEM TABLE"};
    ResultSet rs = dmd.getTables(null, null, "%", tableTypes);

    while (rs.next()) {
      String tableName = rs.getString(3);
      listOfTables.add(tableName);
    }
    rs.close();
  }

Não testei o código

Tiberio

Pra que isso ? Preciso agora adicionar os dados nas tabelas, nao ver os dados das tabelas…

Criado 27 de maio de 2010
Ultima resposta 27 de mai. de 2010
Respostas 10
Participantes 3