java无效的字符串或缓冲区长度_[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 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 list = new ArrayList();

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的语句即可:

String sql = "SELECT [id],[snp],[value],[cancer],[Population and Source],[pmid] FROM lung WHERE " + scope + " = ?"

除此之外,我还修改了属性的类型。之前属性都设置为了短文本,后来在ACCESS修改后,都改为长文本了。

0418e7dcf2693397512638fb460056de.png

这个问题困扰了我一晚,终于搞掂啦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值