问题引入:使用java连接数据库,我们想显示一个表,按一般方法是我们指定字段名进行查询。那如果我们想查询多个表难道都要指定字段?而且在特殊情况下,这样是不可行的。
- 准备阶段:连接到数据库
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//连接到数据库,test1是数据库名,root是用户名,123456是密码
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test1", "root", "123456");
- 查询数据库中已有表的信息:
//此类提供关于整个数据库的信息,通过conn.getMetaData()获取 DatabaseMetaData dbMetaDate = conn.getMetaData(); //ResultSet是一个集合,与数据库操作很密切,可以看成java执行sql语句后接收返回结果的一个集合 ResultSet rs = dbMetaDate.getTables(null,null,null,new String[] {"TABLE"}); while(rs.next()) { //TABLE_NAME表示 表名,其他相关表示方法可以查看jdk帮助文档 System.out.println("表名:"+rs.getString("TABLE_NAME")); System.out.println("表类型:"+rs.getString("TABLE_TYPE")); System.out.println("表所属数据库:"+rs.getString("TABLE_CAT")); System.out.println("表备注:"+rs.getString("REMARKS")); System.out.println(); }
getTables()方法详解:这个方法是在数据库的综合信息中获取表信息,可以对参数列表有疑问,因为有多个null。可以理解为我想获取指定条件的表,是不是就要添加限制。此方法的参数列表就是用来添加限制的。如下是此方法的jdk帮助文档
ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException /*catalog 字符串,目录名,""(空串)可以检索没有目录的表,null表示忽略目录; schemapattern字符串,为大纲名称的匹配模式,""可以检索没有大纲的表 tablenamepattern字符串,为表名匹配模式; type字符串,为需要检索的表类型列表,null 表示返回所有类型;*/
可见,上面例子中我们使用null表示对 目录,模式,表名都未添加限制。
通过上面的解释应该知道,在执行getTables()方法后,re里面就有数据库中表的信息了,这时只要把信息输出就可以了。详细信息可查询jdk帮助文档。
- 查询表中字段的信息
//与上面不同就是 rs存储的是表的信息,而rsColimns存储的是表中字段的信息。rs.getString("TABLE_NAME")代表表的名称 ResultSet rsColimns = dbMetaDate.getColumns(null,"%",rs.getString("TABLE_NAME"),"%"); while(rsColimns.next()) { System.out.println("字段名:"+rsColimns.getString("COLUMN_NAME")+"-------"+"类型:"+rsColimns.getString("TYPE_NAME")+ "------"+"长度:"+rsColimns.getString("COLUMN_SIZE")+"-----"+"备注:"+rsColimns.getString("REMARKS")); }
万变不离其宗,查看表字段信息,与查看数据库中表的信息步骤是一样的。下面是jdk帮助文档
ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException
以上就是java查询数据库信息的方法,具体功能可以参考jdk文档。祝大家学习更上一层楼!!!
-