【问题标题】:How I can make a table in database having variable columns in Java?如何在 Java 中创建具有可变列的数据库表?
【发布时间】:2011-09-29 08:36:32
【问题描述】:

我有一个 Java Web 应用程序。我必须创建一个表,并且我正在使用 JDBC。

我不知道我的列表标签中会有多少个值,所以对于每个值标签,我需要在我的表中对应一个列。这些值是从其他应用程序中获取的。

所以我可以创建一个具有 n 列数的表,其中 n 每次都可以不同。

<list>
<value>Name</value>
<value>Address</value>
<value>Contact No</value>
..
.
.
</list >

我怎样才能做到这一点?

【问题讨论】:

  • 您使用的是什么数据库?您的值的最大长度是多少? VARCHAR 或 CLOB 列类型将是合适的,但它取决于数据库和值的长度。
  • 我正在使用 Oracle 数据库..都是 varchar2(30)..
  • 您是否尝试根据列表中的值创建表?或者您是否尝试从已创建的表中选择列?根据问题,您似乎正在尝试创建..如果是,那么您将需要使用 create table 语句并包括列表中指定的列。列类型如何?主键呢?索引呢?正在尝试编写一个将为您管理数据库的应用程序?
  • 另外说明.. 如果您认为您的表可以基于其他应用程序的值采用任何形式,那么最好不要使用 RDBMS。尝试 SimpleDB 或 NO SQL DB,它们大多是键值对。检查此链接:neo4j.org
  • 没有主键..没有索引..都是varchar2(30)...假设如果列表标签包含.. 名称值> 地址 那么我的表应该有2列名字和地址..

标签: java database jdbc


【解决方案1】:

您应该使用 n 行来存储值,而不是 n 列。列在数据库中以某种方式“固定”,而添加/删除/修改行很容易。

【讨论】:

    【解决方案2】:

    您需要动态处理您的表结构。存在多种解决方案。

    使用 JDBC,只需查询 Oracle 并检索表中的列。

    String myTable = "FOO_TABLE";
    String query = "Select COLUMN_NAME from USER_TAB_COLUMNS where TABLE_NAME=?";
    PreparedStatement ps = conn.prepareStatement(query);
    ps.setString(1, myTable);
    //
    Set<String> existingColumns = new HashSet<String>();
    ResultSet rs = ps.executeQuery();
    
    while (rs.next())
    {
        existingColumns.add(rs.getString(1));
    }
    

    现在您知道哪一列存在或不存在,您可以根据需要ALTER 您的表格。

    【讨论】:

    • 虽然这在技术上是可行的,但我怀疑应用程序应该动态更改数据库表
    • 我不这么认为。升级数据库模式版本的更新阶段是合理的(例如在 ERP 应用程序中),您的否决票是令人反感的。您的回答是建议,而不是对问题的回应。
    • 我同意更新阶段,但这不是应用程序的“正常”操作。如果您动态创建/更改数据库表,您还必须动态访问它们(可能是代码生成?),这意味着您实现了过于复杂的键/值存储。
    • 感谢您的同意...但您的否决票仍然不恰当且令人反感。一个应用程序做什么,它做的方式:这不是你的事。当然最好应用第五范式,否则设计数据库模式,但这不是重点。
    • @michael667 -- 但是在提出选择查询之前,我想要一个创建查询来创建一个表..请让我理解你的答案..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2019-01-16
    • 2019-10-28
    • 1970-01-01
    • 2015-02-08
    • 2019-03-20
    相关资源
    最近更新 更多