应用程序初始化数据库配置小程序

  之前写过一个Java版的信息管理系统,但部署系统的时候还需要手动的去配置数据库和导入一些初始化的数据才能让系统运行起来,所以我在想是不是可以写一个小程序在系统初次运行的时候自动部署数据库和导入一些初始化数据。然后就有了以下的思路:

  在应用程序入口处判断数据库是否已经配置完成,若配置完成则进入正常的登录系统完成正常操作即可,若未配置则进入数据库配置的小程序完成数据库配置然后再进入系统,但如何来判断是否已经配置完成呢,在这里我用的是比较原始的方法,配置数据库的时候系统会在相关目录下自动生成一个关于数据库相关的配置文件(config.xml),该配置文件说明了数据库的种类,数据库的用户名,数据库的密码(涉及到的安全性问题之后再处理),以及应用程序所用到数据库也就是即将自动创建的数据库名,所以在应用程序启动的时候系统会去检测相关路径下是否有该配置文件,若该文件存在则数据库配置完成,否则该系统是初次运行,需要启动数据库配置小程序。进入数据库配置小程序后,会弹出一个弹出式对话框,我们需要选择使用到的数据库以及输入数据库用户名,密码以及系统用到的数据库的名,点击测试按钮查看是否可以连接上数据库,若能完成连接则会多出一个初始化按钮,点击初始化按钮会执行相应的创建数据库数据表以及导入数据等操作,而这些操作则可以通过读取初始化文件(文件中是初始化执行的sql语句),初始化完成即完成了整个数据库的初始化任务,然后会调用正常的登录程序登录进入系统。

  所以整个流程总结下来就是,运行应用程序——>判断相关目录下是否有数据库的配置文件(config.xml)(有则进入正常的登录程序)——>若没有则运行数据库初始化小程序——>选择数据库类型,输入用户名密码以及新建的数据库的名——>点击测试按钮(测试不通过检查数据库重试)——>测试成功则点击初始化按钮完成初始化——>初始化任务完成后会跳转到正常的登录程序。

  程序入口判断程序

