出错位置的程序代码如下:
try{
ResultSet rs=mydb.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
teststring=String.valueOf(rs.getRow());
teststring=teststring+" "+String.valueOf(rsmd.getColumnCount());
if (rsmd.getColumnCount()==0) return null;
temp1=new String[rsmd.getColumnCount()];
while(rs.next()){
for(int j=1;j<=rsmd.getColumnCount();j++){
temp1[j-1]=rs.getString(j);
teststring=teststring.concat(",").concat(temp1[j-1]);
}
tempv.add((String[])temp1.clone());
} }catch(Exception e){e.printStackTrace();System.out.println(hdah); System.out.println(sql);return null;}
还有其它的sql可以运行,所以我觉得程序没多大问题!
输出来的sql我在sql server 上,可以通过运行!
try{
ResultSet rs=mydb.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
teststring=String.valueOf(rs.getRow());
teststring=teststring+" "+String.valueOf(rsmd.getColumnCount());
if (rsmd.getColumnCount()==0) return null;
temp1=new String[rsmd.getColumnCount()];
while(rs.next()){
for(int j=1;j<=rsmd.getColumnCount();j++){
temp1[j-1]=rs.getString(j);
teststring=teststring.concat(",").concat(temp1[j-1]);
}
tempv.add((String[])temp1.clone());
} }catch(Exception e){e.printStackTrace();System.out.println(hdah); System.out.println(sql);return null;}
还有其它的sql可以运行,所以我觉得程序没多大问题!
输出来的sql我在sql server 上,可以通过运行!
解决方案 »
- 查询出wineid为85的结果集
- 问一个更新datetime字段问题
- 急,怎样才能得到指定表的说明
- 我设计的表a(id,number) 其中id是主键,number是int型 我想当我输入的数据中,如果出现id相同的,用什么样的sql语言才能把number的数累加,而不用添加相同id的记录了。
- 把存储过程如何做成系统的任务计划?
- 哪位能讲一下,用中文定义数据库的表名和字段名的缺点?
- 在2008中用什么命令可以把我输出的消息保存为sql文件
- 问一个关于关键字自动变色的问题
- 类似MYSQL的limit语句在MS-SQL是怎么写的,就是查数据库中间指定项,在线等待
- 左右查询有什么区别?
- 有关数据库的并发性问题
- sql server 中如何实现更改视图的值就能更改表的值?
看看是什么时候抛出的异常
现在我有个很大的疑问,那就是在sql server上可以运行的sql,在java里有没有限制! 没有,java和sql无关。
teststring=String.valueOf(rs.getRow()); teststring=teststring+" "+String.valueOf(rsmd.getColumnCount());
所以你不可以用while(rs.next())因为到了最后一次的时候rs.next()是返回null,而while只能判断true和false,所以问题出在这里!
j=1时发生的
to ahtu(阿土):
如果程序有问题的话,我其它的sql都可以运行,并得到正确的结果!
to Mars_lee(二子):
我也希望如此,但为什么有些sql可以pass,但有些就是会出错?
ResultSet rs=mydb.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int colNum=rsmd.getColumnCount();
if (colNum==0) return null;
temp1=new String[colNum];
while(rs.next()){
for(int j=1;j<=colNum;j++){
temp1[j-1]=rs.getString(j);
teststring=teststring.concat(",").concat(temp1[j-1]);
}
tempv.add((String[])temp1.clone());
} }catch(Exception e){e.printStackTrace();System.out.println(hdah); System.out.println(sql);return null;}
还有,你干吗非得在程序中得到列数呢?你难道会不知道有几列?
这个程序判断是我写的一个方法中的一个判断,我返回的是一个String[][];
teststring=teststring.concat(",").concat(temp1[j-1]);
是当初我用来了解程序运行的情况,看看到了那一步!还有这个程序我已用了很久了,一直都好好的! 不过还是谢谢z_yheart(年轻的心)。
to z_yheart(年轻的心):
“你干吗非得在程序中得到列数呢?你难道会不知道有几列? ”
因为我比较懒,所以我是写一个比较通用的可以执行sql的方法!
我也觉可能是jdbc-odbc桥的驱动问题,但我提出来问问大家,了解一下,到底java和sql的关系是怎么样?免得以后再碰上这种鸟问题!:))
java中,记录集的列数是从1开始
出错位置的程序代码如下:
try{
ResultSet rs=mydb.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
teststring=String.valueOf(rs.getRow());
teststring=teststring+" "+String.valueOf(rsmd.getColumnCount());
if (rsmd.getColumnCount()==0) return null;
temp1=new String[rsmd.getColumnCount()];
while(rs.next()){
for(int j=1;j<=rsmd.getColumnCount();j++){
temp1[j-1]=rs.getString(j);
teststring=teststring.concat(",").concat(temp1[j-1]);
}
tempv.add((String[])temp1.clone());
} }catch(Exception e){e.printStackTrace();System.out.println(hdah); System.out.println(sql);return null;}
还有其它的sql可以运行,所以我觉得程序没多大问题!
输出来的sql我在sql server 上,可以通过运行! 其它的sql是怎样写的,这个sql又是怎样写的,写出来大家一起看看,还有直接运行sql的结果是怎样的?
然后我改用视图,就是尽量是在java中传递简化的sql String ,但还是不行,就是只有很简单的比如“select a,b,c from aview”这样,它还是出现同样的错,上次好像谁说过,jdbcodbc不稳定,我猜可能是这个原因,所以我想大家把这方面的问题谈论清楚,毕竟我们经常要和数据库打交道的!
我想有可能是jdbc_odbc对复杂的sql语句支持不够吧
我是这样解决的:尽量避免用resutSet.getString("colName") 来读取数据,使用resultSet.getString(index)来读取,这样稳定多了譬如
sql="SELECT a,b,c from table t";
那么取field a 应该是
String lvA=lvResult.getString(1);
String lvB=lvResult.getString(2);
String lvC=lvResult.getString(3);这样处理基本上就不再出错了.