java 判断mysql表是否存在吗_JDBC如何判断数据库的表是否存在

实现原理:主要是利用DatabaseMetaData.getTables(...)这个方法实现的,但是每一种数据库还存在一些差异,具体见下面详解。

一、getTables(...)方法说明

Java代码 97657f805861984e17b433e1b1736c84.gif 3fde6ead3502a76fb29a9dc09d5fa70d.png

03438c43d1f1b1d048816225a6d2e6a7.gif

ResultSet DatabaseMetaData.getTables(String catalog,

String schemaPattern,

String tableNamePattern,

String types[])throwsSQLException;

ResultSet DatabaseMetaData.getTables(String catalog,

String schemaPattern,

String tableNamePattern,

String types[]) throws SQLException;

catalog - 数据库目录名称,可设为null,(具体JDBC驱动的实现不一样在MySQL中指数据库名)。

schemaPattern - 方案名称的样式,可设为null,( 具体JDBC驱动的实现不一样, 在Oracle中指用户名)。

tableNamePattern - 表名称的样式,可以包含匹配符比如:"TEST%"

types - 要包括的表类型组成的列表,可设为null,表示所有的。types的常量值为:"TABLE","VIEW",    "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM"

各种数据库系统对Catalog和Schema的支持和实现方式是不一样的,针对具体问题需要参考具体的产品说明书,比较简单而常用的实现方式是使用数据库名作为Catalog名,使用用户名作为Schema名,具体可参见下表:

常用数据库Catalog和Schema对照表

供应商

Catalog支持

Schema支持

Oracle

不支持

Oracle User ID

MySQL

不支持

数据库名

MS SQL Server

数据库名

对象属主名,2005版开始有变

DB2

指定数据库对象时,Catalog部分省略

Catalog属主名

Sybase

数据库名

数据库属主名

Informix

不支持

不需要

PointBase

不支持

数据库名

二、常用数据库举例

1. MySQL示例

url = jdbc:mysql://localhost:3306/michaeldemo

user = "root";

getTables("michaeldemo", null, tableName,new String[] { "TABLE" });

看到这有人会问,你上面的对照表中不是说过MySQL不支持Catalog,而是支持Schema,这里怎么又设置第一个参数呢?不是互相矛盾么?的确是有这个疑问,不过当你看过MySQL的JDBC驱动源码后你就会明白其中原因了,我摘录一部分实现代码具体如下:

Java代码 97657f805861984e17b433e1b1736c84.gif 3fde6ead3502a76fb29a9dc09d5fa70d.png

03438c43d1f1b1d048816225a6d2e6a7.gif

String sql ="SELECT TABLE_SCHEMA AS TABLE_CAT, "

+"NULL AS TABLE_SCHEM, TABLE_NAME, "

+"CASE WHEN TABLE_TYPE='BASE TABLE' THEN 'TABLE' WHEN TABLE_TYPE='TEMPORARY' THEN 'LOCAL_TEMPORARY' ELSE TABLE_TYPE END AS TABLE_TYPE, "

+"TABLE_COMMENT AS REMARKS "

+"FROM INFORMATION_SCHEMA.TABLES WHERE "

+"TABLE_SCHEMA LIKE ? AND TABLE_NAME LIKE ? AND TABLE_TYPE IN (?,?,?) "

+"ORDER BY TABLE_TYPE, TABLE_SCHEMA, TABLE_NAME";

可知参数catalog在MySQL中实际是当做Schema来用的,所以这就解释了为什么mysql中设置的却是 参数catalog的值。

2. Oracle示例

url = jdbc:oracle:thin:@localhost:1521:ORA11g

user = "demo";

getTables(null, "DEMO", tableName,new String[] { "TABLE" });

二、测试代码

JdbcCheckTableExitDemo.java

Java代码 97657f805861984e17b433e1b1736c84.gif 3fde6ead3502a76fb29a9dc09d5fa70d.png

03438c43d1f1b1d048816225a6d2e6a7.gif

packagemichael.jdbc;

importjava.sql.Connection;

importjava.sql.DatabaseMetaData;

importjava.sql.DriverManager;

importjava.sql.ResultSet;

importjava.sql.SQLException;

/**

* @blog http://sjsky.iteye.com

* @author Michael

*/

