java查表模式_java-H2 DB:如何检查表模式是否以编程方式...

我有一个数据库架构,该架构创建多个表并用数据填充它们.我想检查在应用启动过程中数据库是否包含相应的表.我可以检查db文件是否存在,但是如果它不存在,H2将创建db.因此,我认为唯一的方法是检查表是否存在.

这是我初始化数据库的代码:

Class.forName("org.h2.Driver");

Connection conn = DriverManager.getConnection("jdbc:h2:database/svc", "sa", "");

Statement st = conn.createStatement();

st.execute("CREATE TABLE IF NOT EXISTS table1 (id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, name VARCHAR(100), record INT, record_date DATE, UNIQUE(name))");

st.execute("CREATE TABLE IF NOT EXISTS table2 (id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, name VARCHAR(100), record INT, record_date DATE, UNIQUE(name))");

st.execute("CREATE TABLE IF NOT EXISTS daily_record_stat (id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, date DATE, table1_id INT, table1_record INT, table2_id INT," +

" table2_record INT, total_record INT);");

st.execute("ALTER TABLE daily_record_stat ADD FOREIGN KEY (table1_id) REFERENCES table1(id);");

st.execute("ALTER TABLE daily_record_stat ADD FOREIGN KEY (table2_id) REFERENCES table2(id);");

st.execute("INSERT INTO table1 VALUES(1, 'non_existed_stub', 0, NULL)");

st.execute("INSERT INTO table2 VALUES(1, 'non_existed_stub', 0, NULL)");

conn.close();

如您所见,在使用IF NOT EXISTS语句创建之前,我检查表是否存在.但是后来我遇到了ALTER和INSERT的问题-这些命令不允许使用IF.

我尝试执行以下操作:

Connection conn = DriverManager.getConnection("jdbc:h2:database/svc", "sa", "");

ResultSet meta = conn.getMetaData().getTables(null, null, "table1", null);

if(meta.next()) {

//do something

}

但是meta.next()是错误的.

那么如何检查表模式是否已初始化?还是应该以其他方式完成?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值