PiKaBaKaPu 2021-05-10 19:04 采纳率: 100%
浏览 34
已采纳

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

java新手求救:正在做一个学生信息管理系统的作业(jdbc的),可不可以实现像文件操作那样,在连接的数据库不存在的时候,新建一个数据库而且新建表呢,如果数据库和表存在就直接写数据和存数据。。。[face]emoji:031.png[/face][face]emoji:031.png[/face][face]emoji:031.png[/face]求救🆘
  • 写回答

2条回答 默认 最新

  • 关注
    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;
    }

    满意的话,采纳一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?