天天看點

[Microsoft][ODBC 驅動程式管理器] 無效的字元串或緩沖區長度 ----> 解決方法

現在在弄單機的軟體,是需要到資料庫相連的。我這裡選擇了Access或者Excel這些比較通用的來作為資料庫。但在連接配接資料庫時已經成功,但就是出現在select語句裡面報錯,如下:

java.sql.SQLException: [Microsoft][ODBC 驅動程式管理器] 無效的字元串或緩沖區長度
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)                

先貼貼我的查詢語句的描述:

@Override
public List<LungCancer> search(String scope, String prop) {
		
	System.out.println(scope+"---->" + prop);

	// TODO Auto-generated method stub
	try {
		String sql = "SELECT * FROM " + m_sheet + " WHERE "+ scope +  " = ?";  // m_sheet是資料庫表的名稱,或者excel裡面sheet的名字
	       	m_pstmt = m_conn.prepareStatement(sql);
		m_pstmt.setString(1, prop);
		ResultSet rs = m_pstmt.executeQuery();
		if (rs.next()) {
			List<LungCancer> list = new ArrayList<LungCancer>();
			int i = 0;
			do {
				LungCancer lc = new LungCancer();
				lc.setM_id(rs.getInt(1));
				lc.setM_snp(rs.getString(2));
				lc.setM_value(rs.getDouble(3));
				lc.setM_cancer(rs.getString(4));
				lc.setM_pop_src(rs.getString(5));
				lc.setM_pmid(rs.getString(6));
				list.add(lc);
			} while (rs.next());
			m_pstmt.close();
			m_conn.close();
			return list;
		}
		return null;
		catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		}
		return null;
}                

LungCancer是我自己建的類,屬于它自己的屬性:

package ckj.gzhmc.yang.vo;

public class LungCancer {
	private int m_id;
	private String m_snp;
	private double m_value;
	private String m_cancer;
	private String m_pop_src;
	private String m_pmid;

	public int getM_id() {
		return m_id;
	}

	public void setM_id(int m_id) {
		this.m_id = m_id;
	}

	public String getM_snp() {
		return m_snp;
	}

	public void setM_snp(String m_snp) {
		this.m_snp = m_snp;
	}

	public double getM_value() {
		return m_value;
	}

	public void setM_value(double m_value) {
		this.m_value = m_value;
	}

	public String getM_cancer() {
		return m_cancer;
	}

	public void setM_cancer(String m_cancer) {
		this.m_cancer = m_cancer;
	}

	public String getM_pop_src() {
		return m_pop_src;
	}

	public void setM_pop_src(String m_pop_src) {
		this.m_pop_src = m_pop_src;
	}

	public String getM_pmid() {
		return m_pmid;
	}

	public void setM_pmid(String m_pmid) {
		this.m_pmid = m_pmid;
	}
	
	public String toString(){
		return m_id + ": " + m_snp + ": " +m_value + ": " +m_cancer + ": " +m_pop_src + ": " +m_pmid ;
	}

}                

網上很多文章都說,是因為64位的系統所造成,但我覺得這應該不會的吧。

後來想想之前某個老師說過,select * from 這句裡面,*代表所有屬性,可能就是這裡出了問題。是以決定把所有屬性都列舉出來,哈哈,問題就解決了。

修改上面sql的語句即可:

除此之外,我還修改了屬性的類型。之前屬性都設定為了短文本,後來在ACCESS修改後,都改為長文本了。

[Microsoft][ODBC 驅動程式管理器] 無效的字元串或緩沖區長度 ----&gt; 解決方法

這個問題困擾了我一晚,終于搞掂啦。

版權聲明:本文為CSDN部落客「weixin_33910434」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/weixin_33910434/article/details/91667440