日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java数据库表不存在_如果Java生产代码中不存在并在JUnit中确认,则创建数据库表...

發(fā)布時(shí)間:2025/3/12 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java数据库表不存在_如果Java生产代码中不存在并在JUnit中确认,则创建数据库表... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Code-Apprentice

2

java

sql

junit

jdbc

我正在用Java編寫數(shù)據(jù)庫程序,并且想要?jiǎng)?chuàng)建一個(gè)表(如果它還不存在).我從中了解DatabaseMetaData.getTables()了如何在Java中檢測(cè)SQL表的存在?而我正在嘗試使用它:

private boolean tableExists() throws SQLException {

System.out.println("tableExists()");

DatabaseMetaData dbmd = conn.getMetaData();

ResultSet rs = dbmd.getTables(null, null, this.getTableName(), null);

System.out.println("TABLE_NAME: " + rs.getString("TABLE_NAME"));

return rs.getRow() == 1;

}

問題是即使在創(chuàng)建表之后rs.getRow()總是返回0.使用rs.getString("TABLE_NAME")拋出異常表明結(jié)果集為空.

我想到的一個(gè)可能的解決方案是執(zhí)行CREATE TABLE語句并捕獲拋出的任何異常.但是,我不喜歡在程序的控制流程中使用異常的想法.

FWIW,我正在使用HSQLDB.但是,我想編寫?yīng)毩⒂赗DMS引擎的Java代碼.有沒有其他方法可以DatabaseMetaData.getTables()用來做我想要的事情?或者是否有其他解決方案來編寫我的tableExists()方法?

添加:

使用這里給出的建議,我找到了一個(gè)似乎適用于我的生產(chǎn)代碼的解決方案:

private void createTable() throws SQLException {

String sqlCreate = "CREATE TABLE IF NOT EXISTS " + this.getTableName()

+ " (brand VARCHAR(10),"

+ " year INTEGER,"

+ " number INTEGER,"

+ " value INTEGER,"

+ " card_count INTEGER,"

+ " player_name VARCHAR(50),"

+ " player_position VARCHAR(20))";

Statement stmt = conn.createStatement();

stmt.execute(sqlCreate);

}

現(xiàn)在我也在編寫一個(gè)JUnit測(cè)試來斷言表確實(shí)已經(jīng)創(chuàng)建了:

public void testConstructor() throws Exception {

try (BaseballCardJDBCIO bcdb = new BaseballCardJDBCIO(this.url)) {

String query = "SELECT count(*) FROM information_schema.system_tables WHERE table_name = '" + bcdb.getTableName() + "'";

Connection conn = DriverManager.getConnection(this.url);

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery(query);

Assert.assertTrue(rs.next());

Assert.assertEquals(1, rs.getInt(1));

Assert.assertFalse(rs.next());

}

}

此測(cè)試assertEquals()在以下消息上失敗:

FAILED: expected: <1> but was: <0>

總結(jié)

以上是生活随笔為你收集整理的java数据库表不存在_如果Java生产代码中不存在并在JUnit中确认,则创建数据库表...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。