Ola, fiz um script para retornar um XML após uma consulta ao Banco de dados.
o mesmo script funciona perfeitamente no BD Postgre mas no BD Oracle 11g não estou conseguindo ja testei dois driver um ojdbc14.jar e o ojdbc6.jar porem ele se conecta e não executa o rs.next alguem consegue me ajudar nessa situação. Segue o script abaixo.
[code]package AcessoBD;
Seguinte estou usando o driver ojdbct6.jar para conexao com o banco!
porém vc fez a chamada do driver e o class.forname de forma incorreta, acertei o que vc fez e deu certinho sem problemas!
Procure nao fazer a chamada do driver de conexao na propria classe, eu fiz outra classe para conexao, veja a forma melhor de fazer!!!
vou colocar os arquivos aqui , qualquer coisa estou a disposição!!!
Classe para Conexao
package connectionfactory;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public Connection getConnection() throws ClassNotFoundException, SQLException {
try {
Class.forName("oracle.jdbc.OracleDriver");
return DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1522/ORCL12G", "login", "senha");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
Sua nova Classe arrumada
package AcessoBD;
import connectionfactory.ConnectionFactory;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
public class AcessoBD_Oracle {
public static void main(String[] args) throws IOException, SQLException {
try {
Connection con = new ConnectionFactory().getConnection();
try {
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM clientes");
BufferedWriter arquivo;
arquivo = new BufferedWriter(new FileWriter("./arquivo1.xml"));
arquivo.write("<?xml version='1.0' encoding='UTF-8' ?> ");
arquivo.write(System.getProperty("line.separator"));
arquivo.write("<lista_funcionarios>");
arquivo.write(System.getProperty("line.separator"));
// processa o resultado da consulta e escreve no arquivo XML.
while (rs.next()) {
System.out.println(rs.getString("idusuario"));
/*arquivo.write("<funcionario>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write(" <codigo_f>" + rs.getString("CodigoFuncionario") + "</codigo_f>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write(" <nome_f>" + rs.getString("NomeFuncionario") + "</nome_f>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write(" <numero_filhos_f>" + rs.getString("NumeroFilhos") + "</numero_filhos_f>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write("</funcionario>");
arquivo.write(System.getProperty("line.separator"));
*
*/
arquivo.write("<idusuario>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write("<nome>" + rs.getString("nome") + "</nome>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write("<login>" + rs.getString("login") + "</login>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write("<senha>" + rs.getString("senha") + "</senha>");
arquivo.write(System.getProperty("line.separator"));
}
// finaliza o arquivo XML.
arquivo.write("</lista_funcionarios>");
arquivo.write(System.getProperty("line.separator"));
arquivo.flush();
arquivo.close();
System.out.println("Arquivo.xml gerado");
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Problemas ao conectar com o BD;" + e.getMessage());
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "Não encontrei o driver JDBC:" + e.getMessage());
}
}
}
Só vim dar conselho. Procure usar uma API para gerar seu XML usando objeto, ao invés de usar um Writer da vida.
Eu diria para utilizar o JAXB, é simples e eficiente. Outro conselho que já vi muitos dando (nunca usei) é utilizar o XStream.
Se decidir utilizar o writer, acho mais vantajoso, inclusive em termos de perfomance (mesmo que seja pouco), usar um StringBuffer para gerar o seu XML e ao fim, aplicar isso ao seu writer, ao invés de ir escrevendo linha a linha.
Só vim dar conselho. Procure usar uma API para gerar seu XML usando objeto, ao invés de usar um Writer da vida.
Eu diria para utilizar o JAXB, é simples e eficiente. Outro conselho que já vi muitos dando (nunca usei) é utilizar o XStream.
Se decidir utilizar o writer, acho mais vantajoso, inclusive em termos de perfomance (mesmo que seja pouco), usar um StringBuffer para gerar o seu XML e ao fim, aplicar isso ao seu writer, ao invés de ir escrevendo linha a linha.
Fica a seu critério.[/quote]
[quote]
Muito Obrigado pela dica, tenho mais uma duvida se puder me ajudar agradeço desde já.
Gostaria de fazer um .properties onde irei colocar a consulta que será executada. o nome do Arquivo XML que será criado e o caminho físico onde este arquivo será salvo.
teira como me auxiliar para realizar da melhor forma possivel.
Seguinte estou usando o driver ojdbct6.jar para conexao com o banco!
porém vc fez a chamada do driver e o class.forname de forma incorreta, acertei o que vc fez e deu certinho sem problemas!
Procure nao fazer a chamada do driver de conexao na propria classe, eu fiz outra classe para conexao, veja a forma melhor de fazer!!!
vou colocar os arquivos aqui , qualquer coisa estou a disposição!!!
Classe para Conexao
package connectionfactory;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public Connection getConnection() throws ClassNotFoundException, SQLException {
try {
Class.forName("oracle.jdbc.OracleDriver");
return DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1522/ORCL12G", "login", "senha");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
Sua nova Classe arrumada
package AcessoBD;
import connectionfactory.ConnectionFactory;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
public class AcessoBD_Oracle {
public static void main(String[] args) throws IOException, SQLException {
try {
Connection con = new ConnectionFactory().getConnection();
try {
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM clientes");
BufferedWriter arquivo;
arquivo = new BufferedWriter(new FileWriter("./arquivo1.xml"));
arquivo.write("<?xml version='1.0' encoding='UTF-8' ?> ");
arquivo.write(System.getProperty("line.separator"));
arquivo.write("<lista_funcionarios>");
arquivo.write(System.getProperty("line.separator"));
// processa o resultado da consulta e escreve no arquivo XML.
while (rs.next()) {
System.out.println(rs.getString("idusuario"));
/*arquivo.write("<funcionario>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write(" <codigo_f>" + rs.getString("CodigoFuncionario") + "</codigo_f>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write(" <nome_f>" + rs.getString("NomeFuncionario") + "</nome_f>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write(" <numero_filhos_f>" + rs.getString("NumeroFilhos") + "</numero_filhos_f>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write("</funcionario>");
arquivo.write(System.getProperty("line.separator"));
*
*/
arquivo.write("<idusuario>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write("<nome>" + rs.getString("nome") + "</nome>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write("<login>" + rs.getString("login") + "</login>");
arquivo.write(System.getProperty("line.separator"));
arquivo.write("<senha>" + rs.getString("senha") + "</senha>");
arquivo.write(System.getProperty("line.separator"));
}
// finaliza o arquivo XML.
arquivo.write("</lista_funcionarios>");
arquivo.write(System.getProperty("line.separator"));
arquivo.flush();
arquivo.close();
System.out.println("Arquivo.xml gerado");
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Problemas ao conectar com o BD;" + e.getMessage());
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "Não encontrei o driver JDBC:" + e.getMessage());
}
}
}
[/quote]
[quote]Muito obrigado pela dica.
Abraços até mais
[/quote]