自己封装的java读取Access数据库文件的工具类,样例数据查看器等在附件中
package show;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
/**
* 操作Access数据库文件的工具类
* @author zhLin
*@Date 2017-3-29
*/
public class ReadAccessUtils {
/**驱动名称**/
public static final String accessDriverName = "sun.jdbc.odbc.JdbcOdbcDriver";
/**Access数据库连接前缀**/
public static final String url_prefix = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=";
/**用户名字段**/
public static final String cons_user = "user";
/**密码字段**/
public static final String cons_password = "password";
/**获取到表Access数据库文件中所有表名**/
public static List<String> getAccessTablesName(String fileFullPath){
List<String> nameList = new ArrayList<String>();
Connection conn =getAccessConnection(fileFullPath);
DatabaseMetaData meta;
try {
meta = conn.getMetaData();
ResultSet rs = meta.getTables(null, null, null,new String[] { "TABLE" });
while (rs.next()) {
nameList.add(rs.getString(3));
}
rs.close();//关闭结果集
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();//关闭连接
} catch (SQLException e) {
e.printStackTrace();
}
}
return nameList;
}
/**得到查询表的列信息**/
public static List<String> getAccessColumnsName(String fileFullPath,String tableName){
List<String > colNameList = new ArrayList<String>();
Connection conn = getAccessConnection(fileFullPath);
String sql = "select * from "+tableName;
ResultSet rs=null;
try {
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);//执行查询
ResultSetMetaData data=rs.getMetaData();//获取到列信息
int cnt = data.getColumnCount();//获取到列总数
for(int i =1;i<=cnt;i++){//遍历列,从1开始
colNameList.add(data.getColumnName(i));
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return colNameList;
}
/**
* 返回数据列表
* 第一行为列名,后面为值
* **/
public static List<List<String>> getAccessDataLists(String fileFullPath,String tableName){
List<List<String>> dataLists = new ArrayList<List<String>>();//返回结果集
List<String > colList = new ArrayList<String>();//列名集合
Connection conn = getAccessConnection(fileFullPath);//数据库连接
String sql = "select * from "+tableName;
ResultSet rs=null;
try {
Statement stmt = conn.createStatement();
rs = stmt.executeQuery(sql);//执行查询
ResultSetMetaData data=rs.getMetaData();//获取到列信息
int cnt = data.getColumnCount();//获取到列总数
for(int i =1;i<=cnt;i++){//遍历列,从1开始
colList.add(data.getColumnName(i));
}
//第一行插入列名
dataLists.add(colList);
while(rs.next()) {//遍历结果集
colList = null;
colList = new ArrayList<String>();
for(int i =1;i<=cnt;i++)//遍历列,从1开始
colList.add(rs.getString(i));
//插入数据列
dataLists.add(colList);
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try { conn.close();
} catch (SQLException e) {
e.printStackTrace(); }
}
return dataLists;
}
/**依据Access数据库文件路径,获取到数据库连接**/
public static Connection getAccessConnection(String fullFilePath){
String url=url_prefix+fullFilePath; //文件地址
Connection conn = null;
Properties prop = new Properties();
prop.put("charSet", "gb2312"); //这里是解决中文乱码
prop.put(cons_user, "");
prop.put(cons_password, "");
try {
conn = DriverManager.getConnection(url,prop);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void main(String[] args) {
String filePath = "D:\\Develop_tool\\Test\\Northwind.mdb";
List< List<String>> dataList = getAccessDataLists(filePath,"雇员");
for (List<String> list:dataList){
for(String value:list){
System.out.print("\t"+value);
}
System.out.println();
}
}
}