浏览 4438 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-07
首先是DatabaseMetaData接口: public static void main(String[] args) { //这里没有指定数据库 String url = "jdbc:mysql://127.0.0.1:3306/"; String user = "root"; String pass = ""; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection(url, user, pass); DatabaseMetaData metadata = conn.getMetaData(); System.out.println("数据库已知的用户: "+ metadata.getUserName()); System.out.println("数据库的系统函数的逗号分隔列表: "+ metadata.getSystemFunctions()); System.out.println("数据库的时间和日期函数的逗号分隔列表: "+ metadata.getTimeDateFunctions()); System.out.println("数据库的字符串函数的逗号分隔列表: "+ metadata.getStringFunctions()); System.out.println("数据库供应商用于 'schema' 的首选术语: "+ metadata.getSchemaTerm()); System.out.println("数据库URL: " + metadata.getURL()); System.out.println("是否允许只读:" + metadata.isReadOnly()); System.out.println("数据库的产品名称:" + metadata.getDatabaseProductName()); System.out.println("数据库的版本:" + metadata.getDatabaseProductVersion()); System.out.println("驱动程序的名称:" + metadata.getDriverName()); System.out.println("驱动程序的版本:" + metadata.getDriverVersion()); System.out.println(); System.out.println("数据库中使用的表类型"); ResultSet rs = metadata.getTableTypes(); while (rs.next()) { System.out.println(rs.getString(1)); } rs.close(); System.out.println(); /** * 获取指定的数据库的所有表的类型,getTables()的第一个参数就是数据库名 * 因为与MySQL连接时没有指定,这里加上,剩下的参数就可以为null了 * 第二个参数是模式名称的模式,但是输出也是什么都没有。谁知道告诉我一声 */ System.out.println("获取指定的数据库的所有表的类型"); ResultSet rs1 = metadata.getTables("ssi2bbs", null, null, null); while (rs1.next()) { System.out.println(); System.out.println("数据库名:"+ rs1.getString(1)); System.out.println("表名: "+rs1.getString(3)); System.out.println("类型: "+rs1.getString(4)); } rs1.close(); System.out.println(); System.out.println("获取指定的数据库的表的主键"); //获取指定的数据库的表的主键,第二个参数也是模式名称的模式,使用null了 ResultSet rs2 = metadata.getPrimaryKeys("mysql", null, "db"); while (rs2.next()) { System.out.println("主键名称: "+ rs2.getString(4)); } rs2.close(); System.out.println(); System.out.println("DatabaseMetaData.getIndexInfo()方法返回信息:"); ResultSet rs3 = metadata.getIndexInfo("ssi2bbs", null, "user", false, true); while (rs3.next()) { System.out.println("数据库名: "+ rs3.getString(1)); System.out.println("表模式: "+ rs3.getString(2)); System.out.println("表名称: "+ rs3.getString(3)); System.out.println("索引值是否可以不唯一: "+ rs3.getString(4)); System.out.println("索引类别: "+ rs3.getString(5)); System.out.println("索引名称: "+ rs3.getString(6)); System.out.println("索引类型: "+ rs3.getString(7)); System.out.println("索引中的列序列号: "+ rs3.getString(8)); System.out.println("列名称: "+ rs3.getString(9)); System.out.println("列排序序列: "+ rs3.getString(10)); System.out.println("TYPE为 tableIndexStatistic时它是表中的行数否则它是索引中唯一值的数量: "+ rs3.getString(11)); System.out.println("TYPE为 tableIndexStatisic时它是用于表的页数否则它是用于当前索引的页数: "+ rs3.getString(12)); System.out.println("过滤器条件: "+ rs3.getString(13)); } rs3.close(); } catch (Exception e) { e.printStackTrace(); } } ResultSetMetaData接口, 用于获取关于 public static void main(String[] args) { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/ssi2bbs","root",""); PreparedStatement ps = conn.prepareStatement("select * from bbs"); ResultSet rs = ps.executeQuery(); ResultSetMetaData rsme = rs.getMetaData(); int columnCount = rsme.getColumnCount(); System.out.println("ResultSet对象中的列数"+ columnCount); for (int i = 1; i < columnCount ; i++) { System.out.println(); System.out.println("列名称: "+ rsme.getColumnName(i)); System.out.println("列类型(DB): " + rsme.getColumnTypeName(i)); System.out.println("长度: "+ rsme.getPrecision(i) ); System.out.println("是否自动编号: "+ rsme.isAutoIncrement(i)); System.out.println("是否可以为空: "+ rsme.isNullable(i)); System.out.println("是否可以写入: "+ rsme.isReadOnly(i)); } } catch (Exception e) { e.printStackTrace(); } } 呵呵,希望对大家工作有帮助。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-07
DatabaseMetaData 接口的 getTables() 方法输出的结果如下
获取指定的数据库的所有表的类型 数据库名:ssi2bbs 数据库名:ssi2bbs 数据库名:ssi2bbs 数据库名:ssi2bbs
因为是MySql , 只显示了数据库自身的表和视图。Oracle可以显示更多。再来看看 ResultSetMetaData 接口演示代码的打印结果
ResultSet对象中的列数20 列名称: Host 列名称: Db 列名称: User
太多了,不再粘贴了。大致就是这样了。
|
|
返回顶楼 | |