今天在我的博客群中有個朋友問了我一個問題,詳見http://group.bokee.com/group/subject.7861.11763421854970771.html?91391218870400970
他問:怎樣把文本文件中的每一列寫到數據庫表中?
我的解決方案如下:
開發工具:Eclipse3.2 JDK1.6 MySQL4.1.8
首先我打開MySQL命令行窗口,輸入密碼root后執行如下語句建立測試表student;
mysql>use test;
mysql>create table student(id int,name varchar(10));
我的文本文件(E:\data.txt,E盤為我的Java程序所在的根目錄)的格式如下:
------------------------
1,Tom
2,Kate
3,Jim
-----------------------
對了!還有提醒大家一句:一定要把數據庫驅動程序添加到Eclipse工程的JavaBuildpath中,呵呵,對于有經驗的程序員來講,我這純屬是廢話,好了,不廢話了,看看我的Java程序吧!
*@author 我為J狂 建立日期 2007-4-14
*
*/
package net.blogjava.lzqdiy;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
import java.util.Set;

public class Test


{


/** *//**
* @param args
*/
public static Set<String> readFile(String filePath)

{
BufferedReader in = null;
Set<String> tableData = new HashSet<String>();
try

{
in = new BufferedReader(new FileReader(filePath));
String record = null;
while ((record = in.readLine()) != null)

{
tableData.add(record);
}
} catch (IOException e)

{
// TODO Auto-generated catch block
e.printStackTrace();
} finally

{
try

{
in.close();
} catch (IOException e)

{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return tableData;
}

public static void insertDataBase(Set<String> tableData,String driverName,String url,String username,String password)

{
Connection con = null;
Statement stmt = null;
try

{
Class.forName(driverName);
con = DriverManager.getConnection(
url, username, password);
stmt = con.createStatement();
for (String record : tableData)

{
if(record!=null)

{
String[] values = record.split(",");
stmt.executeUpdate("insert into student(id,name) values(" + values[0]+ ",'" + values[1] + "')");
}
}

} catch (ClassNotFoundException e)

{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e)

{
// TODO Auto-generated catch block
e.printStackTrace();
} finally

{
if (stmt != null)

{
try

{
stmt.close();
} catch (SQLException e)

{
// TODO Auto-generated catch block
e.printStackTrace();
}
stmt = null;
}

if (con != null)

{
try

{
con.close();
} catch (SQLException e)

{
// TODO Auto-generated catch block
e.printStackTrace();
}
con = null;
}
}
}

public static void main(String[] args)

{
// TODO Auto-generated method stub
insertDataBase(readFile(File.separator+"data.txt"),"com.mysql.jdbc.Driver","jdbc:mysql://localhost:3306/test", "root", "root");
}
}

我的這個程序只是能實現功能,在擴展性方面做得還不夠,希望大家多提寶貴意見,我不勝感激。
另外,我感覺這種數據庫輸入數據的策略有利有弊,它的優點是快速方便,當記錄內容的差別不大時,可以使用復制粘貼的方法快速更改文本文件的內容,然后執行Java程序一切都OK了;它的缺點也很明顯就是靈活性較差,文本文件的中的每行記錄中的數據必須用統一的分隔符來劃分每個字段值(在我文本文件中用的是","),一旦用戶將分隔符寫錯,那么Java程序就會失效。