`
qinya06
  • 浏览: 581525 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

applet中使用JDBC访问数据库的

阅读更多
最近,在这里看到了几篇关于在applet中使用JDBC访问数据库的帖子,觉得大侠们有的回复很绝对,说applet不能访问数据库,不敢苟同,于是参照Sun的网上教程"[url=http://cn.sun.com/developers/onlineTraining/Programming/BasicJava1/data.html]Java程序设计语言基础: 实践指南,第1部分",做了一些实验,总结出来与大家分享,也请多多指教。

实验环境
DB Server #1: Solairs 8 + Oracle 8.1.7 + apache
DB Server #2: Solairs 8 + Oracle 8.1.7
Client: Windowsxp SP3 + J2SE6.0+ Oracle JDBC Driver

实验中使用的数据表的结构
TABLE DBA (
        TEXT varchar2(100),
        primary key (TEXT)
)

import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.applet.Applet;
import javax.swing.*;
import java.sql.*;
import java.net.*;
import java.io.*;

public class DbaAppl extends Applet implements ActionListener {

   JLabel text, clicked;
   JButton button, clickButton;
   JTextField textField;
   private boolean _clickMeMode = true;
   private Connection c;

   final static private String _driver = "oracle.jdbc.driver.OracleDriver";
   final static private String _url = "jdbc:oracle:thin:username/password@(description=(address_list=(address=(protocol=tcp)(host=developer)(port=1521)))(source_route=yes)(connect_data=(sid=ansid)))";

   public void init(){
     setBackground(Color.white);
     text = new JLabel("Text to save to file:");
     clicked = new JLabel("Text retrieved from file:");
     button = new JButton("Click Me");
     button.addActionListener(this);
     clickButton = new JButton("Click Again");
     clickButton.addActionListener(this);
     textField = new JTextField(20);
     setLayout(new BorderLayout());
     setBackground(Color.white);
     add(BorderLayout.NORTH, text);
     add(BorderLayout.CENTER, textField);
     add(BorderLayout.SOUTH, button);
   }

   public void start(){ 
     System.out.println("Applet starting.");
   } 

   public void stop(){
     System.out.println("Applet stopping.");
   }

   public void destroy(){
    System.out.println("Destroy method called.");
   }

   public void actionPerformed(ActionEvent event){
     try{
        Class.forName (_driver);
        c = DriverManager.getConnection(_url);
      }catch (java.lang.ClassNotFoundException e){
       System.out.println("Cannot find driver");
       System.out.println(e.getMessage());
      }catch (java.sql.SQLException e){
       System.out.println("Cannot get connection"); 
       System.out.println(e.getMessage());
      }

     Object source = event.getSource();
     if(source == button){
       if(_clickMeMode){
         JTextArea displayText = new JTextArea();
         try{
     //Write to database
          String theText = textField.getText();
          Statement stmt = c.createStatement();
          String updateString = "INSERT INTO dba VALUES ('" + theText + "')";
          int count = stmt.executeUpdate(updateString);
    //Read from database
          ResultSet results = stmt.executeQuery("SELECT TEXT FROM dba "); 
          while(results.next()){
            String s = results.getString("TEXT");
            displayText.append(s + "\n");
          }
          stmt.close();
         }catch(java.sql.SQLException e){
         System.out.println("Cannot create SQL statement");
         System.out.println(e.getMessage());
         }

//Display text read from database
        text.setText("Text retrieved from file:");
        button.setText("Click Again");
        _clickMeMode = false;
//Display text read from database
      } else {
        text.setText("Text to save to file:");
        textField.setText("");
        button.setText("Click Me");
        _clickMeMode = true;
      }
    }
  }
}





运行此applet的html文件DbaAppl.html
<HTML>;
<BODY>;

<APPLET CODE=DbaAppl.class
  WIDTH=200
  HEIGHT=100>;
</APPLET>;

</BODY>;
</HTML>;



首先,DbaAppl.java中_url串指定的是与Web Server在同一台主机上(server1)的Oracle,编译后把DbaAppl.class和DbaAppl.html
一起放在Web Server的同一目录下,在客户机的浏览器里访问DbaAppl.html,查看Java控制台,得到如下信息

Cannot find driver
oracle.jdbc.driver.OracleDriver
java.lang.NullPointerException


这一出错信息的意思是,DriverManager 已在 applet HTML和类文件所在的目录以及当前JRE使用的本地CLASSPATH中没有找到 JDBC 驱动程序。
解决办法,将JDBC 驱动程序oracle-jdbc-driver.jar文件放在客户机当前使用的JRE的${JRE_HOME}/lib/ext目录下,或者用jar工具将oracle-jdbc-driver.jar解压,把解压后得到的oracle目录也放在Web Server上applet所在
的目录中。

更正后,重新访问DbaAppl.html,查看Java控制台,得到如下信息

java.security.AccessControlException: access denied(java.net.SocketPermission server1 resolve)


这个错误的通知你访问被拒绝。这就是说,由于 applet 程序试 图在没有获得正确的权限的情况下访问系统资源,括号中代码表示,若要纠正这种情况,您需要一个向数据库所在计算机(主机名为server1) 授予 applet 访问权限的 SocketPermission。

解决办法,利用 Policy 工具生成你所需要的策略文件,或者用一个 ASCII 编辑 器生成该策略文件。
下面的代码是名为 DbaApplPol 的、获得上述权限的策略文件的内容

引用
grant {
  permission java.net.SocketPermission "server1", "resolve";
};

创建了策略文件后,还要修改${JRE_HOME}/lib/security/java.security文件

policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy

下添加一行
policy.url.3=file:/path/to/DbaApplPol
再次访问DbaAppl.html,成功运行。

再将DbaAppl.java中_url串改为指定另一台主机(server2)上的Oracle,编译,上传,访问得到如下错误信息
java.security.AccessControlException: access denied(java.net.SocketPermission 10.6.1.16:1521 connect,resolve)
这回的意思是需要一个允许在数据库所在的server2上访问IP地址和端口的SocketPermission。在前面生成的策略文件中加入
permission java.net.SocketPermission "10.6.1.16:1521", "connect, resolve";
后,成功运行。

总结一下,通过applet访问数据库不是不可以的,但确实不太方便,某些特殊环境下可能值得使用。
[list=1]
  • 客户端要有JRE支持,可以在客户机访问applet所在页面是提示安装Java Plug-in,这样的页面可以通过HTMLConvert工具生成
  • JDBC驱动要么放在客户机JRE的CLASSPATH下,要么与applet放在一起,注意如果驱动是jar文件的话,要解开
  • 通过设置正确的策略文件,applet不仅可以访问与自己在同一台机器上的数据库,也可以访问其他远程数据库。不过,需要每个想要成功运行applet的客户机修改其本地JRE的java.security文件

  • 转:http://bbs.chinaunix.net/viewthread.php?tid=256602
    作者:wolfg
    分享到:
    评论

    相关推荐

      JDBC 3.0数据库开发与设计

      5.2 Applet访问数据库实例 5.3 Application访问数据库实例 5.4 使用Jdevelpoer工具的数据库开发实例 5.5 二层结构开发数据库的优缺点 5.6 本章小结 第6章 三层结构数据库开发实例 6.1 三层结构原理 6.2 JSP...

      jdbc0520.rar

      企业也可以用 JDBC 通过 Intranet 将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有 Windows、 Macintosh 和UNIX 等各种不同的操作系统)。随着越来越多的程序员开始使用Java 编程语言,对从 Java ...

      JSP訳文--工具--Java

      Java IDL 用连接池提高Servlet访问数据库的效率 在 ASP 文件中调用 Servlet Java Applet介绍 Applet与Servlet通讯的四种方法及其比较 在Applet中应用JDBC访问数据库 用XML与Servlet构建在线问答...

      Java语言SQL接口 JDBC编程技术

      通过JDBC可以使用Java应用程序或Java applet访问网络上的各种数据库。本书首先介绍了JDBC的概念、结构和特点。然后逐步讲解了如何编写JDBC程序。最后给出了JDBC API的详细说明。附录中给出了JDBC的获取与安装的方法...

      Java数据库连接——JDBC

      Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法 模型 JDBC API 既支持数据库访问的两层模型(C...

      java程序是怎么操作数据库的,可以以常用据库为例,求详细解答,最好能举例。

      在上面这个程序中我想你展示了如何使用JDBC-ODBC连接数据库,使用SQL语句生成一个表,使用SELECT、INSERT 、UPDATE语句取的、插入和更新一个表中的数据,如何通过字段名和字段索引访问数据库中的东东!我希望你能从...

      Java案例开发锦集

      案例5 利用DES加密解密 第七章 Java与数据库 案例1 在Applet中应用JDBC访问数据库 案例2 通过JDBC-ODBC桥连接数据库 案例3 通过tomcat数据源访问数据库 案例4 JDBC连接池的实现 案例5 用...

      JAVA基础知识课件 适合初学者

      JAVA基础知识课件 适合初学者 包括 ch1 Java概述 ch2 Java基本语法 ch3 类与对象 ch4-1 继承、接口和多态 ...ch11 JDBC与数据库访问 ch12 Java网络编程 看完受益匪浅,对JAVA有新认识,大学生期末考试可90+

      Servlet与JSP核心编程第2版

      17.3 用jdbc实用工具简化数据库访问 17.4 使用预备语句 17.5 创建可调用语句 17.6 使用数据库事务 17.7 使用orm框架将数据映射到对象 第18章 配置msaccess,mysql和oracle9i 18.1 配置microsoftaccess与...

      JDBC基础知识

      JDBC(Java DataBase connectivity, ...  从根本上来说,JDBC 是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库,因此可以用 Java 编写不同类型的可执行文件,例如:  Java 应用程序 Java Applet

      JAVA编程百例(照着例子更容易!)

      实例76 在APPLET中使用SWING 实例77 应用JAR包 实例78 播放声音 实例79 一个简单的SERVLET 实例8 类的标识和访问控制 实例80 使用SERVLET获取客户表单 实例81 SERVLET读取COOKIE数据 实例82 SERVLET读取SESSION数据 ...

      快逸报表在J2EE部署中最简实例

      在已有的 J2EE 项目中使用刚才创建的报表,需要如下步骤: (1) 导入 jar 包和相关文件 (a)将快逸报表安装目录\quieeReport\webapps\quiee\WEB-INF\lib中的 jar 包导入项目,并且导入所需要的mysql驱动包. (b)将\...

      Automated-Teller-Machine:一个基于ATM Emulator GUI的Java applet

      从MySQL数据库中获取数据。 b)取款:只能以50的倍数提取现金。 如果余额少于所需金额,则提示。 c)管理员访问权限:管理员访问权限可以查看所有帐户,添加帐户,删除帐户,操作记录。 #步骤运行该应用程序:1....

      疯狂JAVA讲义

      5.4.2 使用访问控制符 132 5.4.3 package和import 135 5.4.4 Java的常用包 140 5.5 深入构造器 140 5.5.1 使用构造器执行初始化 141 学生提问:构造器是创建Java对象的途径,是不是说构造器完全负责创建Java...

      Java语言程序设计

      图书详细描述: 本书将Java语言作为大学生的计算机程序设计入门语言,其特色是内容全面、深入浅出、辅助教材立体...多线程第9章 图形用户界面第10章 JDBC与数据库访问第11章 Servlet程序设计第12章 JSP程序设计参考文献

      vc++6.0 程序设计学与用教程

      是Visual C++ 6.0程序设计学与用教程(起跑线)的源码.本书包括内容 Java语言是目前最为流行和通用的网络编程设计语言,在...19.2 访问数据库的步骤 19.3 JDBC的特性 19.4 获取数据库信息 附录A JDK新特性简介

      J2EE中文版指南 CHM格式 带全文检索

      在JSP中使用对象 181 隐式对象 181 特定应用程序对象 181 共享对象 182 JSP scripting 元素 182 声明 182 脚本(scriptlets) 183 表达式 184 在JSP页面中包含内容 185 转换控制到另一网络组件 185 参数元素 185 ...

      Java2核心技术.part5

      6.4.1使用内部类访问对象状态 6.4.2内部类的特殊语法规则 6.4.3内部类是否实用、必要和安全 6.4.4局部内部类 6.4.5匿名内部类 6.4.6静态内部类 6.5代理 第7章图形程序设计 7.1 Swing概述 ...

    Global site tag (gtag.js) - Google Analytics