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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563306.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

get方法请求返回一个文件_一键转换多种文件格式,完全免费,总有一个方法适合你...

相信各位小伙伴平时办公的时候&#xff0c;肯定经常需要对多种文件格式进行转换&#xff0c;但是下面这些非常好用的转换方法&#xff0c;你用过吗&#xff1f;接下来就带各位一探究竟&#xff0c;希望可以帮到你哦&#xff01;一、迅捷PDF转换器在线版1、文档转换首先我们可以…

java 堆排序方式_幾種排序方式的java實現(02:希爾排序,歸並排序,堆排序)

/** 希爾排序&#xff1a;先取一個小於n的整數d1作為第一個增量&#xff0c;* 把文件的全部記錄分成(n除以d1)個組。所有距離為d1的倍數的記錄放在同一個組中。* 先在各組內進行直接插入排序&#xff1b;然后&#xff0c;取第二個增量d2* 直至所取的增量dt1(dtpublic classShel…

jacoco入门_Android jacoco 代码覆盖率测试入门

前言最近同事搞了一个基于 jacoco 统计 Android 代码覆盖率测试的功能,可以统计每天手工测试的代码覆盖率.抱着好奇的心态,自己也学习一下 jacoco,陆陆续续搞了三天终于有点结果了.本文介绍仅仅在源码中加入少量代码就可以完成代码覆盖率覆测试.代码配置build.gradle在 app 目录…

java下文_java实现文件下载的两种方式

本文实例为大家分享了java实现文件下载的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下public HttpServletResponse download(String path, HttpServletResponse response) {try {// path是指欲下载的文件的路径。File file new File(path);// 取得文件名。String …

uinty粒子系统子物体变大_Unity的粒子系统(一)基础篇

简介闲来无事&#xff0c;仔细的学习一下粒子系统&#xff0c;也当是给自己做个笔记方便之后进行回顾。引擎版本&#xff1a;Unity2018.3创建一个ParticleSystem创建方式&#xff1a;1、Hierarchy-->Effects-->ParticleSystem第一种创建方式创建结果2、gameObject-->A…

java字符串string_Java字符串String方法总结

Java字符串创建与初始化实例。Java字符串String方法总结&#xff0c;包括字符串的大小写替转换&#xff0c;获取字符串长度的方法、截取字符串&#xff0c;去除字符串中的空格、StringBuffer类转换成String类等&#xff1a;java创建并初始化字符串的方法&#xff1a;1、使用字符…

java定义返回码常量_码出规范(四)常量定义

01各位屏幕前的读者朋友大家早上中午晚上凌晨好&#xff0c;本文是《码出规范》专题的第四篇&#xff0c;文中参考阿里巴巴最新发布的《Java开发手册》&#xff0c;结合《springboot2.x独门秘籍》专题中的项目开发进度&#xff0c;学以致用&#xff0c;让你在开发中码出高效&am…

centos下载mysql_python数据分析之路——centos下载并配置mysql与navicat的使用

python数据分析之路——centos下载并配置mysql与navicat的使用在之前的文章中已经说明了如何购买并配置一台自己的服务器&#xff0c;那么在安装完anaconda之后&#xff0c;为了之后方便用Django进行网站开发与数据分析&#xff0c;需要对数据库进行配置&#xff0c;那么在数据…

php数组遍历相同的元素覆盖_php获取数组中重复数据的两种方法

搜索热词代码如下:PHPfunction FetchRepeatMemberInArray($array) {// 获取去掉重复数据的数组$unique_arr array_unique ( $array );// 获取重复数据的数组$repeat_arr array_diff_assoc ( $array,$unique_arr );return $repeat_arr;} // 测试用例$array array (apple,ipho…

mysql 解压缩安装_[mysql] MySQL解压缩安装步骤

以前装的MySQL出问题了&#xff0c;只好卸载了。又下载了一个mysql-5.6.24-win32.1432006610.zip。msi文件直接安装就行了。这里需要解压到指定目录&#xff0c;配置后可使用。环境变量配置&#xff1a;在 mysql根目录下修改 my-default.ini :# These are commonly set, remove…

php过滤多空格_php正则过滤html标签、空格、换行符的代码(附说明)

$strpreg_replace("/\s/", " ", $str); //过滤多余回车$strpreg_replace("/$strpreg_replace("//si","",$str); //注释$strpreg_replace("//si","",$str); //过滤DOCTYPE$strpreg_replace("//si",…

mysql+json插入_MySQL对JSON数据的增删改查

MySQL从5.7版本开始就支持JSON格式的数据&#xff0c;操作用起来挺方便的。建表在新建表时字段类型可以直接设置为json类型&#xff0c;比如我们创建一张表&#xff1a;CREATE TABLE test_user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR ( 50 ) NOT NULL,info JSON);js…

java手机象棋软件下载,Java手机网络版象棋游戏附源码JAVA游戏源码下载

运行于手机上的中国象棋游戏&#xff0c;鉴于JAVA J2ME技术&#xff0c;本游戏分服务端和客户端&#xff0c;导入JAR包即可在手机上运行&#xff0c;内有开发文档和运用说明。Java手机网络版象棋游戏附源码(1 folders, 2 files, 1.38 KB, 727.25 KB in total.) 源码(…

mysql数据库如何创建表_mysql数据库如何创建数据表

mysql数据库创建数据表的方法是&#xff1a;可以通过CREATE TABLE语句来创建&#xff0c;基本语法&#xff1a;【CREATE TABLE ([表定义选项])[表选项][分区选项];】。要注意的是&#xff0c;创建数据表不能使用SQL语言中的关键字。在 MySQL 中&#xff0c;可以使用 CREATE TAB…

导航无限级菜单 java,Element NavMenu 无限级菜单

数据结构menudata.json{"data":[{"id": 1,"path": "/home","menuName": "商业数据统计","component": "Home","childMenu":[{"id": 2,"path": "/commerc…

mysql 主从一致性_mysql 主从一致性保证

MySQL 主备的基本原理MySQL 主备切换流程.png主备同步流程图备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程&#xff0c;专门用于服务备库 B 的这个长连接。一个事务日志同步的完整过程是这样的&#xff1a;在备库 B 上通过 change master 命令&#xff0c;设置…

php study是什么,phpstudy与wamp区别的区别是什么?

phpstudyphpstudy是一个php运行环境的集成包&#xff0c;用户不需要去配置运行环境&#xff0c;就可以使用&#xff0c;phpstudy不仅是一款比较好用的php调试环境工具&#xff0c;并且还包括了开发工具和常用手册&#xff0c;对于新手是有很大帮助的。phpstudy集成最新的Apache…

安装了虚拟机后mysql用不了_在虚拟机上安装mysql,安装好了并且初始化之后,一直无法启动mysql如何解决?...

今天想在自己的虚拟机上安装mysql,安装好了并且初始化之后&#xff0c;一直无法启动mysql.1.service mysql start;报错&#xff1a;mysql is neither service nor target!?2.systemctl start mysql:报错&#xff1a;sysemctl start mysql &#xff1a; Failed to star mysql.s…

java全局机制,java实现全局异常机制

先上自己的代码&#xff0c;后整理下原理知识。下面是自己实现的全局异常机制1.继承Exception,自定义异常类​package com.zichen.xhkq.exception;/**** Title: CustomException* Description: 系统自定义的异常类型&#xff0c;实际开发中可能要定义多种异常类型* authorCNZZ*…

mysql8添加索引_MySQL8.0新特性-新的索引方式

三种新的索引方式1、隐藏索引MySQL8.0 支持隐藏索引(invisible index)&#xff0c;不可见索引隐藏索引不会被优化器使用&#xff0c;但需要维护。应用场景&#xff1a;软删除、灰度发布。软删除&#xff1a;不确定当前索引是否需要删除的时候&#xff0c;软删除&#xff0c;不会…