- 浏览: 595591 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (268)
- ext基础 (72)
- Java基础 (68)
- jquery (14)
- oracle (21)
- sqlserver (7)
- linux (2)
- webserver (1)
- C/C++ (1)
- sql (9)
- IDE (2)
- java 智能卡 (1)
- mysql (6)
- ibatis (2)
- struts2 (3)
- cvs (1)
- 服务器 (1)
- html (11)
- freemarker (4)
- liferay (2)
- jMS (1)
- iphone (1)
- c# (1)
- Android (11)
- wince (6)
- javascript (4)
- ps (1)
- hibernate (1)
- 其他 (3)
最新评论
-
ilyq:
请问,px.gif 在哪里
斜线表头 -
jisang:
没看懂,第一个org.js和最后的js什么关系,可否发我一份完 ...
用ExtJS 实现动态载入树(Load tree) -
JavaStudyEye:
我去,能否搞个正确点的,,,
<#list ...
freemarker 遍历map 对象 -
PangSir:
大爱,简直是大爱!!困扰这么久以来的问题,虽然知道是CSS的问 ...
ExtJs checkbox radiobox 问题 汇总 -
skynet_java:
有demo嘛!邮箱:think_world@foxmail.c ...
消息推送服务需求 - 服务器开发、客户端开发
最近,在这里看到了几篇关于在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
实验中使用的数据表的结构
运行此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 的、获得上述权限的策略文件的内容
创建了策略文件后,还要修改${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
实验环境
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";
};
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]
转:http://bbs.chinaunix.net/viewthread.php?tid=256602
作者:wolfg
发表评论
-
springboot 发布
2022-01-08 16:53 251java -jar spring-boot-druid-0.0 ... -
List 边遍历,边删除?
2020-07-17 16:51 509新手常犯的错误 可能很 ... -
servlet 文件上传
2012-08-10 10:52 1143org.apache.commons.fileupload 文 ... -
pdf 简单连接servlet
2012-07-25 10:05 1104protected void doGet(HttpSe ... -
应用 HttpClient 来对付各种顽固的WEB服务器
2012-04-11 17:38 985一般的情况下我们都是使用IE或者Navigator浏览器来访问 ... -
MAVEN2入门学习心得(4)-知识汇集
2012-01-11 14:16 1009一、创建Spring+Hibernate+Activiti+V ... -
MAVEN2入门学习心得(3)-仓库管理器Nexus相关
2012-01-11 14:11 1335以前觉得Nexus搭建太简单,没有留下学习重点,重新温习起来又 ... -
MAVEN2入门学习心得(2)-仓库相关
2012-01-11 14:08 1283MAVEN2的仓库基本可以分为主机仓库、代理仓库、本地仓库。 ... -
MAVEN2入门学习心得(1)-插件相关
2012-01-11 14:02 1156MAVEN2涉及到很多插件,掌握插件的学习方式很重要,要不然接 ... -
restful webserice
2011-08-11 20:06 945package com.onetown.action.admi ... -
java.lang.OutOfMemoryError: PermGen space及其解决方法
2011-08-05 10:00 871这个问题是我的工程中 ... -
ibatis 一级缓存 功能
2011-01-28 15:50 2128前几天和朋友讨论数据库Cache的时候,谈到了iBatis框架 ... -
内存溢出的解决
2011-01-28 15:07 1079内存溢出虽然很棘手 ... -
oracle sql 基础
2010-12-25 14:52 897视图; create or replace view my_v ... -
计算 上一个 工作日的 自定义函数
2010-09-06 10:31 1815算法描述 1.获取日期参数,然后自减一 2.判断该日期是否是 ... -
Java 简单 计算任意两个日期之间的工作天数
2010-09-06 09:20 1772主要思路: 对于任意2个日期比如:date_start=201 ... -
java file
2010-09-05 21:37 1281追加文件尾部 public void testPrintWri ... -
验证码
2010-08-31 09:07 1041package com.pa.util; import ... -
java List与Array 转换
2010-08-31 08:57 35483public static void main(String[ ... -
java property 配置文件 用法
2010-08-14 18:12 4977在我们平时写程序的时候,有些参数是经常改变的,而这种改变不是我 ...
相关推荐
3. 网络协议驱动:这种驱动用于三层架构,通常由Applet使用,通过网络连接到数据库。 4. 全Java驱动(也称为类型4驱动):这是最现代和最高效的驱动,完全用Java编写,直接与数据库通信,了解数据库的底层协议,...
#### 三、使用JDBC访问数据库的基本步骤 1. **加载JDBC驱动**:使用`Class.forName("com.mysql.jdbc.Driver")`加载MySQL数据库的JDBC驱动。 2. **建立连接**:通过`DriverManager.getConnection(url, username, ...
在本文中,我们将探讨如何使用Java Applet访问数据库,特别是使用Microsoft Access数据库。 首先,要实现Java Applet访问数据库,我们需要了解几个关键概念: 1. **数据库连接**:在Java中,`java.sql.Connection`...
#### 三、传统 JDBC 访问数据库步骤 使用 JDBC 连接数据库的一般步骤如下: 1. **注册 JDBC 驱动**:通过调用 `Class.forName(driverClass)` 加载相应的 JDBC 驱动。 2. **获取数据库连接**:通过 `DriverManager....
尽管JDBC独立于ODBC(Open Database Connectivity),但在早期,JDBC-ODBC桥接器被用作一种常见的解决方案,允许Java应用程序通过ODBC驱动程序间接访问数据库。然而,随着原生JDBC驱动程序的发展,这种桥接方式逐渐...
3. 网络协议驱动:支持三层架构,主要用于Applet访问数据库的情况,通过网络通信与数据库服务器交互。 4. 全Java驱动(类型4):也称为JDBC网络协议驱动,是纯Java实现,直接与数据库实例通信,了解数据库的底层...
#### 四、传统JDBC访问数据库步骤 1. **注册数据库驱动**:通过`Class.forName(String driverClass)`加载指定的JDBC驱动。 2. **获取数据库连接**:使用`DriverManager.getConnection(String url, String user, ...
JDBC使得Java应用程序能够通过标准接口与任何支持JDBC的数据库进行交互,无论是客户端应用、服务器端应用还是Applet,都可以方便地访问数据库。JDBC不仅适用于Intranet环境,还可以跨平台运行在Windows、Macintosh和...
1. **建立连接**:用户通过Web浏览器加载含有Java Applet的HTML页面,Applet中的代码调用JDBC API建立与数据库的连接。 2. **编译SQL语句**:Java程序通过JDBC API创建Statement或PreparedStatement对象,用于编译和...
10.3 JDBC访问数据库的基本过程 1. 加载驱动:通过Class.forName()加载数据库驱动。 2. 建立连接:使用DriverManager.getConnection()方法连接数据库。 3. 创建Statement/PreparedStatement对象。 4. 执行SQL:调用...
在 J2EE 程序中,应用服务器通常提供了数据库连接池的功能,但是对于一般的 Java 应用程序、Applet 或者 JSP、velocity 等,数据库连接池的选择并不多且性能不好。 Java 程序员通常会羡慕 Windows ADO 的数据库连接...
JDBC(Java Database Connectivity)是Java访问数据库的标准接口,适用于多种数据库系统。通过加载数据库驱动、建立连接、创建Statement或PreparedStatement对象,可以执行SQL语句,对数据进行增删改查。JDBC还支持...
第一种方法是直接使用Java小程序中的专用协议纯Java驱动器,通过两种结构(即客户端和服务器端)直接访问数据库。这种方案下,所有的客户功能都由Java实现,不需要额外的Java服务器程序作为中间层。 第二种方法则是...
"中,作者Pratik Patel首先解释了什么是JDBC,这是一个Java程序员访问数据库的标准化方式。他介绍了JDBC的结构,包括驱动程序模型,以及JDBC如何通过ODBC(Open Database Connectivity)与传统的数据库系统兼容。这...
企业也可以用 JDBC 通过 Intranet 将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有 Windows、 Macintosh 和UNIX 等各种不同的操作系统)。随着越来越多的程序员开始使用Java 编程语言,对从 Java ...
这种驱动完全由Java编写,无需额外安装客户端库,非常适合在Web应用环境中使用。 - **Oracle提供的选项**:Oracle提供了OCI (Oracle Call Interface) 和 Thin 驱动两种选择。OCI驱动依赖于本地客户端库,而Thin驱动...