我是Java小菜鸟,一些问题想不明白,请大虾帮帮我^^

Lanaxj 2001-06-11 11:46:00
我要实现的是在Client端用Applet连接Server端的Servlet,Servlet检索Server端的Oracle8i数据库,然后把数据返回Applet,Applet还可以向传递不同参数以实现对数据库的Insert、Update和Delete操作。

我是利用这种方法从Applet向Servlet传递参数的:(假设我的Servlet的名字是MyServlet)
http://serverip:8080/servlet/MyServlet?mode=para1&request=para2
然后在MyServlet的doGet方法里通过Request对象的getParameter方法取道由Applet传进来的参数(para1和para2),然后通过判断para1是Select/Insert/Update/Delete来做出相应的操作。

现在的问题是,传过去的参数如果是Select就没有问题,可以把所有想要的数据都返回Applet,可是别的参数就不行,总是说找不到servlet,我的Applet和Servlet都实现了多线程,关键的方法都加上了Synchronized关键字,实在搞不懂是怎么回事?后来我又单独写了一个MyServlet_1来单独处理Delete操作想看看怎么样,可还是说找不到该servlet。

另外,

Client端和Server端都是我做的,参数传递没有问题。我想问题可能出在构造Statement对象时用的参数,或者结果集的游标上。
我还发现一个奇怪的问题,不论使用JDBC还是JDBC-ODBC驱动来远程连接数据库,当结果集为空时(即Select语句没有返回值)都无法判断,表现出来的状态和有一条纪录时一样(即第一次运行ResultSet.next()返回true),而连接本地数据库就没有问题,可以判断为Null的结果集,开始以为和数据库有关,后来测试了Oracle和SQLServer,结果一样。

Server端配置: RedHat Linux7 + Oracle8.1.6 for Linux + Apache1.3.19 + Tomcat3.1

Client端配置: Win2000SP1 + JDK1.3 + Apache1.3.19 + IE5.5 + JRE1.3.01 + JSDK2.1

还有2个问题都是关于JDBC的:

开发环境 TurboLinux6.1 + JDK1.3 + Oracle8.1.6
其中Oracle的JDBC驱动是从网上down的for Solaris的最新版,支持Connection Pool

声明成员变量如下:
Connection con;
Statement stm;
ResultSet rs;

1.当创建Statement时如果加上参数使其支持JDBC2.0,例如stm=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE),这时从数据库中检索出的数据如果是中文的,则显示为一长串类似于"0x23E4A76F4BC29859DE2"的16进制数,试过了网上和书上的各种方法,可是无论怎么改变字符集编码都没有效果。
只有创建Statement时不带参数检索出的中文才是正常的,尽管可能会出现"????"等乱码情况,不过通过改变字符集编码都可以解决。可是这样一来就无法使用JDBC2.0的新特性了,比如任意定位结果集的游标。

2.当用本地程序远程连接数据库时,当结果集为空集时,这时rs.next()方法理应返回false,可是第一次执行rs.next()的返回值确是true,以后的才是false,也就是说,空集和有一条记录时的现象一样,这样就无法判断空集了。
不过当用程序连接本地数据库时就没有这种现象,可以正确判断空集。

P.S.以上现象在Win2000+SQL Server配置下也一样。

...全文
76 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lanaxj 2001-06-12
  • 打赏
  • 举报
回复

81,092

社区成员

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

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