現在在弄單機的軟體,是需要到資料庫相連的。我這裡選擇了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修改後,都改為長文本了。

這個問題困擾了我一晚,終于搞掂啦。
版權聲明:本文為CSDN部落客「weixin_33910434」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/weixin_33910434/article/details/91667440