应需要对JDBC对数据库的元数据的操作学习了一下。
对JDBC来说元数据有两种
1:针对数据库的元数据。
2:针对一个ResultSet的元数据。
分别对这两种做介绍。
一:针对数据库的元数据。JDBC是通过一个Connection.getMeteData()来取得一个DataBaseMeteData类型的数据。DataBaseMeteData有很多方法可以用来获取这个Connection所连接的数据库的信息。具体的主要函数如下
getCatalogs();
返回数据库的目录信息。
getURL();
获取连接的数据库的URL地址。
getDriverName();
获取连接的数据库的驱动程序。
getColumns(catalog, schema, tableNames,columnNames)
返回指定表名的表的所有列名。
catalog, schema通常为NULL。
getTables(catalog, schema, tablemask, types[]);
返回符合条件的表的描述。其参数含义如下∶
catalog 表所在的目录。对于JDBC-ODBC数据库,可置为NULL。这个所谓的目录实际上就是数据库所在文件系统的绝对路径。
schema 数据库的数据模式,通常置为NULL。
tablemask 对要获取的表的描述。如果要取得所有表名。可使用通配符“%”。
types[] 这是一个字符串数组,描述要获取的表的类型。因为大型数据库中通常含有许多内部表,与用户无关。如果它为NULL,将得到所有的表。如果是一个单元素的数组含有字符串"TABLES",只得到与用户有关的表。
二:针对ResultSet的元数据。JDBC是通过一个ResultSet.getResultSetMeteData()来取得一个ResultSetMeteData类型的数据。ResultsetMeteData有很多方法可以用来获取这个ResultSet所包含的查询的信息。具体的主要函数如下:
getColumnCount();
返回结果集中记录的列数。
getColumnName(int);
返回指定号数的字段名。
getColumnType(int);
返回指定号数的字段类型。
三:测试程序
import java.sql.*;
public class Conn
{
private String driver;
private String uri;
private String uid;
private String pass;
private String path;
private Connection conn;
private Statement stmt;
private ResultSet rs;
public Conn(String s)
{
driver = "sun.jdbc.odbc.JdbcOdbcDriver";
uri = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};dbq=";
uid = "";
pass = "";
path = "";
conn = null;
stmt = null;
rs = null;
path = s;
uri = uri + path;
}
public Conn(String s, String s1, String s2)
{
driver = "sun.jdbc.odbc.JdbcOdbcDriver";
uri = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};dbq=";
uid = "";
pass = "";
path = "";
conn = null;
stmt = null;
rs = null;
path = s;
uid = s1;
pass = s2;
uri = uri + s;
}
public Connection getConn()
{
if(conn == null)
try
{
Class.forName(driver);
conn = DriverManager.getConnection(uri, uid, pass);
}
catch(Exception exception)
{
System.out.println(exception);
}
return conn;
}
public Statement getStmt()
{
try
{
if(stmt != null)
stmt.close();
conn = getConn();
stmt = conn.createStatement();
}
catch(Exception exception)
{
System.out.println(exception);
}
return stmt;
}
public ResultSet getResultSet(String s)
{
try
{
if(rs != null)
rs.close();
conn = getConn();
stmt = conn.createStatement();
rs = stmt.executeQuery(s);
}
catch(Exception exception)
{
System.out.println(exception);
}
return rs;
}
public void executeSql(String s)
{
try
{
conn = getConn();
stmt = conn.createStatement();
stmt.executeUpdate(s);
stmt.close();
}
catch(Exception exception)
{
System.out.println(exception);
}
}
public void close()
{
try
{
if(rs != null)
rs.close();
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
}
catch(Exception exception)
{
System.out.println(exception);
}
}
public static void main(String args[])
{
Conn conn = new Conn("E:\\sms.mdb", " ", "access");
try
{
ResultSet rs = null;
DatabaseMetaData databasemd = null;
ResultSetMetaData rsmd = null;
String [] type = new String[1];
type[0] = "TABLES";
databasemd = conn.getConn().getMetaData();
System.out.println("---------------------输出数据库的表信息-------------");
rs = databasemd.getTables(null,null,"inbox7",null);
// rs = databasemd.getColumns(null,null,"%","%");
if (rs == null) {
System.out.println("the databasemete is null!");
}
String table_name = "";
while(rs.next())
{
table_name = rs.getString("TABLE_NAME");
if(table_name.indexOf("MS") == -1)
{
System.out.println(table_name);
}
}
rs.close();
System.out.println("---------------------输出具体表信息---------------");
String sql = "select * from "+table_name;
rs = conn.getResultSet(sql);
while(rs.next())
{
System.out.println(rs.getString(3));
}
}
catch(Exception exception)
{
System.out.print(exception);
}
finally
{
conn.close();
}
}
}