• JavaFX程序初次运行创建数据库并执行建表SQL


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

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

    package oa.util;
    
    import java.io.IOException;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.Properties;
    
    import org.apache.ibatis.jdbc.ScriptRunner;
    
    import com.ibatis.common.resources.Resources;
    import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.Statement;
    
    public class CreateMySqlDatabase {
    
    	public static void createDatabase() throws SQLException {
    		Connection conn;
    		conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/", "root", "1234");
    		Statement stmt = (Statement) conn.createStatement();
    		String sql = "CREATE DATABASE UTILITY";
    		stmt.executeUpdate(sql);
    	}
    	
    	
    	public static void executeSql() throws IOException, SQLException {
    		Properties props = Resources.getResourceAsProperties("mysql.properties");
    		String url = props.getProperty("jdbc.url");
    		String username = props.getProperty("jdbc.username");
    		String password = props.getProperty("jdbc.password");
    		Connection conn = (Connection) DriverManager.getConnection(url, username, password);
    		ScriptRunner runner = new ScriptRunner(conn);
    		runner.setErrorLogWriter(null);
    		runner.setLogWriter(null);
    		runner.runScript(Resources.getResourceAsReader("sql/utility.sql"));
    		conn.close();
    		System.out.println("==SUCCESS==");
    	}
    }
    

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

     MAIN做判断:

    try {
    			DriverManager.getConnection("jdbc:mysql://localhost:3306/utility", "root", "1234");
    			isError = false;
    		} catch (MySQLSyntaxErrorException e) {
    			primaryStage.setTitle("正在创建Utility数据库……");
    			Label error = new Label("正在创建Utility数据库……");
    			error.setFont(new Font("Cambria", 100));
    			Pane pane = new Pane();
    			pane.getChildren().add(error);
    			Scene scene = new Scene(pane);
    			primaryStage.setScene(scene);
    			primaryStage.show();
    			try {
    				CreateMySqlDatabase.createDatabase();
    				CreateMySqlDatabase.executeSql();
    				isError = false;
    				primaryStage.close();
    			} catch (SQLException | IOException e1) {
    				primaryStage.close();
    				e1.printStackTrace();
    			}
    
    		} catch (SQLException se) {
    			Thread.sleep(3000);
    			primaryStage.close();
    			se.printStackTrace();
    		}
    
    		if (!isError) {
    			run();
    		}
    
    	}
    
    	public static void main(String[] args) {
    		launch(args);
    	}
    
  • 相关阅读:
    趣题:寻找出现了奇数次的数
    zstu2016校赛圣杯战争
    HDU 5183 Negative and Positive (NP) ——(后缀和+手写hash表)
    HDU 5673 Robot ——(卡特兰数)
    HDU 3775 Chain Code ——(Pick定理)
    2016 ICPC北京站现场赛总结(再度流水账)
    2014苏州大学新生赛第二场(12.10)题目解析
    【Jump Game II 】cpp
    【Jump Game】cpp
    【 Sqrt(x) 】cpp
  • 原文地址:https://www.cnblogs.com/yangchaojie/p/10041462.html
Copyright © 2020-2023  润新知