在我的第一个JavaFX程序完成安装的时候才突然发现,不能要用这个软件还要手动执行Sql来建表吧?

 于是我的想法是在Main程序中执行时检测数据库连接状况,如果没有检测到数据库或者连接异常,那么出现错误提示,如果数据库连接没有问题那么自动创建数据库并执行建表Sql进行初始化。

  1. package oa.util;
  2.  
  3. import java.io.IOException;
  4. import java.sql.DriverManager;
  5. import java.sql.SQLException;
  6. import java.util.Properties;
  7.  
  8. import org.apache.ibatis.jdbc.ScriptRunner;
  9.  
  10. import com.ibatis.common.resources.Resources;
  11. import com.mysql.jdbc.Connection;
  12. import com.mysql.jdbc.Statement;
  13.  
  14. public class CreateMySqlDatabase {
  15.  
  16. public static void createDatabase() throws SQLException {
  17. Connection conn;
  18. conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/", "root", "1234");
  19. Statement stmt = (Statement) conn.createStatement();
  20. String sql = "CREATE DATABASE UTILITY";
  21. stmt.executeUpdate(sql);
  22. }
  23.  
  24. public static void executeSql() throws IOException, SQLException {
  25. Properties props = Resources.getResourceAsProperties("mysql.properties");
  26. String url = props.getProperty("jdbc.url");
  27. String username = props.getProperty("jdbc.username");
  28. String password = props.getProperty("jdbc.password");
  29. Connection conn = (Connection) DriverManager.getConnection(url, username, password);
  30. ScriptRunner runner = new ScriptRunner(conn);
  31. runner.setErrorLogWriter(null);
  32. runner.setLogWriter(null);
  33. runner.runScript(Resources.getResourceAsReader("sql/utility.sql"));
  34. conn.close();
  35. System.out.println("==SUCCESS==");
  36. }
  37. }

 需要用到 ibatis-common-2.jar读取mysql.properties文件中的JDBC信息。

 MAIN做判断:

  1. try {
  2. DriverManager.getConnection("jdbc:mysql://localhost:3306/utility", "root", "1234");
  3. isError = false;
  4. } catch (MySQLSyntaxErrorException e) {
  5. primaryStage.setTitle("正在创建Utility数据库……");
  6. Label error = new Label("正在创建Utility数据库……");
  7. error.setFont(new Font("Cambria", 100));
  8. Pane pane = new Pane();
  9. pane.getChildren().add(error);
  10. Scene scene = new Scene(pane);
  11. primaryStage.setScene(scene);
  12. primaryStage.show();
  13. try {
  14. CreateMySqlDatabase.createDatabase();
  15. CreateMySqlDatabase.executeSql();
  16. isError = false;
  17. primaryStage.close();
  18. } catch (SQLException | IOException e1) {
  19. primaryStage.close();
  20. e1.printStackTrace();
  21. }
  22.  
  23. } catch (SQLException se) {
  24. Thread.sleep(3000);
  25. primaryStage.close();
  26. se.printStackTrace();
  27. }
  28.  
  29. if (!isError) {
  30. run();
  31. }
  32.  
  33. }
  34.  
  35. public static void main(String[] args) {
  36. launch(args);
  37. }

JavaFX程序初次运行创建数据库并执行建表SQL的更多相关文章

  1. Oracle 11g R2创建数据库之手工建库方式

    在之前的博文当中梳理了关于DBCA静默方式创建数据库的过程,本文就手工通过SQL*PLUS客户端采用CREATE DATABASE语句创建数据库.这种建库方式就是完全使用手工SQL语句创建数据库,通常 ...

  2. mysql数据库(一):建表与新增数据

    一. 学习目标 理解什么是数据库,什么是表 怎样创建数据库和表(create) 怎样往表里插入数据(insert) 怎样修改表里的数据(update) 怎样删除数据库,表以及数据(delete) 二. ...

  3. 0420-mysql命令(数据库操作层级,建表,对表的操作)

    注意事项: 符号必须为英文. 数据库操作层级: 建表大全: #新建表zuoye1:drop table if exists zuoye1;create table zuoye1(    id int ...

  4. 应用程序初次运行数据库配置小程序(Java版)

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

  5. 创建数据库以及其属性的sql语句

    创建数据库的SQL语句: create database stuDB on primary -- 默认就属于primary文件组,可省略 ( /*--数据文件的详细描写叙述--*/ name='stu ...

  6. mysql创建存储过程,批量建表分表00到99

    这里以sqlyong为软件示例: --创建存储过程DELIMITER $$ CREATE PROCEDURE `createTablesWithIndex`() BEGIN DECLARE `@i` ...

  7. 项目那几步走:先配置setting路径文件、创建数据库、执行数据库迁移命令、配置mysql数据库信息、注册app、注释中间件、pymysql替换mysqldb-配置urls路由-继续视图函数-然后HTML页面展示-HTML里面导入css文件、models配置数据库表、

    django使用mysql数据库: 首先cmd创建库 1.settings: """Django settings for day42 project. Generate ...

  8. flask项目第一次如何运行创建数据库

  9. MySQL Workbench 创建数据库,添加新表,添加字段

    建立数据库 第一步: 第二步: 第三步: 如图弹出弹框,继续点击Apply按钮,最后点击Finish按钮完成数据库的建立 创建表与添加字段 双击!!!  一下刚刚建立好的数据库,然后再创建表,不然会出 ...

随机推荐

  1. python 正则表达式教程(转)

    转自:https://zhuanlan.zhihu.com/p/28920775 本节我们看一下正则表达式的相关用法,正则表达式是处理字符串的强大的工具,它有自己特定的语法结构,有了它,实现字符串的检 ...

  2. selenium下拉菜单

    from selenium.webdriver.support.select import Selectdef select_value(self, css, value):    '''    选中 ...

  3. Java实现代理服务器

    Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演"中间人"的角色. HTTP的代理服务器即是Web服务器又是Web客户端. 代理服务器 ...

  4. 前端每日实战:93# 视频演示如何用纯 CSS 创作一根闪电连接线

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/RBjdzZ 可交互视频 此视频是可 ...

  5. 百度编辑器UEditor使用总结

    官网下载地址:http://ueditor.baidu.com/website/download.html 我下载的是jsp版本,下载后将整个目录复制到项目的js包下,然后将jsp包下的lib下的ja ...

  6. Dump文件的生成

    一.Windows系统的任务管理器里抓dump 启动任务管理器,选中某个进程,右键,弹出菜单"创建转储文件" 注意事项: 当你在64位Windows系统上抓32位进程的dmup文件 ...

  7. linux运维、架构之路-内网NTP时间服务器

    一.环境 [root@m01 tmp]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@m01 tmp]# hostname -I ...

  8. BZOJ 1492: [NOI2007]货币兑换Cash 斜率优化 + splay动态维护凸包

    Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个 ...

  9. 20180711-Java Number类

    下面是一个装箱与拆箱的例子: public class Test{ public static void main(String args[]){ Integer x = 5; // boxes in ...

  10. PerPoly Collision(用物体本身模型做碰撞)

    打开static mesh editor,在static mesh settings里找到collision complexity选项,选择最后一项: Use Complex collision as ...