【问题标题】:what is the code to create a table in sql only at first run of project?仅在项目第一次运行时在 sql 中创建表的代码是什么?
【发布时间】:2015-03-01 23:23:09
【问题描述】:

大家好,

我想用jsp、servlet和jdbc等创建一个web应用程序

它只是简单地创建一个名字为student的表,包含各种字段作为数据库中关于student的信息,不同的页面执行不同的查询任务。

问题是我想创建一个war文件来将此应用分发给我的客户。

当我编写一个 sql 查询在我的 jsp 页面中创建一个表时,每当我运行这个项目时,它都会尝试创建一个新表。

这里我希望它只在用户第一次运行时创建一个表。所以当我将战争文件分发给我的客户端时,在第一次运行时它会创建一个学生姓名表并执行所需的查询和未来运行它只执行其他查询但不会再次创建表。

我需要您宝贵的指导和概述来解决此问题。任何类型的帮助都将不胜感激。 “谢谢”

【问题讨论】:

  • 我相信您通常会在部署或启动时注册一个类,该类运行查询以创建CREATE TABLE IF NOT EXISTS 形式的表。
  • @Elliott, IF NOT EXISTSOracle无效
  • @LalitKumarB 1. 这是评论(而不是答案)和 2. 你确定 OP 实际上在使用 Oracle RDBMS 吗? 3.什么版本? 4. 你怎么知道的?
  • @ElliottFrisch,1. 我知道这是评论,所以我回复了您的评论。 2.问题中的Oracle标签是确定RDBMS产品的唯一方法。 3.版本在这个问题中并不重要。我相信直到12cIF NOT EXISTS不在Oracle中。 4. 我知道我看到的和 OP 提到的。
  • 您应该研究像 Liquibase 或 Flyway 这样的架构管理工具

标签: sql oracle jsp jdbc


【解决方案1】:

Oracle 中,解决方法是将其包装在匿名BEGIN-END 块中。 EXCEPTION 块将简单地允许table already exists error

BEGIN
   EXECUTE IMMEDIATE 'CREATE TABLE...

EXCEPTION
    WHEN OTHERS THEN
      IF SQLCODE = -955 THEN
        NULL; -- ignore the ORA-00955 error
      ELSE
         RAISE;
      END IF;
END; 
/

这是一种最好的方式。另一种方法是在data dictionary 视图dba_tables 中手动检查表是否存在。

SELECT count(*) 
   INTO variable_count 
  FROM dba_tables 
 WHERE table_name = 'table_name';

所以,

IF variable_count = 0 THEN EXECUTE IMMEDIATE CREATE TABLE ...

【讨论】:

    猜你喜欢
    • 2021-11-22
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2016-05-25
    相关资源
    最近更新 更多