我正在做一个分布式Java项目。我在GlassFish(Localhost:4848)中创建了新的JDBC资源和连接池。我的Java项目是通过net bean创建的。在配置设置(web.xml)下,在引用选项卡上 - >资源参考。我的资源名称正好指向我创建的资源名称。我还使用一些测试代码打印出数据源中的所有表格。
从数据源打印出所有表格
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/GiftDB");
con = ds.getConnection();
DatabaseMetaData md = con.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
System.out.println("DEBUG(RS):" + rs.getString(3));
}
这是输出,不是我期望的
Info: DEBUG(RS):SYSALIASES
Info: DEBUG(RS):SYSCHECKS
Info: DEBUG(RS):SYSCOLPERMS
Info: DEBUG(RS):SYSCOLUMNS
Info: DEBUG(RS):SYSCONGLOMERATES
Info: DEBUG(RS):SYSCONSTRAINTS
Info: DEBUG(RS):SYSDEPENDS
Info: DEBUG(RS):SYSFILES
Info: DEBUG(RS):SYSFOREIGNKEYS
Info: DEBUG(RS):SYSKEYS
Info: DEBUG(RS):SYSPERMS
Info: DEBUG(RS):SYSROLES
Info: DEBUG(RS):SYSROUTINEPERMS
Info: DEBUG(RS):SYSSCHEMAS
Info: DEBUG(RS):SYSSEQUENCES
Info: DEBUG(RS):SYSSTATEMENTS
Info: DEBUG(RS):SYSSTATISTICS
Info: DEBUG(RS):SYSTABLEPERMS
Info: DEBUG(RS):SYSTABLES
Info: DEBUG(RS):SYSTRIGGERS
Info: DEBUG(RS):SYSUSERS
Info: DEBUG(RS):SYSVIEWS
Info: DEBUG(RS):SYSDUMMY1
我在GlassFish的MYSQLPool中添加了其他属性选项卡下的用户,密码,URL字段。我也测试ping服务器,它的工作原理。我可以在SequelPro等第三方应用上访问数据库。
我不知道发生了什么,MySQL连接成功,但表显示输出是意料之外的。
答案 0 :(得分:0)
您的请求还为您提供了您不想要的系统表。
缩小对表格类型的搜索范围:
DatabaseMetaData.html#getTableTypes()
ResultSet getTableTypes() 抛出SQLException
检索此数据库中可用的表类型。结果是 按表格类型排序。表格类型为:
TABLE_TYPE String =>表格类型。典型的类型是“TABLE”,“VIEW”, “SYSTEM TABLE”,“GLOBAL TEMPORARY”,“LOCAL TEMPORARY”,“ALIAS”, “SYNONYM”。
ResultSet rs = md.getTables(null, null, null,new String[] {"TABLE"});
System.out.println("List of tables: ");
while (rs.next()) {
System.out.println(
" "+rs.getString("TABLE_CAT")
+ ", "+rs.getString("TABLE_SCHEM")
+ ", "+rs.getString("TABLE_NAME")
+ ", "+rs.getString("TABLE_TYPE")
+ ", "+rs.getString("REMARKS"));
}