publicclassJdbcCheckTableExitDemo {

privatestaticString url ="jdbc:mysql://localhost:3306/michaeldemo";

privatestaticString user ="root";

privatestaticString password ="";

privatestaticString driver ="com.mysql.jdbc.Driver";

// private static String url = "jdbc:oracle:thin:@localhost:1521:ORA11g";

// private static String user = "demo";

// private static String password = "111111";

// private static String driver = "oracle.jdbc.driver.OracleDriver";

/**

* @param args

*/

publicstaticvoidmain(String[] args) {

Connection conn =null;

String tableName ="TB_MYTEST";

try{

Class.forName(driver);

conn = DriverManager.getConnection(url, user, password);

conn.setAutoCommit(false);

DatabaseMetaData meta = conn.getMetaData();

// 第一个参数catalog在MySQL中对应数据库名:michaeldemo

ResultSet rsTables = meta.getTables("michaeldemo",null, tableName,

newString[] {"TABLE"});

// 第二个参数schemaPattern在ORACLE中对应用户名:demo

// ResultSet rsTables = meta.getTables(null, "DEMO", tableName,

// new String[] { "TABLE" });

System.out.println("getTables查询信息如下:");

System.out

.println("TABLE_CAT \t TABLE_SCHEM \t TABLE_NAME \t TABLE_TYPE");

while(rsTables.next()) {

System.out.println(rsTables.getString("TABLE_CAT") +"\t"

+ rsTables.getString("TABLE_SCHEM") +"\t"

+ rsTables.getString("TABLE_NAME") +"\t"

+ rsTables.getString("TABLE_TYPE"));

}

rsTables.close();

}catch(Exception e) {

e.printStackTrace();

}finally{

try{

if(null!= conn) {

conn.close();

}

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

Oracle中运行结果:

getTables查询信息如下:

TABLE_CAT      TABLE_SCHEM    TABLE_NAME     TABLE_TYPE

null                  DEMO                 TB_MYTEST         TABLE

MySQL中运行结果:

getTables查询信息如下:

TABLE_CAT          TABLE_SCHEM              TABLE_NAME               TABLE_TYPE

michaeldemo             null                         TB_MYTEST                 TABLE

基于Matlab的自动泊车系统开发:利用模糊控制实现智能停车解决方案的详细教程 Matlab是一种广泛应用于科学计算、工程建模与仿真的编程语言,其强大的工具箱和简洁的编程语法,使其成为开发自动泊车系统的理想选择。在开始编写代码之前,我们需要搭建Matlab的工作环境,并熟悉相关的工具箱,如Fuzzy Logic Toolbox,用于实现模糊控制。首先,确保你已经安装了Matlab软件,并加载了必要的工具箱。接下来,我们将逐步讲解如何在Matlab中实现自动泊车系统。 阅读详情

相关推荐

java判断数据库是否存在

java代码判断一张数据库是否存在............

java mysql数据库判断是否存在_如何使用Java检查mysql中的特定数据库是否已经存在...

我是JDBC的新手,我想找出是否有一种方法可以检查MySQL是否已经存在特定的数据库。假设我想创建一个名为students的数据库,如果已经在MySQL中创建了students数据库,则eclipse中的错误消息将指出该students数据库已经存在。 但是,我想做的是创建一个布尔方法来检查学生数据库是否已经存在。 如果存在,则布尔方法将返回false,否则返回true,那么我可以创建学生数据库...

weixin_35756624的博客 1174

中国银行批量文件制作工具

中国银行批量文件制作工具,可制作批量付款信息文件,用于网银导入

问题解决:DatabaseMetaData.getTables()方法,返回了所有库中的

一、问题描述   DatabaseMetaData .getTables()方法常常用来获取数据库中的所有信息。 但我想要获取我的本地数据库db_test中的信息,出现了错误。 try { Connection conn = DBManager.getConnection(); DatabaseMetaData metaData = conn.getMetaData(); ResultSet tableRet = metaData

菜到不敢run 8093

使用JDBC获取各数据库的Meta信息——以及对应的列

数据库结构同步

java2edition的专栏 1588

java 判断mysql是否存在_用java 判断mysql中某个是否存在

import java.sql.*;Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/world";String user = "root";String password = "root";try{Connection cnt = DriverManager.getConnection...

weixin_35975197的博客 1390

Java 判断数据库是否存在,若不存在,则创建

问题描述: 一般而言,我们创建创建数据库,可以在mysql或者navicat中自定义,然后利用jdbc连接Java程序和数据库,进行数据间的增删给查操作, 有这样一个问题,当我们在设计一个项目的时候,需要在运行项目时创建数据库,但是又不能让操作者去创建数据库,这个时候,项目和数据库之间的操作就没有办法实现,因为安装好的mysql中并没有数据库,则在建立连接时无法连接。 问题分析: 我...

尚拙的博客 1万+

MySQL 数据库JDBC 编程之 Java 连接 MySQL

文章目录1. 数据库编程的基础条件2. Java数据库编程:JDBC3. JDBC 访问数据库的层次结构4. MySQL 数据库操作介绍5. MySQL 驱动包的下载及添加到项目6. JDBC 使用步骤6.1 创建数据库源,连接 Connection6.2 构造 SQL 语句,为执行的操作做准备6.3 执行 SQL,并处理结果集6.4 释放资源6.5 JDBC 编程模板7. JDBC 常用接口和类7.1 DataSource 和 MysqlDataSource7.2 Connection7.3 Prep

吞吞吐吐大魔王的博客 5243

解决问题:JDBC判断指定数据库是否存在某张

elastic-job没有自动创建JOB_EXECUTION_LOG,JOB_STATUS_TRACE_LOG

xhga 2739

Java代码操作MySQL数据库——JDBC编程

1. JDBC的初识 2. 准备工工作 3. 增加数据 4. 修改数据 5. 删除数据 6. 查询数据

mgzdwm的博客 2904

MySQL系列】JavaJDBC编程

MySQL数据库 JDBC编程部分的内容~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

哎呀是小张啊 的博客 2026

JAVAJDBC连接MYSQL数据库并查询数据

目录一、使用工具1)MYSQL数据库2)Navicat可视化软件3)IDEA编译java工具二、MYSQL里创建一个数据库1)Navicat连接数据库四、参考链接 一、使用工具 我已经安装过了这些工具了,就不再次展示安装过程了,详细的安装过程下方都有链接,可以自行查看。 1)MYSQL数据库 可在MYSQL官网下载:MYSQL的下载 MYSQL的安装(这个博主写得非常详细):https://blog.csdn.net/a802976/article/details/119255644 2)Navicat可视

