Java 判断数据库和表是否存在,若不存在,则创建
问题描述:
一般而言,我们创建创建数据库,可以在mysql或者navicat中自定义,然后利用jdbc连接Java程序和数据库,进行数据间的增删给查操作, 有这样一个问题,当我们在设计一个项目的时候,需要在运行项目时创建数据库,但是又不能让操作者去创建数据库,这个时候,项目和数据库之间的操作就没有办法实现,因为安装好的mysql中并没有数据库,则在建立连接时无法连接。
问题分析:
我们可不可以通过Java程序判断数据库和表是否存在,若不存在,则通过Java程序创建数据库和相应的表,若存在,则返回return。
当我们安装好mysql软件的时候,系统会默认几个数据库,如下图,bxjt和hello是我自己创建的数据库,其他的三个是系统默认的数据库,这样的话,我们首先通过jdbc将Java程序和test数据库连接起来,然后判断hello数据库是否存在,若存在,则return,若不存在,则创建数据库,
问题解决:
(1)搭建数据库环境,
(2)通过jdbc利用test数据库建立Java程序和数据库的连接
(3)判断数据库和表是否存在,若存在,返回,若不存在,则建立新的数据库和表。
1.判断数据库是否存在,若不存在,在创建
import java.sql.*;
public class testDemo{
public static void main(String[] args) throws Exception
{
Class.forName("com.mysql.cj.jdbc.Driver");//加载注册
//一开始必须填一个已经存在的数据库
String url = "jdbc:mysql://localhost:3306/test?
useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
Connection conn = DriverManager.getConnection(url, "root", "lyp");//建立连接
Statement stat = conn.createStatement();
String checkdatabase="show databases like \"hello\"";//判断数据库是否存在
String createdatabase="create database hello";//创建数据库
stat = (Statement) conn.createStatement();
ResultSet resultSet=stat.executeQuery(checkdatabase);
if (resultSet.next()) {//若数据库存在
System.out.println("hello exist!");
stat.close();
conn.close();
}else{
if(stat.executeUpdate(createdatabase)==0)//若数据库不存在
//打开创建的数据库
url = "jdbc:mysql://localhost:3306/hello?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
conn = DriverManager.getConnection(url, "root", "lyp");
stat = conn.createStatement();
stat.close();
conn.close();
System.out.println("create table success!");
}
}
}
程序运行之前,MySQL中没有hello数据库,
程序运行结果如下:
2.判断数据库中是否有表存在,若不存在,则创建。
import java.sql.*;
public class testDemo{
public static void main(String[] args) throws Exception
{
Class.forName("com.mysql.cj.jdbc.Driver");//加载注册
//一开始必须填一个已经存在的数据库
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
Connection conn = DriverManager.getConnection(url, "root", "lyp");//建立连接
Statement stat = conn.createStatement();
//创建数据库hello
// stat.executeUpdate("create database hello");
String checkdatabase="show databases like \"hello\"";//判断数据库是否存在
String createdatabase="create database hello";//创建数据库
stat = (Statement) conn.createStatement();
ResultSet resultSet=stat.executeQuery(checkdatabase);
if (resultSet.next()) {//若数据库存在
System.out.println("hello exist!");
}else{
if(stat.executeUpdate(createdatabase)==0)//若数据库不存在
//打开创建的数据库
stat.close();
conn.close();
url = "jdbc:mysql://localhost:3306/hello?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
conn = DriverManager.getConnection(url, "root", "lyp");
stat = conn.createStatement();
//创建表test
stat.executeUpdate("create table test(id int, name int)");
//添加数据
stat.executeUpdate("insert into test values(1, 2)");
stat.executeUpdate("insert into test values(2, 3)");
//查询数据
ResultSet result = stat.executeQuery("select * from test");
while (result.next())
{
System.out.println(result.getInt("id") + " " + result.getString("name"));
}
//关闭数据库
result.close();
stat.close();
conn.close();
System.out.println("create table success!");
}
}
}
运行结果如下
参考代码::
package test;
import java.io.IOException;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
public class test {
public static String url =
"jdbc:mysql://192.168.1.102:3306/*****_orders";
public static String user = "*****";
public static String password = "123456";
public static void main(String[] args) throws ClassNotFoundException,
IOException, SQLException, ParseException {
String createBrandDatabase = "create table "
+ "userbrandtime"
+
"(uid int(10) unsigned NOT NULL,brand_ids int(10) unsigned NOT NULL,timestamp int(10) unsigned NOT NULL,primary key(uid,brand_ids))"
+ " DEFAULT CHARSET=utf8";
String checkTable="show tables like \"userbrandtime\"";
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = (Connection) DriverManager.getConnection(url,
user, password);
Statement stmt = (Statement) con.createStatement();
ResultSet resultSet=stmt.executeQuery(checkTable);
if (resultSet.next()) {
System.out.println("table exist!");
}else{
if(stmt.executeUpdate(createBrandDatabase)==0)
System.out.println("create table success!");
}
} finally {
}
}
}