JAva SQLファイルをデータベースにインポート

2573 ワード

最近、CMSシステムを作っていると、CMSインストールフェーズにInstall databaseフェーズがあり、インストールデータベースに使用する必要があります.以前はmysqldunpコマンドでsql形式のファイルがあちこちにありましたが、データベースにインポートする必要があります.Javaにはデータベースに直接対するファイル操作がないためです.他の方法しか考えられません.ここでは、ファイルを読み取り文字列に結合し、一括処理(addBatch)する方法を採用しています.コードは以下の通りです.
private static File file = new File("E:\\data\\tulufan.sql");
	private static InputStreamReader fileReader;
	static {
		try {
			if (!file.exists()) {
				file.createNewFile();
			}
			fileReader = new InputStreamReader(new FileInputStream(file),
					"UTF-8");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void readSQLFile() {
		BufferedReader bufferedReader = new BufferedReader(fileReader);
		try {
			StringBuilder sBuilder = new StringBuilder("");
			String str = bufferedReader.readLine();
			while (str != null) {
				//       ,        
				if (!str.startsWith("#") && !str.startsWith("/*")
						&& !str.startsWith("–") && !str.startsWith("
")) sBuilder.append(str); str = bufferedReader.readLine(); } String[] strArr = sBuilder.toString().split(";"); List strList = new ArrayList(); for (String s : strArr) { strList.add(s); System.out.println(s); } // , DBConnection JDBC DBConnection db = new DBConnection(); db.executeBatchByStatement(strList); } catch (Exception e) { e.printStackTrace(); } finally { try { bufferedReader.close(); fileReader.close(); } catch (Exception e) { } } return true; }
/*******************************
**DBConnectionクラスでの一括処理方法
*/
public boolean executeBatchByStatement(List sqlList) {
		boolean ret = false;
		if (conn != null) {
			Statement stmt = null;
			try {
				conn.setAutoCommit(false);
				stmt = conn.createStatement();
				for (String s : sqlList) {
					stmt.addBatch(s);
				}
				stmt.executeBatch();
				conn.commit();
				ret = true;
			} catch (BatchUpdateException e) {
				e.printStackTrace();
				try {
					conn.rollback();
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					conn.setAutoCommit(true);
					if (stmt != null) {
						stmt.close();
						stmt = null;
					}
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		return ret;
	}

    もちろん、これは私個人が思いついた一つの方法にすぎません.愚かな見方は皆さんが批判して指導して、共に向上してください.のコードに何か問題があったら、QQで相談してもいいですよ.