package cn.itcast.day04.test; /** 參數說明:java -jar InsertData.jar 數據庫url 表名 文件路徑 是否再插入前刪除 該方法存在的問題是,讀入本地數據后沒必要放在二維數組中,這樣會大大降低插入的效率,可以分塊讀入, 每次讀幾千條,然后插入數據庫,並提交。或者使用多線程,還在學習之中。 */ import java.io.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class ReadFile { private static String url_unic = "?useUnicode=true&characterEncoding=utf8"; //讀取文本文件 public static String[][] writeToDat(String path) { File file = new File(path); List<String> list = new ArrayList<String>(); String[][] strings = null; try { InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf8"); BufferedReader bw = new BufferedReader(isr); String line = null; while ((line = bw.readLine()) != null) { //System.out.println(line); list.add(line); } bw.close(); } catch (IOException e) { e.printStackTrace(); } strings = new String[list.size()][14]; for (int i = 0; i < list.size(); i++) { String[] st = list.get(i).split("\t"); for (int j = 0; j < st.length; j++) { strings[i][j] = st[j]; //System.out.println(strings[i][j]); } } System.out.println("load data success!"); return strings; } //連接數據庫 public static Connection getConnection(String url, String dataBase, String user, String pwd) { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); String url_total = url + "/" + dataBase + url_unic; //System.out.println(url_total); conn = DriverManager.getConnection(url_total, user, pwd); System.out.println("connection success!"); } catch (Exception e) { System.out.println("connection fail!"); e.printStackTrace(); } return conn; } //關閉數據庫連接 public static void closeCon(Connection con) { if (con != null) { try { con.close(); } catch (Exception e) { e.printStackTrace(); } } } //插入數據 public static boolean insertIntoTable(String url, String dataBase, String user, String pwd, String table, String[][] str) { Connection conn = getConnection(url, dataBase, user, pwd); try { String sql = "insert into " + table + " (" + "inner_account_id,account_id,custom_id,custom_cname,account_type,is_internal," + "first_login_date,last_date,account_mode,is_special_line,account_status,custom_type_id,iwind_type,has_auxiliary" + ")" + " values " + "(?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; PreparedStatement pstmt = conn.prepareStatement(sql); //System.out.println(sql); for (int i = 0; i < str.length; i++) { pstmt.setInt(1, Integer.parseInt(str[i][0])); //System.out.println(str[i][0]); for (int j = 1; j < str[i].length; j++) { //System.out.println(str[i][j]); pstmt.setString(j + 1, str[i][j]); } pstmt.executeUpdate(); } System.out.println("insert data success!"); closeCon(conn); return true; } catch (SQLException e) { e.printStackTrace(); System.out.println("insert data fail!"); closeCon(conn); return false; } } //刪除數據庫數據 public static void dropData(String url, String dataBase, String user, String pwd, String table) { Connection conn = getConnection(url, dataBase, user, pwd); try { String sql = "delete from " + table; //System.out.println(sql); PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.executeUpdate(); System.out.println("delete data success!"); closeCon(conn); } catch (SQLException e) { e.printStackTrace(); System.out.println("delete data fail!"); closeCon(conn); } } public static void main(String[] args) { /*--------調試-----------// String path = "E:\\Java\\basic-code\\day04-code\\src\\cn\\itcast\\day04\\test\\a.txt"; String[][] strings = writeToDat(path); for(int i=0;i<strings.length;i++){ for(int j=0;j<strings[i].length;j++){ System.out.print(strings[i][j]+'\t'); } System.out.println(); } */ String url = args[0]; String table = args[1]; String path = args[2]; String deleteFlag = args[3]; System.out.println(deleteFlag); String dataBase = "****"; String user = "****"; String pwd = "****"; System.out.println(url); System.out.println(table); System.out.println(path); //將文件數據讀入二維數組 String[][] strings = writeToDat(path); if (deleteFlag.equals("true") | deleteFlag.equals("True")) { dropData(url, dataBase, user, pwd, table); } //創建數據庫連接,並向數據庫中插入數據 insertIntoTable(url, dataBase, user, pwd, table, strings); } }