Xml from java
Hola quiero conectarme a una base de datos Paradox y obtener una consulta para luego crear un archivo xml, lo que pasa que me lo crea pero no me lo escribe, creo que la consulta la hace correctamente pero no se que pasa que le sale este error:
Compile:
run:
java.sql.SQLException: [Microsoft][Administrador de controladores ODBC] Índice de descriptor no válido
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLColAttributesString(JdbcOdbc.java:2668)
at sun.jdbc.odbc.JdbcOdbcResultSetMetaData.getColAttributeString(JdbcOdbcResultSetMetaData.java:793)
at sun.jdbc.odbc.JdbcOdbcResultSetMetaData.getColumnName(JdbcOdbcResultSetMetaData.java:355)
el codigo es este
import java.sql.Connection;
import java.sql.Statement;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.io.*;
class JDBCapp {
static Connection con;
public static void main (String args[]) {
ResultSet rs = null;
Statement stmt = null;
String sql, nombre;
try {
// conexion base de datos
con = AccessCon.getConnection();
sql = "select * from HISTCOMM";
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int colCount = rsmd.getColumnCount();
java.io.FileWriter fw= new java.io.FileWriter("c:/consulton.xml");
fw.write("<?xml version=\"1.0\" ?>");
int numColumnas = rs.getMetaData().getColumnCount();
String[] nombreColumnas = new String[numColumnas];
for (int i=0; i<numColumnas; i++){
nombreColumnas = rs.getMetaData().getColumnName(i);
}
while(rs.next()){
fw.write(System.getProperty("line.separator"));
fw.write("<registro>");
fw.write(System.getProperty("line.separator"));
for (int i=0; i<numColumnas; i++){
fw.write(" <" + nombreColumnas + ">" + rs.getString(i) + "</" + nombreColumnas + ">");
fw.write(System.getProperty("line.separator"));
}
fw.write("</registro>");
fw.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if (con != null) con.close();
if (stmt != null) stmt.close();
if (rs != null) rs.close();
}
catch (Exception e) {
}
}
}
}
class AccessCon {
public static Connection getConnection() throws Exception {
Driver d = (Driver)Class.forName
("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
Connection c = DriverManager.getConnection
("jdbc:odbc:datos");
return c;
}
}
Es un pequeño prototipo para luego pasarlo ala aplicación grande, muchas gracias por la ayuda
Compile:
run:
java.sql.SQLException: [Microsoft][Administrador de controladores ODBC] Índice de descriptor no válido
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLColAttributesString(JdbcOdbc.java:2668)
at sun.jdbc.odbc.JdbcOdbcResultSetMetaData.getColAttributeString(JdbcOdbcResultSetMetaData.java:793)
at sun.jdbc.odbc.JdbcOdbcResultSetMetaData.getColumnName(JdbcOdbcResultSetMetaData.java:355)
el codigo es este
import java.sql.Connection;
import java.sql.Statement;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.io.*;
class JDBCapp {
static Connection con;
public static void main (String args[]) {
ResultSet rs = null;
Statement stmt = null;
String sql, nombre;
try {
// conexion base de datos
con = AccessCon.getConnection();
sql = "select * from HISTCOMM";
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int colCount = rsmd.getColumnCount();
java.io.FileWriter fw= new java.io.FileWriter("c:/consulton.xml");
fw.write("<?xml version=\"1.0\" ?>");
int numColumnas = rs.getMetaData().getColumnCount();
String[] nombreColumnas = new String[numColumnas];
for (int i=0; i<numColumnas; i++){
nombreColumnas = rs.getMetaData().getColumnName(i);
}
while(rs.next()){
fw.write(System.getProperty("line.separator"));
fw.write("<registro>");
fw.write(System.getProperty("line.separator"));
for (int i=0; i<numColumnas; i++){
fw.write(" <" + nombreColumnas + ">" + rs.getString(i) + "</" + nombreColumnas + ">");
fw.write(System.getProperty("line.separator"));
}
fw.write("</registro>");
fw.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if (con != null) con.close();
if (stmt != null) stmt.close();
if (rs != null) rs.close();
}
catch (Exception e) {
}
}
}
}
class AccessCon {
public static Connection getConnection() throws Exception {
Driver d = (Driver)Class.forName
("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
Connection c = DriverManager.getConnection
("jdbc:odbc:datos");
return c;
}
}
Es un pequeño prototipo para luego pasarlo ala aplicación grande, muchas gracias por la ayuda
1 Respuesta
Respuesta de jmaiques
1