【问题标题】:How to list all db tables in Liferay Portal [irrespective of db used]?如何在 Liferay 门户中列出所有数据库表 [不管使用的数据库]?
【发布时间】:2014-03-03 09:28:27
【问题描述】:

无论使用哪个数据库,我都需要列出 Liferay Portal Server 中的所有数据库表。有什么提示吗?

我可以获得 SessionFactory 和 session 但之后我无法得到提示。

SessionFactory sessionFactory = (SessionFactory) PortalBeanLocatorUtil.locate("liferaySessionFactory");

谁能给我指个方向?

编辑:我需要在我的自定义构建的 portlet 中阅读完整的表格列表及其字段。

【问题讨论】:

    标签: database hibernate liferay datasource


    【解决方案1】:

    试试下面的代码:

        try {
            DataSource dataSource = (DataSource) PortalBeanLocatorUtil.locate("liferayDataSource");
            Connection connection =  dataSource.getConnection();
            DatabaseMetaData md = connection.getMetaData();
            ResultSet rs = md.getTables(null, null, "%", null);
            while (rs.next()) {
                System.out.println(rs.getString(3));
            }
    
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    

    参考资料:

    1. http://www.liferaysavvy.com/2013/02/getting-data-from-multiple-tables-in.html How to get all table names from a database?

    【讨论】:

      【解决方案2】:

      Liferay 的源代码带有完整的表格列表。例如。看看portal-tables.sql

      或者,您可以打开您最不信任的数据库浏览器并枚举您为 Liferay 配置的数据库中的表。

      记住:这些表格的内容只能由 Liferay 更新。通过访问 API 来更改它们,永远不要直接写任何东西。违反这个假设很可能会导致问题。

      【讨论】:

      • 嗨奥拉夫,感谢您的回复。我知道我可以找到那里的所有桌子。我想在我的portlet 中列出它们。抱歉,如果我的问题没有反映出来。我会读数据,但绝对不会写。我会使用所有这些表来创建报告,因此只需要读取数据。我希望 Liferay 能为我提供类似的东西,但我找不到。
      • 嗨,Olaf,您帮助找到了 liferay 的数据库表列表。谢谢你。顺便说一句,我们在哪里可以获得这些表的描述?如何找到用于存储社区、用户等信息的表。
      • 因为这些表是内部存储,所以我知道没有公共文档。注意:我知道有几起人们手动更新数据库的事件——不是通过 API,而是通过 SQL——并且惨遭失败。在一个实例中,失败发生在写入操作后 6 个月,并且需要一段时间才能找出原因。结论:您永远不想写入数据库。不看就更容易了。
      • @OlafKock Liferay中的一些东西只能通过查看数据库和代码才能找到。就像“为了在 LR7.3 中创建一个‘内容页面’:创建一个 classPK=0 和 classNameId=0 的 Layout,然后创建一个 LayoutPageTemplateStructure,其中包含您需要的 FragmentEntries,但您需要将 FragmentEntry 内容复制到一个新的FragmentEntryLink 之前,因此您可以使用相同的 plid 创建另一个草稿布局(草稿布局由 XY 定义),但 classNameId 不同,...”(嗯,这不是如何做到的,而是解释对象关系的文档Liferay 非常缺少)
      • @orithena 这与我永远不要写入 Liferay 的数据库表的信息并不矛盾(另请参阅liferay.dev/blogs/-/blogs/understanding-liferay-s-database)。但是,与查看数据库一样,您还可以通过查看检索到的对象来了解您通过 API 提及的详细信息。它可能在 db-browser 中更方便地显示,但仅此而已。 永远不要写到 Liferay 的数据库。我支持 2014 年的信息,当时这个问题的原始答案已经写好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 2011-06-09
      • 2011-06-21
      • 1970-01-01
      • 2019-05-04
      相关资源
      最近更新 更多