Applet要怎么才能读取所在机器的数据库呢?

Yanbin_Q 2003-08-18 04:47:24
//TestMysql.java

import java.applet.*;
import java.sql.*;
import java.awt.*;

public class TestMysql extends Applet{
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
String ss="开始读取数据:";


public void paint(Graphics g){
g.drawString(ss,10,10);
}

public void init(){
String drv="org.gjt.mm.mysql.Driver";
try{
Class.forName(drv).newInstance();
String url="jdbc:mysql://192.168.0.4/mysql?user=root";
conn=DriverManager.getConnection(url);
stmt=conn.createStatement();
}
catch(Exception e){
System.err.println(e.getMessage());
}
}

public void run(){
try{
rs=stmt.executeQuery("select * from user");

while(rs.next()){
System.out.println(rs.getString(1));
ss+=rs.getString(1);
}
}
catch(Exception e){
System.err.println(e.getMessage());
}
}

public static void main(String[] args){
TestMysql tt=new TestMysql();
tt.init();
tt.run();
}
}

<applet code=TestMysql width=250 height=250
archive="mm.mysql-2.0.4-bin.jar"
>
</applet>

文件mm.mysql-2.0.4-bin.jar在TestMysql.html当前目录下

本地IP为192.168.0.4,建有web服务,mysql数据库,作为应用程序是可以执行并得到正确的结果,但是作为Applet来通过WEB访问(http://192.168.0.4/TestMysql.html),却得到不记录,并且显示错误为
Cannot connect to MySQL server on 192.168.0.4:3306. Is there a MySQL server running on the machine/port you are trying to connect to? (java.net.SocketException)

Caused by: java.net.SocketException: Connection reset

at java.net.SocketInputStream.read(Unknown Source)

at java.net.SocksSocketImpl.readSocksReply(Unknown Source)

at java.net.SocksSocketImpl.connect(Unknown Source)

at java.net.Socket.connect(Unknown Source)

at sun.net.NetworkClient.doConnect(Unknown Source)

at sun.plugin.net.protocol.http.HttpClient.doConnect(Unknown Source)

at sun.net.www.http.HttpClient.openServer(Unknown Source)

at sun.net.www.http.HttpClient.openServer(Unknown Source)

at sun.net.www.http.HttpClient.<init>(Unknown Source)

at sun.net.www.http.HttpClient.<init>(Unknown Source)

at sun.plugin.net.protocol.http.HttpClient.<init>(Unknown Source)

at sun.plugin.net.protocol.http.HttpClient.New(Unknown Source)

at sun.plugin.net.protocol.http.HttpURLConnection.createConnection(Unknown Source)

at sun.plugin.net.protocol.http.HttpURLConnection.connect(Unknown Source)

at sun.plugin.net.protocol.http.HttpURLConnection.getInputStream(Unknown Source)

at java.net.HttpURLConnection.getResponseCode(Unknown Source)

at sun.applet.AppletClassLoader.getBytes(Unknown Source)

at sun.applet.AppletClassLoader.access$100(Unknown Source)

at sun.applet.AppletClassLoader$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)
...全文
49 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yanbin_Q 2003-08-21
  • 打赏
  • 举报
回复
急待解决,不够分再加
Yanbin_Q 2003-08-18
  • 打赏
  • 举报
回复
这篇文章我也看过,因为不可能在每个客户端都要求建上一个指向数据库服务器的ODBC,况且这样做还需要签名认证
stonewang 2003-08-18
  • 打赏
  • 举报
回复
(续上、、、)
4)执行SQL命令

public void execSQLCommand(String command)
{
try{
theStatement=theConnection.createStatement();
theResult=theStatement.executeQuery (command);
theMetaData=theResult.getMetaData ();
int columnCount=theMetaData.getColumnCount ();
theVisits.setText("");
while(theResult.next ())
{
for(int i =1;i<=columnCount;i++)
{
String colValue=theResult.getString(i);
if(colValue==null)colValue="";
theVisits.append (colValue+";");
}
theVisits.append ("\n");
}
}catch(Exception e)
{
handleException(e);
}
}
为了执行该命令,程序使用Connection对象的createStatement()方法创建
一个可以有查询的Statement。然后,它激活Statement对象的executiveQuery()
方法,用来传递包含SQL查询语句的字符串。从init()中传送过来的参数——
Slect * from MyTable是一个简单的数据库查询语言,如果你还不知道什么意思,
那么请你还是查看一本有关数据库的书吧,这些内容很多,不是我这儿一下子能说
清楚的了。它的意思简单的说,就是查找表——MyTable中的所有(*)信息。它会
返回数据库中的所有内容,并把它作为ResultSet访问的结果。接着该程序激活ResultSet
对象的getMetaData()方法。这时,返回一个ResultSetMetaData值,该值存储在
一个称为theMetaData的变量中。使用ResultSetMetaData对象,可以获得很多有用的
数据;这里该程序使用getColumnCount()方法获得结果表中列的数量。最后,该程序反
复使用该结果表,激活theResult的next()方法获得结果表中的每一条记录,只到该方法
使用完全部记录返回flase为止。

