在 h2 数据库中插入视图

Posted

技术标签:

【中文标题】在 h2 数据库中插入视图【英文标题】:Insert into view in h2 database 【发布时间】:2011-02-17 13:41:05 【问题描述】:

编辑:我想将值添加到使用该表 (viewPaziente) 的视图而不是直接使用该表的表 (paziente)。

edit2:在代码中发现了一个愚蠢的错误,现在它确实给了我一个错误,但它没有帮助:

org.h2.jdbc.JdbcSQLException:不支持功能:“VIEW”; SQL 语句: INSERT INTO "viewPaziente" values(?,?,?,?,?,?,?,?,?,?,?,?,?) [50100-147]

是否可以在表格视图中插入一行?

我的意思是...我有一个包含许多字段的表“paziente”,我创建了一个 Paziente 视图,我想通过该视图向 paziente 添加一行。是否可以在 H2 中做到这一点?

我正在使用以下代码

public static boolean AddAnagrafica(String nome, String cognome, 
        String data, String telefono, String email,String codiceFiscale, boolean isDonna, String indirizzo, String citta, 
        String provincia, String cap, String paese )
    Connection conn=null;
    try 
         conn = getConnection();
         PreparedStatement st = conn.prepareStatement("INSERT INTO \"viewPaziente\" values(?,?,?,?,?,?,?,?,?,?,?,?,?)");
         st.setInt(1, new Random().nextInt()); 
         st.setString(2,nome);
         st.setString(3,cognome);
         st.setString(4,data);
         st.setString(5,telefono);
         st.setString(6,email);
         st.setString(7,codiceFiscale);
         st.setBoolean(8,isDonna);
         st.setString(9,indirizzo);
         st.setString(10,citta);
         st.setString(11,provincia);
         st.setString(12,cap);
         st.setString(13,paese);
         st.executeUpdate();
     catch (SQLException e) 
        e.printStackTrace();
    
    return false;

【问题讨论】:

我开始认为这对于 h2 数据库是不可能的 哎呀,不支持此功能。 有可能,但是你需要自己实现更新基表(见下面我的回答)。 也许这是你的问题的一部分:避免在你的表名周围使用\"。通常,双引号在 SQL 中没有任何意义。简单的引号是用户分隔一个字符串(里面可能有双引号)。官方的“简单引用”写为''。示例:INSERT INTO my_table (my_text) VALUES ('Double quote=" and, guess what, simple quote=''!') 【参考方案1】:

在 H2 中,默认情况下视图不可更新。要使它们可更新,您需要使用“代替”触发器。一个关于如何做到这一点的例子available in the H2 source repository。

【讨论】:

以上链接可能已过时。这个工作截至 2017 年 5 月:h2database.com/html/advanced.html#updatable_views 和 svn.apache.org/repos/asf/phoenix/phoenix-docs/src/test/org/h2/… 谢谢!现已修复。【参考方案2】:

如果您想通过 java 将要插入的特定列复制到视图中,我希望这就是您正在寻找的,如果没有让我知道。

st.executeQuery("insert into viewPaziente(ID, Name, Start_Date) values SELECT id, first_name, sysdate FROM Paziente Where <matching condition>");

有关插入、更新或删除的更多信息 http://sql-plsql.blogspot.com/2009/03/insert-update-delete-views.html

【讨论】:

我想向 Paziente 表添加值,使用视图而不是直接使用表。 @MaurizioPZ 插入到视图中,将依次插入到表中。

以上是关于在 h2 数据库中插入视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 h2 数据库中插入特定的 UUID?

从 SQL 脚本在 H2 数据库中插入长文本

如何在 H2 中初始化视图

使用 H2 数据库时 Quill 中插入或更新操作的编译错误

在 h2 数据库 oracle 模式下插入未按预期工作

无法在 H2 中查看最近插入的结果