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資料庫”又有什麼關係嗎?

發表迴響