java.sql.SQLException: No data found

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>";   
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值