java新手求救:正在做一个学生信息管理系统的作业(jdbc的),可不可以实现像文件操作那样,在连接

java新手求救:正在做一个学生信息管理系统的作业(jdbc的),可不可以实现像文件操作那样,在连接的数据库不存在的时候,新建一个数据库而且新建表呢,如果数据库和表存在就直接写数据和存数据。。。[face]emoji:031.png[/face][face]emoji:031.png[/face][face]emoji:031.png[/face]求救🆘
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import org.springframework.stereotype.Component;
import lombok.Data;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

/**
 * @author 
 * @date created in 16:17 2021/5/31
 */
@Component
@ConfigurationProperties(prefix = "spring.datasource")
@Primary
@Data
public class DataSourceConfig {

    private String url;

    private String username;

    private String password;

    private String driverClassName;
    @Bean
    public DataSource dataSource(){
        DruidDataSource datasource = new DruidDataSource();
        datasource.setUrl(url);
        datasource.setUsername(username);
        datasource.setPassword(password);
        datasource.setDriverClassName(driverClassName);
        try {
            Class.forName(driverClassName);
            String url01 = url.substring(0,url.indexOf("?"));
            // jdbc:mysql://127.0.0.1:3306
            String url02 = url01.substring(0,url01.lastIndexOf("/"));
            String datasourceName = url01.substring(url01.lastIndexOf("/")+1);
            // 连接已经存在的数据库,如:mysql,information_schema这个数据库是mysql中自带的,先连接这个库去创建数据库
            Connection connection = DriverManager.getConnection(url02+"/information_schema?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8", username, password);
            Statement statement = connection.createStatement();
            // 创建数据库
            statement.executeUpdate("create database if not exists `" + datasourceName + "` default character set utf8 COLLATE utf8_general_ci");
            // 连接到已经创建的数据库
            Connection connection1 = DriverManager.getConnection(url,username,password);
            // 这个是sql脚本放在resources文件夹下面            
Resource initSqlScript = new ClassPathResource("db/migration/create_schema.sql");
            // 执行sql脚本,可以创建表以及初始化数据
            ScriptUtils.executeSqlScript(connection1,initSqlScript);
            statement.close();
            connection.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return datasource;
    }

}

yml配置文件

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/vhr?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
    driver-class-name: com.mysql.cj.jdbc.Driver

我刚测试的这样可以,另外技术是springboot+mybatis-plus+druid

其实开发阶段自动创建表建议使用

@org.hibernate.annotations.Table()注解自动创建表

更新实体字段后会自动更新数据库中的字段,上面的那个还要手动去维护sql脚本,使用如下

package com.snowball.base.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.validation.constraints.Email;


@Data
@NoArgsConstructor
@Entity
@Table(name = "user")
@TableName("user")
@org.hibernate.annotations.Table(appliesTo = "user",comment = "用户表")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "用户表")
public class User extends BaseEntity{
    private static final long serialVersionUID = 1L;

    @ApiModelProperty("姓名")
    @Column(columnDefinition = "varchar(50) comment'姓名'")
    private String realName;
}

 

满意的话,采纳一下

可以