java 动态创建表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 动态创建表相关的知识,希望对你有一定的参考价值。

现在是jsp 页面 有数据库 比如里面有  数据12345 有可能跟多的数据。也就是789所以想用程序动态创建表。也就是这样了。。。例如 请问 如何实现呀 大概思路是什么啊

<table class="table">
<tr class="table_header">
<td>用户ID</td>
<td>用户帐户</td>
<td>真实姓名</td>
<td>登陆密码</td>
<td>用户性别</td>
<td>数据操作</td>
</tr>
<%
List<User> users=new ArrayList<User>();
users = (List<User>) request.getAttribute("users");
for (int i = 0; i < users.size(); i++)
User e = users.get(i);
%>
<tr class="row<%=(i % 2 + 1)%>">
<td><%=e.getId()%></td>
<td><%=e.getUsername()%></td>
<td><%=e.getRealname()%></td>
<td><%=e.getPassword()%></td>
<td><%=e.getSex()%></td>
<td><a href="<%=request.getContextPath()%>/delete.do?id=<%=e.getId()%>">删除用户</a> 
<a href="<%=request.getContextPath()%>/update.jsp?id=<%=e.getId()%>">修改用户</a>
</td>
</tr>
<%

%>
</table>

向相面这样子就可以了,你在Servlet中查询出数据后存到一个List表中,然后在前台循环就可以了,有一条数据就会有一行
参考技术A 创建表?
如果你指的是table的话就用sql来创建一个table...

动态创建表,然后动态插入数据

【中文标题】动态创建表,然后动态插入数据【英文标题】:Dynamically create a table and then insert the data dynamically 【发布时间】:2020-01-14 15:05:38 【问题描述】:

我想创建一个过程来动态创建一个表,用户输入的列数从 1 到 n。我使用下面的脚本来动态创建表格 -

CREATE OR REPLACE PROCEDURE TABLES(COLS IN NUMBER)
AS
TABLE_STMT VARCHAR2(100);
TABLE_COLS VARCHAR2(100);
BEGIN
     TABLE_STMT := 'CREATE TABLE TABLS(COL';
     FOR I IN 1..COLS LOOP
         IF I = COLS THEN
             TABLE_STMT := TABLE_STMT || I || ' VARCHAR2(50)) ';
         ELSE
             TABLE_STMT := TABLE_STMT || I || ' VARCHAR2(50), COL';
         END IF;
     END LOOP;
     EXECUTE IMMEDIATE TABLE_STMT;
     DBMS_OUTPUT.PUT_LINE(TABLE_STMT);
END;
/

Demo.

我有另一张桌子 -

VAL
A
B
C
D
E
F
G
H

需要在上表中创建的列之间拆分哪些行。如果用户输入 2 列,则输出应为 -

col1  |  col2
A     |  B
C     |  D
E     |  F
G     |  H

如果用户输入 3 列,输出应该是 -

col1  |  col2  |  col3
A     |  B     |  C
D     |  E     |  F
G     |  H

我已成功创建表,但坚持在其中插入数据。任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

使用动态枢轴将行转换为列:

CREATE PROCEDURE insert_data(
  i_table_name IN VARCHAR2
)
IS
  p_sql CLOB;
BEGIN
  SELECT 'INSERT INTO "' || i_table_name || '"
SELECT ' || LISTAGG( '"' || column_name || '"', ',' )
              WITHIN GROUP ( ORDER BY Column_id ) || '
FROM   (
  SELECT val,
         MOD( ROWNUM - 1, ' || COUNT(*) || ' ) + 1 AS col,
         FLOOR( ( ROWNUM - 1 ) / ' || COUNT(*) || ' ) + 1 AS rn
  FROM   data
)
PIVOT ( MAX( val ) FOR col IN ( '
         || LISTAGG( Column_ID || ' AS "' || column_name || '"', ',' )
              WITHIN GROUP ( ORDER BY Column_id )
         || '))'
  INTO   p_sql
  FROM   USER_TAB_COLUMNS
  WHERE  table_name = i_table_name;

  EXECUTE IMMEDIATE p_sql;
  DBMS_OUTPUT.PUT_LINE( p_sql );
END;
/

然后

DECLARE
  cols INTEGER := 3;
BEGIN
  TABLES( cols );
  insert_data( 'TABLS' );
END;
/

输出:

创建表表(COL1 VARCHAR2(50),COL2 VARCHAR2(50),COL3 VARCHAR2(50)) 插入“表格” 选择“COL1”、“COL2”、“COL3” 从 ( 选择值, MOD( ROWNUM - 1, 3 ) + 1 AS col, 楼层 ( ( ROWNUM - 1 ) / 3 ) + 1 作为 rn 从数据 ) PIVOT ( MAX( val ) FOR col IN (1 AS "COL1",2 AS "COL2",3 AS "COL3"))

SELECT * FROM tabls;

输出:

COL1 | COL2 | COL3 :--- | :--- | :--- 一个 |乙| C D | E | F 克| H |

db小提琴here

【讨论】:

【参考方案2】:

如果您不喜欢带有 pivot 的解决方案,您可以生成带有分析功能的代码:

with la as (select chr(level+64)c from dual connect by level <= 8)
, pv as (select c
               ,lead(c) over (partition by 1 order by rownum) c2
               ,lead(c,2)over (partition by 1 order by rownum) c3
               , mod(rownum,3)r 
            from la)
select c,c2,c3  from pv 
where r = 1

【讨论】:

以上是关于java 动态创建表的主要内容,如果未能解决你的问题,请参考以下文章

如何将ACCESS的表和查询创建成动态的WEB?

Angular 动态增减表单项

在过程中动态添加的表上创建触发器

如何使用动态模型创建动态表

创建动态表?

如何在swift中的动态表视图中创建动态表视图?