真的没人懂吗 二维数组和JDBC问题

anky02 2008-05-18 11:32:23
下面的程序在编译时是没有错的,在我J2ME客户端访问这个方法时错了
唯一的可能就是把数据存入二维数组时存储不正确了
开了3个帖子,没人能回答正确,小弟真的很急,各位英雄,各位大哥大姐,如果懂的,请帮个忙认真看下好吗
本来想控制台输出察看的,可后来想想客户端没请求,怎么察看,servlet类作为表示层的怎么察看,种种迷惑都很不解

现在数据库的结构是这样的
景区表:scene
字段 id 数字(整型) name 文本
景点表:scenery
字段 id 自动编号 scene 数字(整型) name 文本 其他字段...
现在我要把景区放在一维,景点放在二维
个位帮忙看下,以下数据存储格式哪里错了,或者全错,那能给个方法吗,希望大家帮个忙,我万分感谢!
public Scenery[][] getSceneries()throws ModelException, ApplicationException{
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;

try{
String drname="sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(drname);
String url="jdbc:odbc:guidesys";
conn=DriverManager.getConnection(url);
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from scene";
rs=stmt.executeQuery(sql);
rs.last();
Scenery[][] sceneries=new Scenery[rs.getRow()][];
rs.beforeFirst();
int i=0;
while(rs.next()){
Statement stmts=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rses=stmts.executeQuery("select * from scenery where scenery.scene="+rs.getInt(1)+"");
rses.last();
sceneries[i]=new Scenery[rses.getRow()];
rses.beforeFirst();
int j=0;
while(rses.next()){
System.out.println(rses.getString(3));
sceneries[i][j]=new Scenery(rs.getString(2),rses.getString(3),rses.getString(4),rses.getString(5),rses.getString(6),rses.getString(7));
j++;
}
rses.close();
stmts.close();
i++;
}
rs.close();
stmt.close();
conn.close();
return sceneries;
}catch(Exception e){
throw new ModelException(ModelException.CAUSE_SNACKS_NOT_FIND);
}
}
...全文
98 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
panxuan 2008-05-19
  • 打赏
  • 举报
回复
靠自己永远优先于靠别人。 支持
老紫竹 2008-05-19
  • 打赏
  • 举报
回复
我想即使我提供J2ME端访问时出现的错误给你,你也不知道是什么意思的,我只是实话实说,不好意思,下面是错误J2ME的错误提示:


恩,com.xiaofan.guidesys.client.midp.model.HttpHandler.openConnectionInputStream 的第62行的错误

可惜,根据你给的异常,我真的看不懂。

靠自己永远优先于靠别人。 支持你一个
anky02 2008-05-18
  • 打赏
  • 举报
回复
下面是一维的,客户端能正常访问
public Snack[] getSnacks()throws ModelException, ApplicationException{
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;

try{
String drname="sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(drname);
String url="jdbc:odbc:guidesys";
conn=DriverManager.getConnection(url);
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from snack";
rs=stmt.executeQuery(sql);
rs.last();
Snack[] snacks=new Snack[rs.getRow()];
rs.beforeFirst();
int i=0;
while(rs.next()){
snacks[i]=new Snack(rs.getString(2),rs.getString(3));
//snacks[i].setName(rs.getString(2));
//snacks[i].setIntroduction(rs.getString(3));
i++;
}
rs.close();
stmt.close();
conn.close();
return snacks;
}catch(Exception e){
throw new ModelException(ModelException.CAUSE_SNACKS_NOT_FIND);
}
}
anky02 2008-05-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
在我J2ME客户端访问这个方法时错了


如果你不提供错误信息,我想没有人有时间为了你搭建一个环境,替你做事情!

你就继续等吧!
[/Quote]

呵呵,我想等很难,一切还是靠自己吧!
anky02 2008-05-18
  • 打赏
  • 举报
回复
谢谢你提醒拉,不过错误就是在访问数据库时出错,我想即使我提供J2ME端访问时出现的错误给你,你也不知道是什么意思的,我只是实话实说,不好意思,下面是错误J2ME的错误提示:
com.xiaofan.guidesys.client.midp.share.ModelException
at com.xiaofan.guidesys.client.midp.model.HttpHandler.openConnectionInputStream(+62)
at com.xiaofan.guidesys.client.midp.model.HttpHandler.getSceneries(+32)
at com.xiaofan.guidesys.client.midp.model.ModelFacade.getSceneries(+7)
at com.xiaofan.guidesys.client.midp.ui.UIController$EventHandler.run(+237)
at com.xiaofan.guidesys.client.midp.ui.UIController$EventHandler.run(+19)

这个题目的错误其实是在于我的程序里有两个结果集,而其实在其中一个结果集在长时间处理时,另一个已经关闭了,导致数据存储错误,说实话是不好发现点,呵呵,下面是正确程序代码

public Scenery[][] getSceneries()throws ModelException, ApplicationException{
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;

try{
String drname="sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(drname);
String url="jdbc:odbc:guidesys";
conn=DriverManager.getConnection(url);
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from scene";
rs=stmt.executeQuery(sql);
rs.last();
Scenery[][] sceneries=new Scenery[rs.getRow()][];
String[] sceneId=new String[rs.getRow()];
String[] sceneName=new String[rs.getRow()];
rs.beforeFirst();
int i=0;
while(rs.next()){
sceneId[i]=rs.getString(1);
sceneName[i]=rs.getString(2);
i++;
}
rs.close();
stmt.close();
for(int k=0;k<sceneId.length;k++){
Statement stmts=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rses=stmts.executeQuery("select * from scenery where scenery.scene='"+sceneId[k]+"'");
rses.last();
sceneries[k]=new Scenery[rses.getRow()];
rses.beforeFirst();
int j=0;
while(rses.next()){
System.out.println(rses.getString(3));
sceneries[k][j]=new Scenery(sceneName[k],rses.getString(3),rses.getString(4),rses.getString(5),rses.getString(6),rses.getString(7));
j++;
}
rses.close();
stmts.close();
}
conn.close();
return sceneries;
}catch(Exception e){
throw new ModelException(ModelException.CAUSE_SNACKS_NOT_FIND);
}
}
老紫竹 2008-05-18
  • 打赏
  • 举报
回复
在我J2ME客户端访问这个方法时错了


如果你不提供错误信息,我想没有人有时间为了你搭建一个环境,替你做事情!

你就继续等吧!

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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