package hxy;
import java.io.File;
class CreateDBConfig {
public CreateDBConfig(){
try {
File file = new File("config");
File filePath = new File("config//config.xml");
if(!file.exists()){
if(file.mkdir()){
if(!filePath.exists()){
new DBForm();
}else{
System.out.print("配置文件创建失败!!!");
}
}
else{
System.out.println("目录创建失败!!!");
}
}
else{
if(!filePath.exists()){
new DBForm();
}else{
System.out.println("数据库已经配置成功直接进入应用!!!");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

  数据库选择界面以及控件监视器程序(完成配置数据的收集然后交给配置文件生成程序生成相应的配置文件)

在这里界面主要是一个下拉列表框提供数据库的类型的选择,目前我只提供了mysql和sqlserver两种数据库的选择,有兴趣的可以自己添加其他的数据库的相关选项,这里还有一点我没考虑那就是数据库的位置,因为我这里写的主要是为了连接本地数据库所以我的数据库连接字符串中的地址都是localhost(127.0.0.1),如果这里需要连接网络数据库的话,我们可以在对话框中添加连接字符串的输入框,如此就可以连接上网络数据库了,所以界面上只有用户名和密码以及数据库名的说明,当然如果需要更详细的配置的话我们也可以在配置文件中添加更详细的子标签和在对话框中设置更详细的选项。

public Database getDatabase(){
Database db = new Database();
String dbType = databaseType.getSelectedItem().toString().trim();
System.out.println(dbType);
String dbUser = userName.getText().trim();
@SuppressWarnings("deprecation")
String dbPassword = password.getText().trim();
String dbName = databaseName.getText().trim();
if(dbType==null|dbUser==null|dbPassword==null|dbName==null){
new JOptionPane().showMessageDialog(okButton, "请完善数据库信息!!!");;
}
else{
if(dbType.equals("MySql")){
db.setType(dbType);
db.setDriver("com.mysql.jdbc.Driver");
db.setUri("localhost");
db.setPort("3306");
db.setUser(dbUser);
db.setPassword(dbPassword);
db.setName(dbName);
}
else{
db.setType(dbType);
db.setDriver("com.microsoft.sqlserver.jdbc.SQLServerDriver");
db.setUri("localhost");
db.setPort("1433");
db.setUser(dbUser);
db.setPassword(dbPassword);
db.setName(dbName);
}
}
return db;
}

  在弹出式对话框中我们填写了详细的数据库的配置信息,这些信息综合成了一个实体类Database,如此将这些配置设置成私有成员变量,这样在之后的调用中也只需要调用xml文件解析器来获取相应的配置然后把配置信息注入到一个Database的实体中,如此这个实体就拥有了所有的配置信息,连接程序只需要调用这个实体就可以获取到和数据库相连的需要的信息来完成连接和后期的数据库交互。  

配置文件生成程序即把数据库的相关信息写入配置文件供系统之后连接数据库时读取,所以这里生成配置文件还有一个比较好的好处就是我的程序不需要写死就是在程序中就需要完全的把数据库的相关信息写进入,这里我只需要读取配置文件然后注入到相关的方法中就行。至于配置文件生成器就是先创建一个文件,然后根据相应的配置数据写入到文件中,当然这是一个xml文件,也可以使用dom4j等来科学的写入和修改,但这样比较简单粗暴,至于xml文件的解析器和生成器程序在以后的博文中相应的介绍到。

  这个小程序完全是因为自己的小想法和小猜想去实践写的并应用到了我的之前的那个信息管理系统中,以上是小程序所有代码中一部分,程序完整代码在我的GitHub中(https://github.com/huangxinyuan650/ConnectDatabase)欢迎大家批评指正

应用程序初次运行数据库配置小程序(Java版)的更多相关文章

  1. 微信小程序开发——前端如何区分小程序运行环境

    前言: 之前用vue做h5项目,对于接口请求,都是根据前端访问域名来判断运行环境,然后自动适配对应的服务器地址的.这样的好处就是在开发.测试及发布上线全程都不需要手动去改接口请求地址,只要提前配置好就 ...

  2. inux关于readlink函数获取运行路径的小程序

    inux关于readlink函数获取运行路径的小程序   相关函数: stat, lstat, symlink 表头文件: #include <unistd.h> 定义函数:int  re ...

  3. 基于小程序云Serverless开发微信小程序

    本文主要以使用小程序云Serverless服务开发一个记事本微信小程序为例介绍如何使用小程序云Serverless开发微信小程序.记事本小程序的开发涉及到云函数调用.云数据库存储.图片存储等功能,较好 ...

  4. 微信小程序开发公测,小程序账号申请办法攻略

    11月3号晚上 10 点,微信公众平台发布公告,宣布微信小程序正式开放公测.此次小程序公测允许开发者将产品提交至微信公众平台审核,但是暂时不支持发布,也就是说普通消费者若想体验小程序,还需要等待一段时 ...

  5. 《微信小程序七日谈》- 第六天:小程序devtool隐藏的秘密

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩: 第五 ...

  6. 微信小程序开发——打开另一个小程序

    微信小程序打开另一个小程序,有两种方法:1.超链接:2.点击按钮. 全局配置: 跳转到其他小程序,需要在当前小程序全局配置中配置需要跳转的小程序列表,代码如下: App.json { ... &quo ...

  7. 从A小程序跳转到B小程序

    从A小程序跳转到B小程序: A小程序 wxml: <navigator target="miniProgram" open-type="navigate" ...

  8. 只会Vue怎么开发小程序?vue和微信小程序的到底有哪些区别?

    写了vue项目和小程序,发现二者有许多相同之处,在此想总结一下二者的共同点和区别. 一.生命周期 先贴两张生命周期图对比下: vue生命周期 小程序生命周期 相比之下,小程序的钩子函数要简单得多. v ...

  9. 微信小程序全选,微信小程序checkbox,微信小程序购物车

    微信小程序,这里实现微信小程序checkbox,有需要此功能的朋友可以参考下. 摘要: 加减商品数量,汇总价格,全选与全不选 设计思路: 一.从网络上传入以下Json数据格式的数组  1.标题titl ...

随机推荐

  1. SpringMVC文件上传报错org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest

    错误信息: java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to or ...

  2. C#使用FFmpeg 将视频格式转换成MP4示例

    一.常用视频格式分辨率 640x480p 720p格式,分辨率为1280×720p / 60Hz,行频为45kHz 1080p格式,分辨率为1920×1080逐行扫描,专业格式 二.FFmpeg部分参 ...

  3. CCS设计手段——相对定位

    1.认识相对定位 相对定位就是让元素相对自己原来的位置进行位置调整. 2.相对定位的本质特性 不脱标,老家留坑,形影分离. 3.用途 ①微调位置 ②做绝对定位的参考,子绝父相 4.相对定位的定位置 相 ...

  4. MulticastSocket绑定端口的问题

    该文章由 Binkery 发布于 Binkery技术博客 http://www.binkery.com 如转载请注明出处,该文章的链接地址为 http://www.binkery.com/archiv ...

  5. Android Camera HAL浅析

    1.Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信 ...

  6. 下标脚本(Swift)

    下标脚本 可以定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问集合(collection),列表(list)或序列(sequence的快捷 ...

  7. [iOS] 响应式编程开发-ReactiveCocoa(二)

    RAC实现图片下载功能 在实现异步RAC下载图片的过程中,需要注意以下几点: • 通过 NSURLConnection 对象的 +(RACSignal *)rac_sendAsynchronousRe ...

  8. windows下查找指定端口被哪个程序占用

    在Windows环境下,用netstat命令查看某个端口号是否占用,为哪个进程所占用. eg.查看端口号为61078被哪个程序占用 1.查看端口号为61079被哪个PID所占用:Netstat –an ...

  9. MYSQL最大连接数修改

    MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两个 方法一:进入MYSQL安装目录 打开MYSQL配置文件 ...

  10. Zju1290 Word-Search Wonder(http://begin.lydsy.com/JudgeOnline/problem.php?id=2768)

    2768: Zju1290 Word-Search Wonder Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4  Solved: 2[Submit] ...