java数据库表不存在_如果Java生产代码中不存在并在JUnit中确认,则创建数据库表...
Code-Apprentice
2
java
sql
junit
jdbc
我正在用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>
java数据库表不存在_如果Java生产代码中不存在并在JUnit中确认,则创建数据库表...相关推荐
- 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目
王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...
- java要学mysql 吗_做JAVA开发需要把数据库学习到何种程度
原标题:做JAVA开发需要把数据库学习到何种程度 做JAVA开发需要把数据库学习到何种程度?智递科技小编和大家一起探讨交流: 1.开发人员对DB的掌握,越深入,你能做的事情就越多. 2.完成业务功能, ...
- java 代码检验表不存在_诊断 Java 代码: Liar View 错误模式
[IT168 技术文章]GUI 一般是基于模型-视图-控制器体系结构设计的.其中,视图是从模型中分离出来的.这种分离对自动化测试是一个挑战,因为我们很难检验模型中的状态改变是否在视图中得到了适当的反映 ...
- java表底层生产工具_使用Java工具解决生产故障(一)-jcmd介绍
1.简介 Java开发的应用程序在线上出现生产故障很常见,通常我们会在开发环境模拟此类故障,但偶尔也会遇到无法成功模拟的故障.那么我们就需要在生产环境上进行分析,定位故障产生原因.JDK1.7版本之后 ...
- java读取jsp文件内容_使用Java读取Excel文件内容
问题:我能用Java读取一个Excel文件吗?如果能,怎么做? 回答:是的,可以用Java读取Microsoft Excel文件.微软提供了一个Excel的ODBC驱动程序,因此我们就可以使用JDBC ...
- java websocket修改为同步_初级Java程序员需要掌握哪些主流技术才能拿25K?
某天,小五看到小丽愁眉苦脸的,于是问了她有什么心事~ 公司的社区网站访问越来越慢了,特别是搜索功能,这该怎么优化呀? 你们都用了啥技术搭建的呀? springboot+mybatis,数据库mysql ...
- java教务系统类设计_基于Java EE体系的高校教务管理系统的设计开发
<基于Java EE体系的高校教务管理系统的设计开发>由会员分享,可在线阅读,更多相关<基于Java EE体系的高校教务管理系统的设计开发(3页珍藏版)>请在人人文库网上搜索. ...
- java程序设计教程(项目式)_《Java程序设计项目化教程(第2版)》怎么样_目录_pdf在线阅读 - 课课家教育...
任务1 安装配置开发环境及需求分析 1.1 任务描述 1.2 技术概览 1.2.1 java语言的产生与发展 1.2.2 Java语言的特点 1.2.3 Java语言的工作机制 1.3 任务1-1下载 ...
- java微服务案例分析_《Java深入微服务原理改造房产销售平台》知识点梳理与问答总结...
一图胜千言 一图胜千言 既然已经在session有了,直接session取就行了,为什么要再放threadlocal,之后再从threadlocal清掉,一直从session拿不就行了? 答: 放在T ...
最新文章
- 不用1750亿!OpenAI CEO放话:GPT-4参数量不增反减
- Java基础-基本数据类型
- DockerFile : COPY 和 ADD 命令不能拷贝上下文之外的本地文件
- 电脑键盘下划线怎么打_电脑键盘失灵怎么办?你应该学会的四种方法
- Python--Redis实战:第一章:初识Redis:第一节:Redis简介
- 吴恩达机器学习详细总结(三)
- VAssistX + VS2017 常用快捷键
- [Python爬虫案例]西刺免费代理IP
- eclipse 工具翻译插件安装
- 巨杉数据库SequoiaDB协调节点
- Java学习lesson 10
- TikTok全球下载突破超20亿人次,它做对了什么?
- 解决nrm不能使用问题
- qtable sorting enable中文是按照什么顺序_漫威电影:22部电影观影顺序(附ZY)
- Highcharts使用小心得
- Nlog日志记录组件使用
- SpringBoot部署子工程java -jar启动时报错:xxxxxxx.jar中没有主清单属性
- 【深度学习中模型评价指标汇总(混淆矩阵、recall、precision、F1、AUC面积、ROC曲线、ErrorRate)】
- 火箭发射升空——数学模型P163 5.6
- 如何写一个简单的手写识别算法?
热门文章
- android打开系统前置摄像头驱动,android 调用系统前置摄像头
- 须使用visual c 内联汇编语言开发,在VisualC 中使用内联汇编
- oracle+行换列,Oracle的数据表中行转列与列转行的操作实例讲解
- div和div之间画横线_javascript – jQuery – 使用画布在div之间绘制线条
- Python可以调用Gpu吗_python可以开发app吗
- 网口监视报文工具_真是神器!这款网络排查工具!
- java实现bloom filter_Java BloomFilter.add方法代码示例
- 猎豹浏览器怎么收藏网页 网页收藏方法简述
- Win7旗舰版禁止修改文件属性的设置方法
- chrome浏览器无法加载百度网页启动组件怎么办