DatabaseMetaData

dulanblade
08 de Febrero del 2006
Hola, tengo esta duda, quiero actuar con el objeto databasemetadata y access, para ello me creo una BD access con 2 tablas (emp y dept) y hago la conexion ODBC, una vez echo esto me pongo a programar, utilizo un JSP y un Bean, pero no me salen los nombres de las tablas :-(, el ejercicio consiste en que me salga una lista desplegable con los nombres de las tablas del metadata.

J1.JSP

<%@ page contentType=\"text/html;charset=windows-1252\" import=\"Sept.Datos\"%>
<jsp:useBean id=\"d\" class=\"Sept.Datos\" scope=\"session\" />

<%
String seleccionado = request.getParameter(\"select0\");
if((seleccionado!=null)&&(!seleccionado.equals(\"\")))
{
d.seleccionado = seleccionado;
}

%>

<html>
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1252\">
<title>
ExaSept05Dic
</title>
</head>
<body>
<form>
<select name=\"select0\" onChange=\"submit()\">
<%=d.Select0()%>
</select><br><br>
</form>
</body>
</html>

DATOS.JAVA

package Sept;
import java.sql.*;

public class Datos
{
public String seleccionado;
DatabaseMetaData dbmd;
public Datos()
{
try
{
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
Connection cn = DriverManager.getConnection(\"jdbc:odbc:examen\");
//Statement st = cn.createStatement(); Esta se sustituye por la metadata
dbmd = cn.getMetaData();
}catch(Exception e)
{
System.out.println(e);
}
}
public String Select0() throws Exception
{
ResultSet rs = dbmd.getTables(null,null,null,null);
String select0;
select0=\"<option value=\\'\\'>Selecciona un departamento</option>\";

while(rs.next())
{
//if((seleccionado!=null)&&(Integer.parseInt(rs.getString(1)))==Integer.parseInt(seleccionado))
//seleccionado se supone que recoge el valor de la opcionn que ha sido selecionada
if (rs.getString(3).equals(seleccionado))
select0=select0+\"<option selected value=\"+rs.getString(3)+\">\"+rs.getString(3)+\"</option>\";
else
select0=select0+\"<option value=\"+rs.getString(3)+\">\"+rs.getString(3)+\"</option>\";
}
return select0;
}
}

Ejecuto y me da el siguiente ERROR:

500 Internal Server Error
java.sql.SQLException: No data found
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7139)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3908)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5702)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:356)
at Sept.Datos.Select0(Datos.java:34)
at _J1._jspService(_J1.java:60)
[SRC:/J1.jsp:23]
at com.orionserver[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].http.OrionHttpJspPage.service(OrionHttpJspPage.java:56)
at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:349)
at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:509)
at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:413)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:778)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:317)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:270)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
at java.lang.Thread.run(Thread.java:534)


Alguien puede ayudarme por favor?

Miguel
08 de Febrero del 2006
Échale un vistazo al siguiente código:

Connection connection=DriverManager.getConnection(url,user,password);
//on récupère les métadonnées à partir de la connexion
DatabaseMetaData dmd = connection.getMetaData();
//récupération des informations
ResultSet tables =

dmd.getTables(connection.getCatalog(),null,null,null);
//affichage des informations
while(tables.next()){


System.out.println("###################################");
for(int i=0; i<tables.getMetaData().getColumnCount();i++){
String nomColonne =

tables.getMetaData().getColumnName(i+1);
Object valeurColonne = tables.getObject(i+1);
System.out.println(nomColonne+" = "+valeurColonne);
}
}