Java中如何使用嵌入MySQL

2024-09-04 19:58

本文主要是介绍Java中如何使用嵌入MySQL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转自 https://my.oschina.net/eliyanfei/blog/779774

这篇文件主要介绍在Java中嵌入式MySQL的使用,对于一些的应用项目,提供安装版的Mysql,Oracle是必须的工作。但是有时候如果是一个小的工具,可安装或者移植性比较强的小软件。再去安装数据库可能就比较麻烦了。

其实MySQL也有嵌入式的,不需要安装,在使用的过程中,会自动创建数据库以及通过代码的方式启动或者关闭。下面提供一些代码片段,具体的会提供下载地址。

这个是核心代码类,这个类实现了Mysql 的启动和停止以及数据库的启动状态。

package net.simple.mysql;import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;import com.mysql.management.MysqldResource;/*** * @author 李岩飞* @email eliyanfei@126.com	* 2016年11月2日 下午1:44:55**/
public final class EmbedMySqlServer {private MysqldResource mysqlInstance;//配置信息public final Properties props;//端口信息private String port;/*** 考虑到数据库的性能问题,允许将数据库放在其它磁盘*/private String embedMySqlHome;public EmbedMySqlServer(final Properties props) {this.props = props;}public EmbedMySqlServer(final Properties props, String embedMySqlHome) {this.embedMySqlHome = embedMySqlHome;this.props = props;}public final String getEmbedMySqlHome() {return null == embedMySqlHome ? getPlatformBaseDir() : embedMySqlHome;}/*** 获得当前应用主目录* @return 当前应用启动程序所在目录.*/public static String getPlatformBaseDir() {return System.getProperty("user.dir");}public static boolean isBlank(final String str) {int strLen;if (str == null || (strLen = str.length()) == 0) {return true;}for (int i = 0; i < strLen; i++) {if (Character.isWhitespace(str.charAt(i)) == false) {return false;}}return true;}public void startup() {final File baseDir = new File(getEmbedMySqlHome(), "mysql-em");mysqlInstance = new MysqldResource(baseDir);port = props.getProperty("port");if (isBlank(port))props.put("port", port = String.valueOf((int) (Math.random() * 40000)));final Set<Object> keys = props.keySet();final Map<String, String> options = new HashMap<String, String>(keys.size());for (final Object key : keys) {final String val = props.getProperty(key.toString());if ("".equals(val))options.put(key.toString(), null);elseoptions.put(key.toString(), val.replace("{$contextPath}", getPlatformBaseDir()));}if (!mysqlInstance.isRunning())mysqlInstance.start("Em_MySQL", options, false, keys.contains("defaults-file"));}public String getPort() {return port;}/*** 判断mysql是否正在运行*/public boolean isRunning() {return null == mysqlInstance ? false : mysqlInstance.isRunning();}public void shutdown() {if (mysqlInstance != null)mysqlInstance.shutdown();}public void cleanup() {if (mysqlInstance != null)mysqlInstance.cleanup();}
}

下面这个是启动Demo,

public static void main(String[] args) {try {Properties pro = new Properties();//根据机器配置,设置不同的参数pro.load(MysqlTest.class.getResourceAsStream("MySql_medium.properties"));new EmbedMySqlServer(pro).startup();//可以把数据库放到其他磁盘//new EmbedMySqlServer(pro,"f:\\").startup();Connection conn = getTestConnection();System.out.println(conn.isClosed());conn.close();} catch (Exception e) {e.printStackTrace();}}

MySql_general.properties一般机器的配置样例

MySql_medium.properties中等机器的配置样例

MySql_large.properties高配机的配置样例

如果需要初始化用户名和密码,在启动的配置文件里面,加入下面3句话
initialize-user=true
initialize-user.user=root
initialize-user.password=123456

具体的参数可以根据不同需求进行定义,比如端口可以自由定义。

需要引用的mysql两个jar,mysql-connector-mxj-gpl-6-0-11-db-files.jar,mysql-connector-mxj-gpl-6-0-11.jar

代码在Git上,地址是:https://git.oschina.net/eliyanfei/api_tools.git

这篇关于Java中如何使用嵌入MySQL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136883

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关