Java代码如下:
package com.accord.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import com.accord.entity.Corp;
/**
* @author 王久印
* 2018年4月9日
* 读取.ini配置文件工具类
*/
public class ReadMdbUtil {
private static List<Corp> CORPLISTS = new ArrayList<Corp>() ;
static{
//List<Corp> corpLists = new ArrayList<Corp>();
Properties prop = new Properties();
prop.put("charSet", "gb2312"); // 这里是解决中文乱码
prop.put("user", "ufsoft");
prop.put("password", "test0011");
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=src/main/resources/system.mdb"; // 文件地址
PreparedStatement ps = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(url, prop);
stmt = (Statement) conn.createStatement();
rs = stmt.executeQuery("select * from t_corp");
ResultSetMetaData data = rs.getMetaData();
//private static List<Corp> CORPLISTS ;
while (rs.next()) {
Corp corp = new Corp();
System.out.println("---开始---");
corp.setId(rs.getString("id"));
//System.out.println(rs.getString("id"));
corp.setFcorp(rs.getString("FCORP"));
//System.out.println(rs.getString("FCORP"));
corp.setFgsbm(rs.getString("FGSBM"));
//System.out.println(rs.getString("FGSBM"));
corp.setFgsmc(rs.getString("FGSMC"));
//System.out.println(rs.getString("FGSMC"));
corp.setFismerge(rs.getString("FISMERGE"));
//System.out.println(rs.getString("FISMERGE"));
corp.setFsid(rs.getString("FSID"));
//System.out.println(rs.getString("FSID"));
corp.setFuser(rs.getString("FUSER"));
//System.out.println(rs.getString("FUSER"));
corp.setFpwd(rs.getString("FPWD"));
//System.out.println(rs.getString("FPWD"));
corp.setFbilltype(rs.getString("FBILLTYPE"));
//System.out.println(rs.getString("FBILLTYPE"));
corp.setFprocedure(rs.getString("FPROCEDURE"));
//System.out.println(rs.getString("FPROCEDURE"));
corp.setFip(rs.getString("FIP"));
//System.out.println(rs.getString("FIP"));
corp.setFimpcust(rs.getString("FIMPCUST"));
//System.out.println(rs.getString("FIMPCUST"));
corp.setFimpemp(rs.getString("FIMPEMP"));
//System.out.println(rs.getString("FIMPEMP"));
corp.setFimppz(rs.getString("FIMPPZ"));
System.out.println("凭证:" + rs.getString("FIMPPZ"));
//System.out.println(rs.getString("FIMPPZ"));
System.out.println("--结束---");
CORPLISTS.add(corp);
//CORPLISTS.add(corp);
/*Map map = new HashMap();
for (int i = 1; i <= data.getColumnCount(); i++) {
String columnName = data.getColumnName(i); // 列名
String columnValue = rs.getString(i);
map.put(columnName, columnValue);
System.out.println(columnName + "---" + columnValue);
}*/
//maplist.add(map);
}
} catch (Exception e) {
e.printStackTrace();
}
//System.out.println("maplist的大小:" + maplist.size());
/*for (Map map : maplist) {
System.out.println("公司名称:" + map.get("FGSMC"));
}*/
}
/*public List<Corp> getCorpLists() {
List<Corp> corps = new ArrayList<Corp>();
Properties prop = new Properties();
prop.put("charSet", "gb2312"); // 这里是解决中文乱码
prop.put("user", "ufsoft");
prop.put("password", "test0011");
String url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=src/main/resources/system.mdb"; // 文件地址
PreparedStatement ps = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(url, prop);
stmt = (Statement) conn.createStatement();
rs = stmt.executeQuery("select * from t_corp");
ResultSetMetaData data = rs.getMetaData();
//private static List<Corp> CORPLISTS ;
while (rs.next()) {
Corp corp = new Corp();
System.out.println("---开始---");
//String id = rs.getString("id");
corp.setId(rs.getString("id"));
//System.out.println(id);
System.out.println("--结束---");
//CORPLISTS.add(corp);
}
}catch(Exception e){
e.printStackTrace();
}
return null;
}*/
public static void main(String[] args) {
for (Corp corp : CORPLISTS) {
System.out.println(corp.getId() + corp.getFcorp() + corp.getFgsbm() + corp.getFgsmc()
+ corp.getFismerge() + corp.getFsid() + corp.getFuser() + corp.getFpwd()
+ corp.getFbilltype() + corp.getFprocedure() + corp.getFip() + corp.getFimpcust()
+ corp.getFimpemp() + corp.getFimppz());
//System.out.println(corp.getId());
}
}
}
报错如下:
---开始---
java.sql.SQLException: No data found
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7137)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3906)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5697)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:353)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:410)
at com.accord.utils.ReadMdbUtil.<clinit>(ReadMdbUtil.java:72)
解决问题如下:
access不能在一个字段上连续多次调用 rs.getString("字段名"),你需要先定义一个变量保存
corp.setFimppz(rs.getString("FIMPPZ"));
System.out.println("凭证:" + rs.getString("FIMPPZ"));
如上面的代码,rs.getString("FIMPPZ")被使用两次,这是不可以的,如果想要重复使用数据库的结果,需要将结果赋值给中间变量。
另外:
This is a typical error when using the MS Access database through the poor JDBC-ODBC bridge driver and retrieving the same data more than once from the result set. You need to retrieve the data once and assign it to a variable and use the variable multiple times instead.
while (rs.next()) {
String flatNo = rs.getString("Flat_No");
buffer += "<option value='" + flatNo + "'>" + flatNo + "</option>";
}