Xml from java
De nuevo aquí, esto es de locos, ya no se si es por la base de datos o por que ando nula, 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.
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.
1 respuesta
Respuesta de krlosnow
1