m0_49297422的博客 6888

MySQL探索之旅】JDBC (Java连接MySQL数据库)

🙏小杨水平有限,欢迎各位大佬指点,相互学习进步!

QQ3447387928的博客 2758

java(IDEA)连接MySQL数据库并查询数据——JDBC

java链接MySQL数据库,采用JDBC 连接MySQL 数据库并查询数据一、下载二、MySQL安装三、数据库中的操作:创建数据四、JDBC 连接MySQL 数据库并查询数据五、运行输出小小的总结参考文献 一、下载 下载jar库文件 Java 连接 MySQL 需要驱动包,下载地址为:http://dev.mysql.com/downloads/connector/j/ 下载MySQL 二、MySQL安装 双击运行如下图下载的“mysql-installer-community-8

YouthBlood9的博客 1万+

Java语言编程:使用Java语言通过JDBC连接数据库,并建进行数据的增删查改

“做中学”实验一 说在前面:在进行这个实验之前我们只学习了C++一门编程语言,对于java数据库真就“做中学”,所以整个博文也仅仅只是在分享我自己的学习过程,如果代码有不规范或者不正确的地方还希望大家能给予指正,感谢! 实验要求 在安装配置好Mysql数据库后,使用Java语言通过JDBC直接连接数据库,在数据库中建并进行数据的增删查改。 关键代码: …… Class.forName(……); //加载数据库驱动名 String url=……; //数据连接的url String name=……;

笨手笨脚°的博客 6489

Spring Boot - 使用 JdbcTemplate 判断一张 MySQL 是否已经存在

文章目录环境使用 JdbcTemplate 判断一张 MySQL 是否已经创建数据库新建项目项目结构配置编码 & 测试参考 环境 操作系统: Windows 10 x64 集成开发环境: Spring Tool Suite 4 Version: 4.14.0.RELEASE Build Id: 202203131612 MySQL 数据库版本信息: mysql> status -------------- mysql Ver 14.14 Distrib 5.7.30, for Lin

qq_29761395的博客 3907

JDBC如何判断数据库是否存在

实现原理:主要是利用DatabaseMetaData.getTables(...)这个方法实现的,但是每一种数据库存在一些差异,具体见下面详解。    一、getTables(...)方法说明   Java代码   ResultSet DatabaseMetaData.getTables(String catalog,                 

奋斗吧骚年 8524

java 判断mysql是否存在吗_[SQL,Java]判断某一个已知名的是否数据库存在的方法 | 李大仁博客...

今天白天遇到一个问题,要求判断一个已知名的是否数据库存在的方法,这种问题还是挺让人郁闷了,先GG,后baidu,结果找到的方法要么只能适用于专用的数据库,要么就是没有考虑到X排他锁的问题。不过还好想到了SUN的API,在java.sql包下面有这样一个接口DatabaseMetaData可以一用,方法很简单获取数据库meta中的是否有你要的就好,而且只要是你的JDBC驱动支持就好,通用性...

weixin_34061587的博客 395

Java中使用JDBC获取MySQL数据库的名称、名和字段名及相关信息

通过java代码,连接MySQL,获取MySQL数据库信息、数据库名称、名称、字段名称、字段类型、字段对应内容。

wxq_csdn的博客 2492

Java 通过JDBC连接并操作Mysql数据库

使用Java连接数据库需要使用JDBC驱动。JDBCJava Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。以下是使用方法 一、安装配置好mysql 二、下载驱动包 : http://dev.mysql.com/downloads/connector/j/

Leezitao的博客 5万+

Java使用JDBC连接mysql数据库实现 增删改查操作

IEDA19.0.1mysql依赖包:mysql-connector-j-8.0.32.jar。

qq_64813512的博客 4336
上一篇: eclipse tomcat mysql 环境搭建_web环境搭建,包括jdk安装,tomcat,mysql,eclipse安装
下一篇: 单例模式获取mysql连接_jdbc连接数据库(单例模式)
刘恺威
博客等级 码龄8年 26粉丝 90原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值