Criando aplicação com acesso ao banco de dados

30 respostas
J

Bom dia pessoal,

Estou fazendo estágio e na empresa que estou usa um sistema em “FoxPro” apenas para criar relatórios/querys acessando os outros RP’s que a empresa utiliza de fato.

Meu coordenador me deu um tarefa, que é a seguinte:

Fazer uma aplicação “simples”, onde vou apenas fazer a conexão com o banco de dados do ERP, e buscar os dados de uma tabela.

Dai vem a necessidade da ajuda de vocês (se possível, lógico)…

Eu estou pesquisando formas de fazer isso, mas ainda esta bem confuso.

O banco de dados desta aplicação é Oracle.

Sei que vou utilizar os drivers JDBC (eu pelo menos acho), e faze-lo conectar ao banco. Mas estou bem perdido nisso, como iniciar.

Queria um “start”, pois estou vendo nessa tarefa, a oportunidade em aprender e muito e desenvolver melhor o que (pouco) aprendi até agora na faculdade.

Abraços e desde já obrigado.

30 Respostas

g4j

Está no caminho certo. Já identificou o banco de dados e a forma de conexão. Procurou algum artigo falando sobre JDBC + ORACLE? Acredito que tenha muito disso na internet e aqui no GUJ.

mhjmhj2002

Eu não entendi muito bem se vc vai usar java para fazer isso, se for me avisa que eu te envio um código com conexão pra oracle…

wbdsjunior

Dê uma olhada na apostila aberta FJ-21: Java para Desenvolvimento Web, Capitulo 2 (pág. 3), da Caelum.

J

É isso mesmo mhjmhj2002, vou utilizar o Java pra isso.

Ai vou ter que criar uma interface, ou algo do tipo, pois é uma ideia de descontinuar o que já tem hoje, é uma ferramenta em Visual FoxPro (bem antiga neh), e começar um desenvolvimento em java.

Nem meu coordenador, nem a outra “programadora” que trabalha aqui no TI tem conhecimentos em java, mas como eu ainda estudo e comecei a ver esta linguagem, estou vendo uma boa oportunidade em ganhar experiência, e torcer pra dar tudo certo.

E wbdsjunior, obrigado pela apostila, pois uma das intenções deste projeto, é que ele seja Web. Dai, toda e qualquer ajuda vindo de vocês que já tem mais experiência, pra mim é bem vinda demais.

PedroMorragudo

Hey brow segue a vídeo aula do curso XTI.

J

Pessoal, valeu pelas dicas, materiais.

Mas queria, se não for pedir demais, uma ajuda pra iniciar.

Já estou em mãos, com o usuário e senha do banco de dados que quero conectar, e queria pegar os dados apenas de uma tabela (de início), pra poder jogar em uma tela ou uma tabela, sei lá.

Vocês poderiam de dar uma mão com isso?

Tipo, se eu iria criar uma classe de conexão e outra pra mostrar os dados, realmente, como começar…

Agradeço desde já.

Enquanto isso, estou vendo a apostila da Caelum e os videos pra tentar absorver algumas coisas…

J

Bom dia pessoal...

Após várias pesquisas, cheguei em um código...

Agora, gostaria da ajuda de vocês, pois nele esta gerando um erro e se eu posso melhorar em algo.

Segue:

Erro:
Não acha o método "getInstace()";

unreporte exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
cannot find symbol
symbol: method getInstace()
location: class java.lang.Class

