Java讀取檔案匯入MySQL資料庫/取得MySQL資料存入檔案

範例是讀取一個csv檔案,內容每一行為一筆資料,每筆資料不同欄位以","做切割,使用split()方法來分離成String陣列/另一個範例則是相反的,從資料庫取select出資料,寫入檔案。

連MySQL接資料庫使用JDBC-Driver,方法可以參考Eclipse設定JDBC連接MySQL資料庫,這裡另外再提供一個使用DataSource的設定方法,使用起來也比較簡單。

JDBC連接資料庫,取得Connection的方法:

在需要連線時都會要求載入Driver Class,然後要求連線。

public static Connection getConnection () throws SQLException
    {
      try
      {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
      }
      catch(Exception e)
      {
        
      }
      Connection con=java.sql.DriverManager.getConnection(
"jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=Big5","root","12345");
      return con;
    }

利用建立DataSource來取得Connection:

當使用完畢Connection後,會交還DataSource,下次取用時直接取得連線資訊。

public static DataSource getPool() 
    {
      //com.mysql.jdbc.jdbc2.optional. ds = null;
      com.mysql.jdbc.jdbc2.optional.MysqlDataSource ds = null;
      //try
      {
        //ds = new oracle.jdbc.pool.OracleConnectionPoolDataSource ();
        ds = new com.mysql.jdbc.jdbc2.optional.MysqlDataSource();
        
        //傳入參數
        //ds.setDriverType("thin");
        ds.setServerName("127.0.0.1");
        ds.setPortNumber(3306);
        ds.setDatabaseName("test");
        ds.setUser("root");
        ds.setPassword("12345");
      }
      //catch(java.sql.SQLException ex)
      //{
        //System.out.println(ex);
      //}
      
      return ds;
    }

匯入MySQL程式範例:

package database;

  import javax.sql.DataSource;
  import java.sql.*;
  import java.io.*;
  public class Importdata {
    private String sql = "insert into company_all(id,name,tel,address,category) 
values(?,?,?,?,?)";
    
    private Connection con = null ;
    private PreparedStatement ps = null ;
    
    
    public Importdata()
    {
      //ds = getPool();
      try
      {
        con = getConnection();
        ps = con.prepareStatement(sql);
        java.io.File file = new java.io.File("c:/tools/原始.csv");
        java.io.BufferedReader reader = 
new java.io.BufferedReader(new FileReader(file));
        String str = "";
        while((str=reader.readLine())!=null)
        {
          System.out.println(str);
          String arr[] = str.split(",");
          for(int i = 0 ; i < 5 ; i ++)
          {
            ps.setString(i+1, arr[i]);
          }
          ps.executeUpdate();
        }
        DisConDB();
        
      }catch(java.sql.SQLException ex )
      {
        System.out.println(ex);
      }
      catch(java.io.IOException ex )
      {
        System.out.println(ex);
      }
    }
    
    public void DisConDB() throws java.sql.SQLException
    {
      if(ps!=null)
        ps.close();
      if(con!=null)
        con.close();
      ps = null;
      con = null;

    }
    

    public static Connection getConnection () throws SQLException
    {
      try
      {
        Class.forName("com.mysql.jdbc.Driver").newInstance();
      }
      catch(Exception e)
      {
        
      }
      Connection con=java.sql.DriverManager.getConnection(
"jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=Big5","root","12345");
      return con;
    }
    
    
    public static DataSource getPool() 
    {
      //com.mysql.jdbc.jdbc2.optional. ds = null;
      com.mysql.jdbc.jdbc2.optional.MysqlDataSource ds = null;
      //try
      {
        //ds = new oracle.jdbc.pool.OracleConnectionPoolDataSource ();
        ds = new com.mysql.jdbc.jdbc2.optional.MysqlDataSource();
        
        //傳入參數
        //ds.setDriverType("thin");
        ds.setServerName("127.0.0.1");
        ds.setPortNumber(3306);
        ds.setDatabaseName("test");
        ds.setUser("root");
        ds.setPassword("12345");
      }
      //catch(java.sql.SQLException ex)
      //{
        //System.out.println(ex);
      //}
      
      return ds;
    }
    
    

    public static void main(String args[])
    {
      new Importdata();
    }

}

Select MySQL資料存成檔案

package database;
import java.io.*;
import java.sql.*;
public class ExportData {
  public ExportData()
  {
    Connection con =null;
    Statement stat = null;
    ResultSet rs = null;
    String sql = "select a.id,a.name,a.tel,a.address,a.category,b.L,b.D 
from company_all a left outer join company b on a.id = b.id 
order by cast(a.id as SIGNED)";
    File file = new File("c:/tools/export.csv");
    
    try
    {
      BufferedWriter writer = new BufferedWriter(new FileWriter(file));
      con = Importdata.getConnection();
      stat = con.createStatement();
      rs = stat.executeQuery(sql);
      while(rs.next())
      {
        String flag = "";
        String tmp = rs.getString("address");
        if(tmp.indexOf("號")!=(tmp.length()-1))
          flag = "有問題";
        writer.write(rs.getString(1)+","+rs.getString(2)
+","+rs.getString(3)+","+rs.getString(4)+","+rs.getString(5)
+","+rs.getString(6)+","+rs.getString(7)+","+flag+"\n");
      }
      writer.flush();
      writer.close();
      writer = null;
    }
    catch(SQLException e)
    {
      System.out.println(e);
    }
    catch(IOException e)
    {
      System.out.println(e);
    }
  }
  public static void main(String args[])
  {
    new ExportData();
  }
}

3 thoughts to “Java讀取檔案匯入MySQL資料庫/取得MySQL資料存入檔案”

  1. 板大不好意思,想請問一下,現在若我想做個註冊登入網站
    註冊時,帳號密碼存入mysql裡。登入時去mysql裡抓核對資料,正確進入

    這樣的話,是不是在註冊的jsp裡,和”Java讀取檔案匯入MySQL資料庫”結合
    登入時要和”java取得MySQL資料存入檔案”結合
    是這樣嗎?

    那和”Eclipse設定JDBC連接MySQL資料庫”又有什麼關係嗎?

發表迴響