JDBC报错,,列名无效,

ddsmine 2011-05-22 02:32:41
在SQLserver2005数据库可以查询得到结果,但是JDBC报错,,列名无效,崩溃了。看了好多朋友的帖子,都是说sql语句有误,可明明是对的啊,难道是rs哪里有问题吗。。求求大家给指点指点。。
public Vector<Object> getGradeinfo(String cname)
{
Vector<Object> GradeData=new Vector<Object>();
try
{
String sql="select Student.snum,Student.sname,Student.scname,Sgrade.gr_exam,Sgrade.gr_moral from Student,Sgrade" +
" where Student.snum=Sgrade.snum";

if(!cname.equals(""))
sql+=" and scname='"+cname+"'";
st5=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
rs5=st5.executeQuery(sql);
while(rs5.next())
{
Vector<Object> singleRow=new Vector<Object>();
for(int i=1;i<=rs5.getMetaData().getColumnCount();i++)
singleRow.add(rs5.getObject(i));
GradeData.addElement(singleRow);
}

}
catch(Exception e)
{e.printStackTrace();}
return GradeData;
}
public boolean updateGrade(int jt_row,DefaultTableModel dtm)
{
boolean flag=false;
try{
rs5.absolute(jt_row+1);
for(int i=1;i<=rs5.getMetaData().getColumnCount();i++)
rs5.updateObject(i, dtm.getValueAt(jt_row, i-1));
rs5.updateRow();
flag=true;
}
catch(Exception e)
{e.printStackTrace();}
return flag;
}

}





com.microsoft.sqlserver.jdbc.SQLServerException: 列名 'gr_exam' 无效。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:246)
at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:83)
at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:39)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.doUpdateRowRPC(SQLServerResultSet.java:4049)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.access$200(SQLServerResultSet.java:16)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet$1UpdateRowRPC.doExecute(SQLServerResultSet.java:3983)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerResultSet.updateRow(SQLServerResultSet.java:4019)
at stuMngSys.DBoperate.updateGrade(DBoperate.java:338)
at stuMngSys.GradeMng$3.actionPerformed(GradeMng.java:56)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)[/color][/color][/color]
...全文
1197 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
clxclx1990 2011-05-25
  • 打赏
  • 举报
回复
String sql="select Student.snum,Student.sname,Student.scname,Sgrade.gr_exam,Sgrade.gr_moral from Student inner join Sgrade where Student.snum=Sgrade.snum"
ddsmine 2011-05-22
  • 打赏
  • 举报
回复
可以的。
我的SQL语句查询了多个表,所以可能 导致rs5.updateRow()失败。
龙四 2011-05-22
  • 打赏
  • 举报
回复
你的sql语句拿到别的地方能执行么,譬如直接执行
ddsmine 2011-05-22
  • 打赏
  • 举报
回复
刚上网查了些资料:

可更新的ResultSet:
能够完成更新的ResultSet的SQL语句必须要具备如下的属性:

  a,只引用了单个表.

  b,不含有join或者group by子句.

  c,那些列中要包含主关键字.


是不是有这么回事儿啊。。。??
ddsmine 2011-05-22
  • 打赏
  • 举报
回复
列名绝对没有写错,我都检查一下午了快。。

rs5.absolute(jt_row+1);
for(int i=1;i<=rs5.getMetaData().getColumnCount();i++)
rs5.updateObject(i, dtm.getValueAt(jt_row, i-1));
rs5.updateRow();
调试前四行都能通过,就是第四步 给我来了个列名“sname”无效

com.microsoft.sqlserver.jdbc.SQLServerException: 列名 'sname' 无效。
................................................................
难道是多表查询的问题,高手指教,不甚感激呀
  • 打赏
  • 举报
回复
看看是不是列名写错了
ddsmine 2011-05-22
  • 打赏
  • 举报
回复
SELECT Student.snum, Student.sname, Student.scname, Sgrade.gr_exam, Sgrade.gr_moral
FROM Sgrade,Student where Sgrade.snum = Student.snum 关键是表中有那个字段啊 ,
大_爱 2011-05-22
  • 打赏
  • 举报
回复
那在数据库中添加一个字段咯!
ddsmine 2011-05-22
  • 打赏
  • 举报
回复
试了你的方法,
System.out.println(rs5.getObject("sname"));

控制台这结果:

崔露露
com.microsoft.sqlserver.jdbc.SQLServerException: 列名 'sname' 无效。
下面还是那提示 一大堆。。
wl_ldy 2011-05-22
  • 打赏
  • 举报
回复
com.microsoft.sqlserver.jdbc.SQLServerException: 列名 'gr_exam' 无效。
是不是与数据库的列明不一致啊,
诊断sql是否异常很简单,你直接在
sql+=" and scname='"+cname+"'";之后
System.out.println(sql);
把控制台上的sql语句拷贝到sqlserver的客户端执行下看看能否正确执行就知道了。。。

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