5)关闭数据库连接

public void closeConnection()
{
try{
theConnection.close ();
}
catch(Exception e)
{
handleException(e);
}
}
当用户访问完某个数据库时,应该关闭数据库连接,释放与连接有关的资源。用户创建
的任何打开的ResultSet或者Statement对象将 自动关闭。另外,在关闭连接时可能发
生一个SQLException,也放到后面处理。

6)处理异常和错误

public void handleException(Exception e)
{
theStatus.setText("Error:"+e.getMessage ());
e.printStackTrace ();
if(e instanceof SQLException)
{
while((e=((SQLException)e).getNextException ())!=null)
{
System.out.println(e);
}
}
}
handleException()方法用来处理以上的错误和异常。该方法设置状态TextField包含与
异常有关的错误消息,使用getMessage()方法获得该消息。它还可以在System.out打印
堆栈轨迹。

三 安装ODBC数据源

为了运行这个应用程序,用户必须 首先创建一个与MyTable数据库相对应的 ODBC数据源。
为了通过ODBC使用Access,用户必须安装Access Odbc驱动程序。如果用户没有安装该驱动
程序,那么还是先安装吧,什么,不会,不会也不行了,找一本书好好看看吧,这是肯定要
看的。我这儿简单的给你说一下吧:

1.从控制面板中选择ODBC-32,双击(要是没有这个图标,那我真的没有办法了,它在安装
数据库的时候,应该会安装上的,否则就只能找一张数据库系统的安装盘,找到ODBC驱动程
序进行安装)。

2.单击添加,选择Microsoft Access Driver。(如果这个图标也没有,那么你的机器是严
重缺乏营养,赶紧装数据库必须的软件,先装Access,这儿要用)

3.输入你要使用的数据源的名称(如果没有,那就得先创建,我这儿就不说Access的使用方
法了)。描述就随便你了。

4.单击选择按钮选择你已经创建好了的Access数据库的文件。

5.点确定就可以了。如果你想为你数据库保密的话,可以加上用户名和密码。(在高级选项里面)。
stonewang 2003-08-18
  • 打赏
  • 举报
回复
请参考:
使用Java Applet访问数据库

学习任何的程序语言,当然都得与数据库,Java刚刚诞生的时候,对数据库的支持并不是很好,经过这几年的发展,它对数据库的支持也已经完全达到了成熟的境地。由于这里主要是介绍Java Applet小程序, 因此,不可能用大的篇幅去给大家介绍数据库的知识了,怎么样去建立与设计数据库,还是请大家自己找点书看看吧!这儿,对不住了。

我们这儿以Microsoft Access数据库为例子来说明怎么实现一个数据库的打开与读取的知识。

第一步:
使用Microsoft Access创建一个数据库,也就是我的这个例子要用到的,内容就随便了。

第二步:也就是编程序了。

1)定义变量,变量的定义如下:

TextArea theVisits=new TextArea (6,80);
//显示数据库的内容
TextField theStatus=new TextField ("",80);
//显示打开数据库的信息。相当于程序的状态栏
Connection theConnection; //数据库的连接方法
Statement theStatement; //代表一个发送到数据库来执行的数据库命令
ResultSet theResult; //读取的数据结果,也就是数据库返回的结果
ResultSetMetaData theMetaData;
//包含了有关数据库命令执行后 返回结果的有用信息。
String theDataSource; //包含了被访问数据库或者数据源的名称,用URL形式表示 .
String theUser; //数据库的用户名
String thePassword; //数据库的密码
2)实现界面,可以用开始时给大家介绍的方法来实现,界面的实现相对来说,

比较的简单了,如下:

public void init()
{
add(theVisits);
add(theStatus);
theVisits.setEditable (false); //设置文本区域不可以被用户写入
theStatus.setEditable (false); //设置文本区域不可以被用户写入
openConnection(); //打开数据库的连接
execSqlCommand("select * from MyTable"); //从数据库中读取内容
closeConnection(); //关闭已经打开的数据库
}
3)打开某个数据库的连接

public void openConnection()
{
theDataSource="jdbc:odbc:MyAccess";
theUser="";
thePassword="";
try
{
Class.forName("Sun.jdbc.odbc.JdbcOdbcDriver");
theConnection=DriverManager.getConnection(theDataSource,theUser,thePassword);
theStatus.setText("Status:OK");
}
catch (Exception e)
{
handleException(e);
}
}

包含数据源名称的字符串格式为一个特殊的语句:

jdbc:<subpotocol>:<subname>