package bancodedados;
import java.sql.*;
/**
 *
 * @author jean.carlos
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        //Connection con =null;

        try{
            //Registrando o driver de conexão com o Banco.
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").getInstance();

            //Registrando o driver para estabelecer uma conexão.
            Connection con = DriverManager.getConnection("jdbc:odbc:10.1.254.36", "ecorpore", "mega1111");

            //Conexão com o banco de dados estabelecida.
            //Utilizamos o método createStatement de con para criar o Statement
            Statement stm = con.createStatement();

            //Executando o comando SQL.
            String SQL = "Select seqpessoa, status, fantasia, from ge_pessoa";

            //Definido o Statement, a Query será executada no banco de dados
            ResultSet rs = stm.executeQuery(SQL);

            //O método next() informa se houve resultados e posiciona o cursor do banco
            //Na próxima linha disponível para recuperação
            //Como esperamos várias linhas utilizamos um laço para recuperar os dados
            while(rs.next()){
                int seqPessoa = rs.getInt("seqpessoa");
                String status = rs.getString("status");
                String fantasia = rs.getString("fantasia");

                //Imprimindo os resultados retornados pela Query.
                System.out.println("SeqPessoa: "+seqPessoa+" Status: "+status+" Fantasia: "+fantasia);
            }

        }catch(SQLException e){
            //Se houve algum erro, uma exceção é gerada para informar o erro.
            e.printStackTrace();//Vejamos que erro foi gerado e quem o gerou.
        }
    }

}
W

Amigo tira o getInstace da CLass deixa a penas o forName(…);

W
Deixa + - assim
public static void main(String[] args) {
		Connection connection = null;
		try {
			String driverName = "oracle.jdbc.driver.OracleDriver";
			Class.forName(driverName);

			String serverName = "127.0.0.1";
			String portNumber = "1521";
			String sid = "mydatabase";
			String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
			String username = "username";
			String password = "password";
			connection = DriverManager.getConnection(url, username, password);

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
J

wesllhey e demais,

Editando, modifiquei essa linha, ficando assim agora, pois já havia criado a variável "con" que é do tipo Connection acima.

Veja se é isso, apesar que esta dando erro no "
Connection = DriverManager.getConnection(url, username, password);
" "
con = DriverManager.getConnection(url, username, password);
"

Ainda vou colocar o nome de usuário e senha do bancos, mas isso é detalhe.

package bancodedados;
import java.sql.*;
/**
 *
 * @author jean.carlos
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // A captura de exceções SQLException em Java é obrigatória para usarmos JDBC.
        // Para termos acesso ao objeto con, ele deve ter um escopo mais amplo que o bloco try
        Connection con =null;

        try{
            String driverName = "oracle.jdbc.odbc.JdbcOdbcDriver";
            Class.forName(driverName);

            String serverName = "10.1.254.36";
            String portNumber = "1521";
            String sid = "Megafort";
            String url = "jdbc:oracle:thin@" + serverName + ":" + portNumber + ":" + sid;
            String username = "";
            String password = "";
            con = DriverManager.getConnection(url, username, password);

            //Conexão com o banco de dados estabelecida.
            //Utilizamos o método createStatement de con para criar o Statement
            Statement stm = con.createStatement();

            //Executando o comando SQL.
            String SQL = "Select seqpessoa, status, fantasia, from ge_pessoa";

            //Definido o Statement, a Query será executada no banco de dados
            ResultSet rs = stm.executeQuery(SQL);

            //O método next() informa se houve resultados e posiciona o cursor do banco
            //Na próxima linha disponível para recuperação
            //Como esperamos várias linhas utilizamos um laço para recuperar os dados
            while(rs.next()){
                // Os métodos getXXX recuperam os dados de acordo com o tipo SQL do dado:  
                int seqPessoa = rs.getInt("seqpessoa");
                String status = rs.getString("status");
                String fantasia = rs.getString("fantasia");

                //Imprimindo os resultados retornados pela Query.
                System.out.println("SeqPessoa: "+seqPessoa+" Status: "+status+" Fantasia: "+fantasia);
            }

        }catch(ClassNotFoundException e){
            //Se houve algum erro, uma exceção é gerada para informar o erro.
            e.printStackTrace();//Vejamos que erro foi gerado e quem o gerou.
        }catch(SQLException e){
            e.printStackTrace();
        }
        finally{
            try{
                con.close();
            }catch(SQLException onConClose){
                System.out.println("Houve um erro ao fechar a conexão com o Banco de Dados");

                onConClose.printStackTrace();
            }
        }
    }

}
ttelsen

Não sei se o erro é referente ao que vou lhe falar, mas na sua String SQL tem um erro simples. Que é essa virgula depois do fantasia.

String SQL = “Select seqpessoa, status, fantasia, from ge_pessoa”;

ttelsen

jeancarlosaps
Dei uma ajeitada no seu código é só copiar e colar.
Não esqueça que você tem que importar o driver do oracle pro seu projeto.
Estou contando que vc sab o nome do usuário do banco, a senha a porta etc. E também que existe essa tabela no seu banco de dados.

package bancodedados; 

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

public class Main {

	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String[] args) {

		// A captura de exceções SQLException em Java é obrigatória para usarmos
		// JDBC.
		// Para termos acesso ao objeto con, ele deve ter um escopo mais amplo
		// que o bloco try
		Connection con = null;

		try {
			String driverName = "oracle.jdbc.odbc.JdbcOdbcDriver";
			String serverName = "10.1.254.36";
			String portNumber = "1521";
			String sid = "Megafort";
			String url = "jdbc:oracle:thin@" + serverName + ":" + portNumber + ":" + sid;
			String username = "SeuUsuarioDoBanco";
			String password = "Senha";
			
			Class.forName(driverName);
			con = DriverManager.getConnection(url, username, password);

			// Conexão com o banco de dados estabelecida.
			// Utilizamos o método createStatement de con para criar o Statement
			String SQL = "select * from ge_pessoa";
			Statement stm = con.createStatement();
			stm.execute(SQL);
			// Executando o comando SQL.
			// Definido o Statement, a Query será executada no banco de dados
			ResultSet rs = stm.executeQuery(SQL);

			// O método next() informa se houve resultados e posiciona o cursor
			// do banco
			// Na próxima linha disponível para recuperação
			// Como esperamos várias linhas utilizamos um laço para recuperar os
			// dados
			while (rs.next()) {
				// Os métodos getXXX recuperam os dados de acordo com o tipo SQL
				// do dado:
				int seqPessoa = rs.getInt("seqpessoa");
				String status = rs.getString("status");
				String fantasia = rs.getString("fantasia");

				// Imprimindo os resultados retornados pela Query.
				System.out.println("SeqPessoa: " + seqPessoa + " Status: "
						+ status + " Fantasia: " + fantasia);
			}

		} catch (ClassNotFoundException e) {
			// Se houve algum erro, uma exceção é gerada para informar o erro.
			e.printStackTrace();// Vejamos que erro foi gerado e quem o gerou.
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				con.close();
			} catch (SQLException onConClose) {
				System.out
						.println("Houve um erro ao fechar a conexão com o Banco de Dados");

				onConClose.printStackTrace();
			}
		}
	}

}
J

ttelsen

Eu preferi não copiar pra tentar entender o que você modificou e vi que você colocou o
stm.execute(SQL)
que eu não havia colocado e moveu algumas linhas para outros locais. Dai, eu modifiquei a linha
String driverName = "oracle.jdbc.odbc.JdbcOdbcDriver";
para:
String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";

Nisso, os erros diminuíram bastante.
Só não entendi quando você disse que teria que importar o driver do Oracle pro meu projeto.

Como seria isso?

Agora o código ficou assim e os erros abaixo:

package bancodedados;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
 *
 * @author jean.carlos
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // A captura de exceções SQLException em Java é obrigatória para usarmos JDBC.
        // Para termos acesso ao objeto con, ele deve ter um escopo mais amplo que o bloco try
        Connection con =null;

        try{
            String driverName = "sun.jdbc.odbc.JdbcOdbcDriver";
            String serverName = "10.1.254.36";
            String portNumber = "1521";
            String sid = "Megafort";
            String url = "jdbc:oracle:thin@" + serverName + ":" + portNumber + ":" + sid;
            String username = "ecorpore";
            String password = "mega1111";

            Class.forName(driverName);
            con = DriverManager.getConnection(url, username, password);

            //Conexão com o banco de dados estabelecida.
            //Utilizamos o método createStatement de con para criar o Statement
            String SQL = "Select * from ge_pessoa";
            Statement stm = con.createStatement();
            stm.execute(SQL);
            //Executando o comando SQL.
            //Definido o Statement, a Query será executada no banco de dados
            ResultSet rs = stm.executeQuery(SQL);

            //O método next() informa se houve resultados e posiciona o cursor do banco
            //Na próxima linha disponível para recuperação
            //Como esperamos várias linhas utilizamos um laço para recuperar os dados
            while(rs.next()){
                // Os métodos getXXX recuperam os dados de acordo com o tipo SQL do dado:  
                int seqPessoa = rs.getInt("seqpessoa");
                String status = rs.getString("status");
                String fantasia = rs.getString("fantasia");

                //Imprimindo os resultados retornados pela Query.
                System.out.println("SeqPessoa: " + seqPessoa + " Status: "
                        + status + " Fantasia: " + fantasia);
            }

        }catch(ClassNotFoundException e){
            //Se houve algum erro, uma exceção é gerada para informar o erro.
            e.printStackTrace();//Vejamos que erro foi gerado e quem o gerou.
        }catch(SQLException e){
            e.printStackTrace();
        }
        finally{
            try{
                con.close();
            }catch(SQLException onConClose){
                System.out.println("Houve um erro ao fechar a conexão com o Banco de Dados");

                onConClose.printStackTrace();
            }
        }
    }

}

Erros:

run:
java.sql.SQLException: No suitable driver found for jdbc:oracle:thin@10.1.254.36:1521:Megafort
        at java.sql.DriverManager.getConnection(DriverManager.java:602)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at bancodedados.Main.main(Main.java:33)
Exception in thread "main" java.lang.NullPointerException
        at bancodedados.Main.main(Main.java:66)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)
ttelsen:
jeancarlosaps Dei uma ajeitada no seu código é só copiar e colar. Não esqueça que você tem que importar o driver do oracle pro seu projeto. Estou contando que vc sab o nome do usuário do banco, a senha a porta etc. E também que existe essa tabela no seu banco de dados.
package bancodedados; 

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

public class Main {

	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String[] args) {

		// A captura de exceções SQLException em Java é obrigatória para usarmos
		// JDBC.
		// Para termos acesso ao objeto con, ele deve ter um escopo mais amplo
		// que o bloco try
		Connection con = null;

		try {
			String driverName = "oracle.jdbc.odbc.JdbcOdbcDriver";
			String serverName = "10.1.254.36";
			String portNumber = "1521";
			String sid = "Megafort";
			String url = "jdbc:oracle:thin@" + serverName + ":" + portNumber + ":" + sid;
			String username = "SeuUsuarioDoBanco";
			String password = "Senha";
			
			Class.forName(driverName);
			con = DriverManager.getConnection(url, username, password);

			// Conexão com o banco de dados estabelecida.
			// Utilizamos o método createStatement de con para criar o Statement
			String SQL = "select * from ge_pessoa";
			Statement stm = con.createStatement();
			stm.execute(SQL);
			// Executando o comando SQL.
			// Definido o Statement, a Query será executada no banco de dados
			ResultSet rs = stm.executeQuery(SQL);

			// O método next() informa se houve resultados e posiciona o cursor
			// do banco
			// Na próxima linha disponível para recuperação
			// Como esperamos várias linhas utilizamos um laço para recuperar os
			// dados
			while (rs.next()) {
				// Os métodos getXXX recuperam os dados de acordo com o tipo SQL
				// do dado:
				int seqPessoa = rs.getInt("seqpessoa");
				String status = rs.getString("status");
				String fantasia = rs.getString("fantasia");

				// Imprimindo os resultados retornados pela Query.
				System.out.println("SeqPessoa: " + seqPessoa + " Status: "
						+ status + " Fantasia: " + fantasia);
			}

		} catch (ClassNotFoundException e) {
			// Se houve algum erro, uma exceção é gerada para informar o erro.
			e.printStackTrace();// Vejamos que erro foi gerado e quem o gerou.
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				con.close();
			} catch (SQLException onConClose) {
				System.out
						.println("Houve um erro ao fechar a conexão com o Banco de Dados");

				onConClose.printStackTrace();
			}
		}
	}

}
ttelsen

olha o erro:

run:

java.sql.SQLException: No suitable driver found for jdbc:oracle:thin@10.1.254.36:1521:Megafort

at java.sql.DriverManager.getConnection(DriverManager.java:602)

at java.sql.DriverManager.getConnection(DriverManager.java:185)

at bancodedados.Main.main(Main.java:33)

Exception in thread main java.lang.NullPointerException

at bancodedados.Main.main(Main.java:66)

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

é justamente referente ao driver que está faltando no seu projeto.
Antes de prosseguir tentando resolver o problema preciso saber se vc está usando alguma IDE (NETBEANS ou ECLIPSE)?

J

ttelsen

Depois que parei pra analisar o erro mesmo.

Estou usando a IDE Netbeans 6.7.1

ttelsen:
olha o erro:

run:

java.sql.SQLException: No suitable driver found for jdbc:oracle:thin@10.1.254.36:1521:Megafort

at java.sql.DriverManager.getConnection(DriverManager.java:602)

at java.sql.DriverManager.getConnection(DriverManager.java:185)

at bancodedados.Main.main(Main.java:33)

Exception in thread main java.lang.NullPointerException

at bancodedados.Main.main(Main.java:66)

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

é justamente referente ao driver que está faltando no seu projeto.
Antes de prosseguir tentando resolver o problema preciso saber se vc está usando alguma IDE (NETBEANS ou ECLIPSE)?

adriano_si

jeancarlosaps:
ttelsen

Depois que parei pra analisar o erro mesmo.

Estou usando a IDE Netbeans 6.7.1

ttelsen:
olha o erro:

run:

java.sql.SQLException: No suitable driver found for jdbc:oracle:thin@10.1.254.36:1521:Megafort

at java.sql.DriverManager.getConnection(DriverManager.java:602)

at java.sql.DriverManager.getConnection(DriverManager.java:185)

at bancodedados.Main.main(Main.java:33)

Exception in thread main java.lang.NullPointerException

at bancodedados.Main.main(Main.java:66)

Java Result: 1

CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

é justamente referente ao driver que está faltando no seu projeto.
Antes de prosseguir tentando resolver o problema preciso saber se vc está usando alguma IDE (NETBEANS ou ECLIPSE)?

Jean, todas as conexões Java (conforme você mesmo já concluiu) precisa do JDBC para a conexão. Essa classe: sun.jdbc.odbc.JdbcOdbcDriver está dentro de um .jar que você tem que baixar e usar como conector do seu banco dentro do projeto.

Segue a página de download de acordo com a versão do Oracle que você usa: http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

Um detalhe, verifique se a class passada é essa sun.jdbc.odbc.JdbcOdbcDriver mesmo, pois penso que a do Oracle é bem diferente cara…

Enfim, qualquer coisa a mais, grita ae.

Abs []

J

adriano_si

Então cara, eu já até estou neste site ontem possui os drivers.
Já procurei saber aqui na empresa, e a versão do Oracle que temos é a 10.2.0.1.0 e vi sim que tem esse driver, mas como tem várias versões e informações lá, estou um tanto quanto perdido.

A minha versão do JDK é jdk1.6.0_31.

Bom, ainda pesquisando e entrando na parte que vc disse sobre a url, vi alguns exemplos assim e até mudei no meu código e vou te passar os erros:

String driverName = "oracle.jdbc.OracleDriver"; //nesta parte, estava sun.jdbc.odbc.JdbcOdbcDriver String serverName = "10.1.254.36"; String portNumber = "1521"; String sid = "Megafort"; String url = "jdbc:oracle:thin@ORCL" + serverName + ":" + portNumber + ":" + sid; //E aqui, estava apenas sem o ORCL String username = "ecorpore"; String password = "mega1111";

Acho que pode ser realmente assim, pois o cara da infra me disse que tem mesmo esse ORCL ( que até então não sei o que é…rsrs)

O erro é o seguinte com essas modificações:

run: java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at bancodedados.Main.main(Main.java:32) Exception in thread "main" java.lang.NullPointerException at bancodedados.Main.main(Main.java:66) Java Result: 1 CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

To gostando disso, pq estou realmente quebrando a cabeça e entendendo o que estou fazendo.

Ah, e onde eu coloco, em que pasta, esse .jar? Na Raiz da pasta do projeto, na SRC,na Test??

Obrigado desde já pessoal.

ttelsen

Então. como a adriano citou a respeito do class passado se nao for esse que vc está passando tente o “oracle.jdbc.odbc.JdbcOdbcDriver”.

Depois:
Lá em downloads verifique a versão do seu Oracle e baixe corretamente de acordo com seu BD.

E por fim:
Depois de baixado o driver, que é um arquivo .jar vc vai no NetBeans botao direito em cima do seu projeto PROPRIEDADES depois BIBLIOTECAS - Adicionar JAR/pasta e seleciona o .jar do oracle que vc baixou. Com isso vc ja resolve o problema do driver!
Executa e diz pra gente o resultado

J

ttelsen e adriano_si

Fiz as modificações e não deu em nada. Estou só confuso em qual driver baixar lá do site.
Pelo que vi, o que mais se aproxima é o: ojdbc14.jar (1,569,316 bytes) - classes for use with JDK 1.4 and 1.5, pois não sei dos outros.

Segue o código e o erro:

package bancodedados;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
 *
 * @author jean.carlos
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // A captura de exceções SQLException em Java é obrigatória para usarmos JDBC.
        // Para termos acesso ao objeto con, ele deve ter um escopo mais amplo que o bloco try
        Connection con =null;

        try{
            String driverName = "oracle.jdbc.odbc.JdbcOdbcDriver";
            String serverName = "10.1.254.36";
            String portNumber = "1521";
            String sid = "Megafort";
            String url = "jdbc:oracle:thin@ORCL" + serverName + ":" + portNumber + ":" + sid;
            String username = "ecorpore";
            String password = "mega1111";

            Class.forName(driverName);
            con = DriverManager.getConnection(url, username, password);

            //Conexão com o banco de dados estabelecida.
            //Utilizamos o método createStatement de con para criar o Statement
            String SQL = "Select * from ge_pessoa";
            Statement stm = con.createStatement();
            stm.execute(SQL);
            //Executando o comando SQL.
            //Definido o Statement, a Query será executada no banco de dados
            ResultSet rs = stm.executeQuery(SQL);

            //O método next() informa se houve resultados e posiciona o cursor do banco
            //Na próxima linha disponível para recuperação
            //Como esperamos várias linhas utilizamos um laço para recuperar os dados
            while(rs.next()){
                // Os métodos getXXX recuperam os dados de acordo com o tipo SQL do dado:  
                int seqPessoa = rs.getInt("seqpessoa");
                String status = rs.getString("status");
                String fantasia = rs.getString("fantasia");

                //Imprimindo os resultados retornados pela Query.
                System.out.println("SeqPessoa: " + seqPessoa + " Status: "
                        + status + " Fantasia: " + fantasia);
            }

        }catch(ClassNotFoundException e){
            //Se houve algum erro, uma exceção é gerada para informar o erro.
            e.printStackTrace();//Vejamos que erro foi gerado e quem o gerou.
        }catch(SQLException e){
            e.printStackTrace();
        }
        finally{
            try{
                con.close();
            }catch(SQLException onConClose){
                System.out.println("Houve um erro ao fechar a conexão com o Banco de Dados");

                onConClose.printStackTrace();
            }
        }
    }

}

Erro:

run:
java.lang.ClassNotFoundException: oracle.jdbc.odbc.JdbcOdbcDriver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at bancodedados.Main.main(Main.java:32)
Exception in thread "main" java.lang.NullPointerException
        at bancodedados.Main.main(Main.java:66)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)
ttelsen:
Então. como a adriano citou a respeito do class passado se nao for esse que vc está passando tente o "oracle.jdbc.odbc.JdbcOdbcDriver".

Depois:
Lá em downloads verifique a versão do seu Oracle e baixe corretamente de acordo com seu BD.

E por fim:
Depois de baixado o driver, que é um arquivo .jar vc vai no NetBeans botao direito em cima do seu projeto PROPRIEDADES depois BIBLIOTECAS - Adicionar JAR/pasta e seleciona o .jar do oracle que vc baixou. Com isso vc ja resolve o problema do driver!
Executa e diz pra gente o resultado

adriano_si

Você está usando o .jar certo cara…

Tenta essa classe Driver

String driverName = "oracle.jdbc.driver.OracleDriver";

Abs []

[EDIT] - Se quiser verificar porque, você pode abrir seu .jar como um ZIP da vida e explorar esse diretório dentro do seu ojdbc14.jar só pra constar se essa classe realmente existe.

J

adriano_si

Editei e até abri o .jar.
Vi que dentro dele tem sim a classe OracleDriver:

oracle/jdbc/driver/OracleDriver.class em C:\Users\jean.carlos.MEGAFORTMG\Documents\NetBeansProjects\BancoDeDados\ojdbc14dms_g.jar

Agora o erro muda:

run: java.sql.SQLException: URL Oracle Inválido especificado at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:145) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:190) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:286) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:549) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:185) at bancodedados.Main.main(Main.java:34) Exception in thread "main" java.lang.NullPointerException at bancodedados.Main.main(Main.java:67) Java Result: 1 CONSTRUÍDO COM SUCESSO (tempo total: 1 segundo)

E infelizmente, se eu não conseguir isso hoje, só mesmo segunda-feira, pois já viu neh, estagiário não pode ficar além do horário…rsrsr

adriano_si:
Você está usando o .jar certo cara…

Tenta essa classe Driver

String driverName = "oracle.jdbc.driver.OracleDriver";

Abs []

[EDIT] - Se quiser verificar porque, você pode abrir seu .jar como um ZIP da vida e explorar esse diretório dentro do seu ojdbc14.jar só pra constar se essa classe realmente existe.

adriano_si

cara use o ojdbc14.jar e não o dms_g…

Parece que não tem nada a ver, pois na descrição da Oracle, me parece que são os mesmos Jars com a adição de um Tracing no dms_g…

Todavia, o erro (pelo o que está descrito na Exception), está reclamando da URL que você está utilizando na conexão.

Abs []

[EDIT] - Essa linha está estranha:

String url = "jdbc:oracle:thin@ORCL" + serverName + ":" + portNumber + ":" + sid;

Tente tirar esse ORCL que está sem sentido na URL…

Todavia, segue um breve Tuto que pode lhe ajudar: http://netbeans.org/kb/docs/ide/oracle-db_pt_BR.html

Qualquer coisa grita aí.

Abs [] e bons estudos.

ttelsen

Dica pra não parar:
Baixa o OracleXP coisa assim que é gratis e continua tentando na sua casa! cria um usuario, banco uma tabela e manda v.
Até conseguir fazer pelo menos a conexao com o banco de dados!

abraço.

J

Bom dia Pessoal.

De antemão, grato demais pela ajuda de vocês...

Bom, como ainda to sem net em casa e não tive como levar pra fazer testes em casa, vim bem cedo pro trampo pra fazer o possível pra terminar essa pendência, pois meu chefe já perguntou se consegui ao menos conectar ao banco.rs

Bom, o que fiz e percebi:

1 - Removi o driver oracle e baixei novamente o ojdbc14.jar e coloquei no seu devido local. 2 - Retirei o ORCL da linha, ficando assim agora:
String url = "jdbc:oracle:thin@" + serverName + ":" + portNumber + ":" + sid;
;

O que me intriga é que ainda o erro esta se referindo a URL, como sendo inválida.
Esse "sid", é um nome que dou pro meu banco ou tem que se referir à alguma coisa em específico?

Creio que que não falte mais nada, pois o servername é o nome(IP) do servidor, a porta já ta certinha, só esse sid que fiquei com dúvida agora, e tbm esse começo "jdbc:oracle:thin@".

Continuo aqui nas pesquisas e estou vendo tbm esse tuto que o adriano_si me passou.

Abraços.

PS.: Uma observação que acabei de ver no tutorial, será que neste caso seja necessário eu fazer esse passo a passo:

Inicie o banco de dados Oracle:
Abra a janela Serviços (Janela > Serviços ou Ctrl-5;⌘-5 no Mac). Na janela Serviços, clique com o botão direito do mouse no  Bancos de dados e escolha Nova conexão.

No assistente de Nova conexão, selecione Oracle Thin na lista suspensa Driver.
Clique em Adicionar e encontre o arquivo ojdbc6.jar que foi baixado anteriormente. Clique em Próximo.
No painel Personalizar conexão do assistente, insira os seguintes valores e clique em Próximo. 
Nome	Valor
Nome do driver	Oracle Thin (com ID de serviço - SID)
Máquina	localhost ou 127.0.0.1. 
Observação: No caso de uma conexão remota, forneça um endereço IP ou nome de host resolvível da máquina onde o banco de dados está instalado.
Porta	1521 (padrão)
ID do serviço (SID)	XE (SID padrão para Oracle Database XE).
Observação: Se você estiver se conectando a um banco de dados remoto, peça ao administrador do banco de dados que forneça o SID do banco de dados.
Nome do usuário	
Indique o nome do usuário. 
Para os fins do nosso tutorial, insira system (a conta padrão de administrador de banco de dados) e a senha que foi usada durante a instalação do banco de dados.
Password	Insira a senha para o nome de usuário selecionado.
J

Pessoal, fiz uma coisa que me deu uma luz, mas queria um “help” maior de vocês.

Fui em Serviços>Banco de Dados>botão direito em> Oracle Thin.

Escolhi a opção Conectar Utilizando> Oracle Thin (com TNS Name(v10.2.0.1.0 ou superior) - Que é a minha versão do oracle -

Em opções tem:

TNS Name: coloquei o mesmo que esta no arquivo de configuração do Oracle - MEGAFORT
Nome de usuário:
Senha:

E mandei mostrar URL JDBC que ficou assim: jdbc:oracle:oci:@MEGAFORT.
Quando avancei, ele já apareceu o que queria conectar - ECORPORE - e deu certo. Conecta de boa e tudo mais.

E ai, alguma ideia do que posso modificar, pq realmente, o problema esta na URL.

J

Pessoal, seguinte - CONECTOUUUUUUUUUUUU!!!!!

Mas assim, deem uma olhada no código, especialmente na URL, pois tem haver com o que postei abaixo e me digam o que posso melhorar, pois o seguinte, agora vou ter que fazer a conexão a três instâncias do banco, sendo elas: MEGAFOR - SINDI E BACKUP, para ai sim, trazer os dados das selects que vamos fazer daqui em diante.

package bancodedados;

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

/**
 *
 * @author jean.carlos
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // A captura de exceções SQLException em Java é obrigatória para usarmos JDBC.
        // Para termos acesso ao objeto con, ele deve ter um escopo mais amplo que o bloco try
        Connection con =null;

        try{
            String driverName = "oracle.jdbc.driver.OracleDriver";
            String serverName = "10.1.254.36";
            String portNumber = "1521";
            String sid = "MEGAFORT";
            String url = "jdbc:oracle:oci:@MEGAFORT";//"jdbc:oracle:thin@" + serverName + ":" + portNumber + ":" + sid;
            String username = "ecorpore";
            String password = "mega1111";

            Class.forName(driverName);
            con = DriverManager.getConnection(url, username, password);

            //Conexão com o banco de dados estabelecida.
            //Utilizamos o método createStatement de con para criar o Statement
            String SQL = "Select * from ge_pessoa";
            Statement stm = con.createStatement();
            stm.execute(SQL);
            //Executando o comando SQL.
            //Definido o Statement, a Query será executada no banco de dados
            ResultSet rs = stm.executeQuery(SQL);

            //O método next() informa se houve resultados e posiciona o cursor do banco
            //Na próxima linha disponível para recuperação
            //Como esperamos várias linhas utilizamos um laço para recuperar os dados
            while(rs.next()){
                // Os métodos getXXX recuperam os dados de acordo com o tipo SQL do dado:  
                int seqPessoa = rs.getInt("seqpessoa");
                String status = rs.getString("status");
                String fantasia = rs.getString("fantasia");

                //Imprimindo os resultados retornados pela Query.
                System.out.println("SeqPessoa: " + seqPessoa + " Status: "
                        + status + " Fantasia: " + fantasia);
            }

        }catch(ClassNotFoundException e){
            //Se houve algum erro, uma exceção é gerada para informar o erro.
            e.printStackTrace();//Vejamos que erro foi gerado e quem o gerou.
        }catch(SQLException e){
            e.printStackTrace();
        }
        finally{
            try{
                con.close();
            }catch(SQLException onConClose){
                System.out.println("Houve um erro ao fechar a conexão com o Banco de Dados");

                onConClose.printStackTrace();
            }
        }
    }

}
jeancarlosaps:
Pessoal, fiz uma coisa que me deu uma luz, mas queria um "help" maior de vocês.

Fui em Serviços>Banco de Dados>botão direito em> Oracle Thin.

Escolhi a opção Conectar Utilizando> Oracle Thin (com TNS Name(v10.2.0.1.0 ou superior) - Que é a minha versão do oracle -

Em opções tem:

TNS Name: coloquei o mesmo que esta no arquivo de configuração do Oracle - MEGAFORT
Nome de usuário:
Senha:

E mandei mostrar URL JDBC que ficou assim: jdbc:oracle:oci:@MEGAFORT.
Quando avancei, ele já apareceu o que queria conectar - ECORPORE - e deu certo. Conecta de boa e tudo mais.

E ai, alguma ideia do que posso modificar, pq realmente, o problema esta na URL.

adriano_si

Jean… Seu Sistema será Desktop mesmo ???

J

adriano_si

Sim cara, o meu coordenador pediu para que eu tetasse desenvolve-lo como sendo Web.

Até achei um framework bem legal, mas porém não web, fiz uma telinha simples e isso já o animou.

Agora gostaria de algumas ideias de como fazer isso, porém Web.

Já vi algumas coisas como Hibernate, Structs e outras tecnologias/frameworks que posso utilizar, mas como isso, alem de ser uma experiência pra mim, será um mega desafio.

Conto com o que vocês puderem me passar.

Grato.

adriano_si

Pois bem… A pergunta foi mais por questão de lhe indicar o uso de Data Sources para a conexão com mais de um Banco de Dados…

Como vc está estudando e ainda aprendendo, o ideal seria “começar do começo” realmente, porém não sei se tens tempo hábil pra isso, isso é uma coisa que só você pode responder.

Caso não tenha o tempo hábil (nesse projeto) de estudar enquanto faz a aplicação, eu aconselharia que vc desse uma olhada na combinação JSF - EJB - JPA.

ODEIO aconselhar Framework antes de conhecimento básico, mas o fiz porque creio que vc não tem o tempo pra aprender conceitos de Servlets e JSP antes…

Mas cara, uma dica, estude a Linguagem Java primeiro… Aprenda conceitos de OO em Java, Collections, Threads, Conexões JDBC, conceitos de I/O, etc. Só depois disso, estude Servlets e JSP, sem deixar de dar importância para como funciona o JEE, como os AS tratam solicitações HTTP, o que são solicitações HTTP (acredite, tem gente que trabalha com WEB há um bom tempo e não sabe), etc.

Certificações são bem-vindas pois constituem um desafio e forçam o estudo com pegadinhas que caem nas provas… Enfim…

Resumindo meu conselho, faça seu Sistema com os Frameworks que lhe indiquei acima, mas estude o básico, esqueça os Frameworks depois e se dedique aos fundamentos… Se é que isso é possível…

Se tiver tempo hábil, faça o certo, comece por baixo desde o início…

Abs []

J

adriano_si

Cara, obrigado pelos toques, mas já te falando de antemão:

É exatamente o que estou fazendo

Como disse, sou estagiário, estudante de análise e desenvolvimento de sistemas e no curso, tive muitos problemas com as matérias de programação. Não pq tive dificuldades, mas pq elas não foram ensinadas de maneira satisfatória e por problemas da instituição. E infelizmente, eu e outros alunos estão pagando por isso.
Como tenho grande experiência com infraestrutura e agora que consegui um estágio em desenvolvimento, é que estou realmente fazendo de tudo pra praticar e correndo atrás.

Estudo sim, baixei alguns cursos de java básico, web e intermediário para poder ir treinando e estou fazendo sim, tudo em paralelo.

Neste projeto em questão, ninguém aqui na empresa tem conhecimentos de java, por isso tenho que correr com minhas próprias e fazer o melhor.
Com isso, vou aprendendo e praticando sacou?

E assim vou. Sei que é complicado, mas neste momento não tenho outra alternativa.

Quanto aos frameworks que você me indicou, estou estudando e fazendo tutoriais e testes sobre os mesmos.
Mas se tiver alguma dica de estudo, tutoriais e afins, pode me mandar, fico agradecido demais.

Criado 31 de julho de 2012
Ultima resposta 8 de ago. de 2012
Respostas 30
Participantes 8