java新手求救:正在做一个学生信息管理系统的作业(jdbc的),可不可以实现像文件操作那样,在连接的数据库不存在的时候,新建一个数据库而且新建表呢,如果数据库和表存在就直接写数据和存数据。。。[face]emoji:031.png[/face][face]emoji:031.png[/face][face]emoji:031.png[/face]求救🆘
2条回答 默认 最新
- 无聊啊无聊啊啊啊啊啊啊 2021-05-31 17:31关注
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?