网站设计培训班前台,长沙建设工程造价网站,建设网站个人银行,深圳市建设交易宝安Code-Apprentice2javasqljunitjdbc我正在用Java编写数据库程序,并且想要创建一个表(如果它还不存在).我从中了解DatabaseMetaData.getTables()了如何在Java中检测SQL表的存在#xff1f;而我正在尝试使用它:private boolean tableExists() throws SQLException {System.out.pr…Code-Apprentice2javasqljunitjdbc我正在用Java编写数据库程序,并且想要创建一个表(如果它还不存在).我从中了解DatabaseMetaData.getTables()了如何在Java中检测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;}问题是即使在创建表之后rs.getRow()总是返回0.使用rs.getString(TABLE_NAME)抛出异常表明结果集为空.我想到的一个可能的解决方案是执行CREATE TABLE语句并捕获抛出的任何异常.但是,我不喜欢在程序的控制流程中使用异常的想法.FWIW,我正在使用HSQLDB.但是,我想编写独立于RDMS引擎的Java代码.有没有其他方法可以DatabaseMetaData.getTables()用来做我想要的事情或者是否有其他解决方案来编写我的tableExists()方法添加:使用这里给出的建议,我找到了一个似乎适用于我的生产代码的解决方案: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);}现在我也在编写一个JUnit测试来断言表确实已经创建了: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());}}此测试assertEquals()在以下消息上失败:FAILED: expected: 1 but was: 0