协议 名jdbc必须提供,子协议和子名称根据使用数据源类型而变化。
JDBC DriverManager使用子协议来选择书记源响应的驱动程序。子协议
的通常值为“odbc”和“oracle“,子名称包含了该驱动程序使用的附加
信息。通常情况,该子名称是某个网络名称,例如,用于其它Web服务:

jdba:<subpotocol>://<host.domin><port>/<databasename>

驱动程序的说明应该指定子协议和子名称的正确形式。使用ODBC时,主机
和端口信息没有必要提供,因为数据源总是配置在本地主机上。用于ODBC数据源的形式是

jdbc:odbc:<data source name>

为了打开数据库连接,用户必须使用具体的驱动程序另外,驱动程序应该指
定如何这样做。如果正在使用JDBC-ODBC桥程序,那么可以通过使用名为Class类
的forName()方法来使用具体的JDBC-ODBC桥驱动程序。

class.forName("sun.jdbc.JdbcOdbcDriver");

然后,拥护可以告诉rManager打开数据源的连接,使用下列方法:

theConnection=DriverManager.getConnection(theDataSource,theUser,thePassword);

getConnection()方法返回一个Connection对象,用户应该保存这个对象,
因为它是访问数据源的方法。这里,该对象保存到名为theConnection的字段中。

如果在打开连接过程中出现错误,则SQLexception作废,通过在try-catch
块内打开连接的语句,拥护可以处理这种异常。通过使用后面要讲的handleException(),
在TextField内显示一个简短的相应信息。
(未完,待续、、、)
网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的诊断和测试以及恢复系统功能的工具。小编的确一直都想把这方面的命令做个总结,这次辛苦老范给我们整理了这份实用的秘笈。   Bootcfg   bootcfg 命令启动配置和故障恢复(对于大多数计算机,即 boot.ini 文件)。   含有下列参数的 bootcfg 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 bootcfg 命令。   用法:   bootcfg /default  设置默认引导项。   bootcfg /add    向引导列表中添加 Windows 安装。   bootcfg /rebuild  重复全部 Windows 安装过程并允许用户选择要添加的内容。   注意:使用 bootcfg /rebuild 之前,应先通过 bootcfg /copy 命令备份 boot.ini 文件。   bootcfg /scan    扫描用于 Windows 安装的所有磁盘并显示结果。   注意:这些结果被静态存储,并用于本次会话。如果在本次会话期间磁盘配置发生变化,为获得更新的扫描,必须先重新启动计算机,然后再次扫描磁盘。   bootcfg /list   列出引导列表中已有的条目。   bootcfg /disableredirect 在启动引导程序中禁用重定向。   bootcfg /redirect [ PortBaudRrate] |[ useBiosSettings]   在启动引导程序中通过指定配置启用重定向。   范例: bootcfg /redirect com1 115200 bootcfg /redirect useBiosSettings   hkdsk   创建并显示磁盘的状态报告。Chkdsk 命令还可列出并纠正磁盘上的错误。   含有下列参数的 chkdsk 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数的 chkdsk 命令。   vol [drive:] [ chkdsk [drive:] [/p] [/r]   参数  无   如果不带任何参数,chkdsk 将显示当前驱动器中的磁盘状态。 drive: 指定要 chkdsk 检查的驱动器。 /p   即使驱动器不在 chkdsk 的检查范围内,也执行彻底检查。该参数不对驱动器做任何更改。 /r   找到坏扇区并恢复可读取的信息。隐含着 /p 参数。   注意 Chkdsk 命令需要 Autochk.exe 文件。如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多引导系统的计算机,必须保证是在包含 Windows 的驱动器上使用该命令。 Diskpart   创建和删除硬盘驱动器上的分区。diskpart 命令仅在使用故障恢复控制台时才可用。   diskpart [ /add |/delete] [device_name |drive_name |partition_name] [size]   参数 无   如果不带任何参数,diskpart 命令将启动 diskpart 的 Windows 字符模式版本。   /add   创建新的分区。   /delete   删除现有分区。   device_name   要创建或删除分区的设备。设备名称可从 map 命令的输出获得。例如,设备名称:   DeviceHardDisk0   drive_name   以驱动器号表示的待删除分区。仅与 /delete 同时使用。以下是驱动器名称的范例:   D:   partition_name   以分区名称表示的待删除分区。可代替 drive_name 使用。仅与 /delete 同时使用。以下是分区名称的范例:   DeviceHardDisk0Partition1    大小   要创建的分区大小,以兆字节 (MB)表示。仅与 /add 同时使用。   范例   下例将删除分区: diskpart /delete Device HardDisk0 Partition3 diskpart /delete F:   下例将在硬盘上添加一个 20 MB 的分区:   diskpart /add Device HardDisk0 20   Fixboot

81,092

社区成员

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

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