JAva SQLファイルをデータベースにインポート
2573 ワード
最近、CMSシステムを作っていると、CMSインストールフェーズにInstall databaseフェーズがあり、インストールデータベースに使用する必要があります.以前はmysqldunpコマンドでsql形式のファイルがあちこちにありましたが、データベースにインポートする必要があります.Javaにはデータベースに直接対するファイル操作がないためです.他の方法しか考えられません.ここでは、ファイルを読み取り文字列に結合し、一括処理(addBatch)する方法を採用しています.コードは以下の通りです.
**DBConnectionクラスでの一括処理方法
*/
もちろん、これは私個人が思いついた一つの方法にすぎません.愚かな見方は皆さんが批判して指導して、共に向上してください.のコードに何か問題があったら、QQで相談してもいいですよ.
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で相談してもいいですよ.