使用db2,oracle8等数据库提供的jdbc驱动,jdbc-odbc客户端需要进行odbc配置,在web上是不现实的
解决方案 »
- 如何在屏幕上显示二进制的float和double?
- 一个有关websphere中配置数据库服务器的问题
- 请问:import java.awt.* 与import java.awt.event.*有什么区别?
- 创建不同线程的问题。
- 莱问
- 有关Java Swing的图形界面编程的问题,高手请进!
- 请问哪里有UML的免费资料下
- 请各位帮忙看一下这个有趣的问题!
- 各位高手还是昨天的事!!!--- 怎样将字符转换为数据?(javascript)
- 我刚学java,想请教一下,我在文本中创建了一个接口,一个类,还有一个扩展类,保存为.java文件时,如何给文件名?
- Java
- 我写的applet为什么在netscape中无法运行??
居然连接的方法和servlet以及jsp完全一致,但小弟测试之后无法连上,
那位大哥能给我一个明确的答复:applet到底能不能连数据库?
附(网友的连接方法):String url="jdbc:odbc:interweb";
String ls_1="select * from t_interdata";
Class.forName("com.ms.jdbc.odbc.JdbcOdbcDriver"); //加载驱动程序
//建立连接
Connection con=DriverManager.getConnection(url,"sa","");
//执行SQL
Statement stmt=con.createStatement();
ResultSet result=stmt.executeQuery(ls_1); //返回结果
这是我觉得在Applet实现队数据的访问好像没什么意义, Applet是需要下载到浏览器端的,然后再浏览器端运行,则会必然要求浏览器端好么安装你的数据库的客户端(比如OrACLE的客户端,SQLServer的客户端),另外还要建立数据的连接,基于浏览器的目的就是为了实现瘦客户,希望在客户端只需要一个浏览器,不需要在安装其他东西,什么数据库客户端啦,统统都不要装,这样就没哟任何意义了。
如果你在Applet中直接实现对数据库的访问,那必然需要在浏览器侧的机器必须安装数据库的客户端,如果你的程序时基于Intrarnet的,只是在企业网内部运行,虽然一个个机器去安装客户端,有些麻烦,到还是可以的。假如你是基于Internet,那就不可能了,你不可能要求每个来浏览网页的客户都安装数据库客户端,另外还需要配置数据库的连接吧。显然是不可能的。
我觉得可行的方法是WEB服务器和数据可服务器进行交互,WEB服务器取得数据后,然后将数据送到浏览器端。比较典型的方式一个是通过CGI编程,WEB服务器上的CGI进程从数据库取数据,然后HTML的方式发到浏览器端;另一种方式现在也用得很多,那就是使用ASP了。
我个人觉得在Applet访问数据美什么意义,不过还是附上JDBC的实现,下面是一个例子,这里提供的是一个通过JDBC以TCP/IP方式访问ORACLE数据库的例子,包括直接执行SQL语句和调用存储过程两种方式:import java.sql.*;
import java.lang.*;
import java.io.*;public class JDBC_EXAMPLE {
public static void main(String args[]){
Connection connection=null;
Statement dispSTMT=null; //用于装载执行静态的SQL语句
CallableStatement callableSTMT=null;
//可以调用数据库存储过程
ResultSet result; String sQueryStr="";
String sVolLevel=""; //建立数据库连接
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
connection = DriverManager.getConnection (
"jdbc:oracle:thin:@10.136.140.156:1521:mis",
"UserName","Password"); //数据库的用户名和口令
//getConnection(String url,String UserName,String UserPassword)
dispSTMT=connection.createStatement();
}catch(Exception e){}
//执行SQL语句并去取得数据集
try {
sQueryStr="select TO_CHAR(SYSDATE) as SD form DUAL";
result=dispSTMT.executeQuery(sQueryStr);
if (result.next())
sVolLevel=result.getString("SD").trim();
}catch(Exception e){}
//执行存储过程并取得数据
try{
callableSTMT=(CallableStatement)con.prepareCall("{call SP_GETDYHGL(?,?,?,?,?,?,?,?)}"); callableSTMT.clearParameters();
String sInParm1,sInParm2,sInParm3,sInParm4;
String sOutParm1,sOutParm2;
float fOutParm3,fOutParm4;
sInParm1 ="Input Parm1";
sInParm2 ="Input Parm2";
sInParm3 ="Input Parm3";
sInParm4 ="Input Parm4"; //输入参数
callableSTMT.setString(1,sInParm1);
callableSTMT.setString(2,sInParm2);
callableSTMT.setString(3,sInParm3);
callableSTMT.setString(4,sInParm4); //注册输出参数
callableSTMT.registerOutParameter(5,Types.VARCHAR);
callableSTMT.registerOutParameter(6,Types.VARCHAR);
callableSTMT.registerOutParameter(7,Types.FLOAT);
callableSTMT.registerOutParameter(8,Types.FLOAT); //执行存储过程
callableSTMT.execute(); //取得输出数据
sOutParm1 =callableSTMT.getString(5);
sOutParm2 =callableSTMT.getString(6);
fOutParm3 =callableSTMT.getFloat(7);
fOutParm4 =callableSTMT.getFloat(8);
}catch(Exception e){}
}
}
这是我觉得在Applet实现队数据的访问好像没什么意义, Applet是需要下载到浏览器端的,然后再浏览器端运行,则会必然要求浏览器端好么安装你的数据库的客户端(比如OrACLE的客户端,SQLServer的客户端),另外还要建立数据的连接,基于浏览器的目的就是为了实现瘦客户,希望在客户端只需要一个浏览器,不需要在安装其他东西,什么数据库客户端啦,统统都不要装,这样就没哟任何意义了。
如果你在Applet中直接实现对数据库的访问,那必然需要在浏览器侧的机器必须安装数据库的客户端,如果你的程序时基于Intrarnet的,只是在企业网内部运行,虽然一个个机器去安装客户端,有些麻烦,到还是可以的。假如你是基于Internet,那就不可能了,你不可能要求每个来浏览网页的客户都安装数据库客户端,另外还需要配置数据库的连接吧。显然是不可能的。
我觉得可行的方法是WEB服务器和数据可服务器进行交互,WEB服务器取得数据后,然后将数据送到浏览器端。比较典型的方式一个是通过CGI编程,WEB服务器上的CGI进程从数据库取数据,然后HTML的方式发到浏览器端;另一种方式现在也用得很多,那就是使用ASP了。
我个人觉得在Applet访问数据美什么意义,不过还是附上JDBC的实现,下面是一个例子,这里提供的是一个通过JDBC以TCP/IP方式访问ORACLE数据库的例子,包括直接执行SQL语句和调用存储过程两种方式:import java.sql.*;
import java.lang.*;
import java.io.*;public class JDBC_EXAMPLE {
public static void main(String args[]){
Connection connection=null;
Statement dispSTMT=null; //用于装载执行静态的SQL语句
CallableStatement callableSTMT=null;
//可以调用数据库存储过程
ResultSet result; String sQueryStr="";
String sVolLevel=""; //建立数据库连接
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
connection = DriverManager.getConnection (
"jdbc:oracle:thin:@10.136.140.156:1521:mis",
"UserName","Password"); //数据库的用户名和口令
//getConnection(String url,String UserName,String UserPassword)
dispSTMT=connection.createStatement();
}catch(Exception e){}
//执行SQL语句并去取得数据集
try {
sQueryStr="select TO_CHAR(SYSDATE) as SD form DUAL";
result=dispSTMT.executeQuery(sQueryStr);
if (result.next())
sVolLevel=result.getString("SD").trim();
}catch(Exception e){}
//执行存储过程并取得数据
try{
callableSTMT=(CallableStatement)con.prepareCall("{call SP_GETDYHGL(?,?,?,?,?,?,?,?)}"); callableSTMT.clearParameters();
String sInParm1,sInParm2,sInParm3,sInParm4;
String sOutParm1,sOutParm2;
float fOutParm3,fOutParm4;
sInParm1 ="Input Parm1";
sInParm2 ="Input Parm2";
sInParm3 ="Input Parm3";
sInParm4 ="Input Parm4"; //输入参数
callableSTMT.setString(1,sInParm1);
callableSTMT.setString(2,sInParm2);
callableSTMT.setString(3,sInParm3);
callableSTMT.setString(4,sInParm4); //注册输出参数
callableSTMT.registerOutParameter(5,Types.VARCHAR);
callableSTMT.registerOutParameter(6,Types.VARCHAR);
callableSTMT.registerOutParameter(7,Types.FLOAT);
callableSTMT.registerOutParameter(8,Types.FLOAT); //执行存储过程
callableSTMT.execute(); //取得输出数据
sOutParm1 =callableSTMT.getString(5);
sOutParm2 =callableSTMT.getString(6);
fOutParm3 =callableSTMT.getFloat(7);
fOutParm4 =callableSTMT.getFloat(8);
}catch(Exception e){}
}
}
这是我觉得在Applet实现队数据的访问好像没什么意义, Applet是需要下载到浏览器端的,然后再浏览器端运行,则会必然要求浏览器端好么安装你的数据库的客户端(比如OrACLE的客户端,SQLServer的客户端),另外还要建立数据的连接,基于浏览器的目的就是为了实现瘦客户,希望在客户端只需要一个浏览器,不需要在安装其他东西,什么数据库客户端啦,统统都不要装,这样就没哟任何意义了。
如果你在Applet中直接实现对数据库的访问,那必然需要在浏览器侧的机器必须安装数据库的客户端,如果你的程序时基于Intrarnet的,只是在企业网内部运行,虽然一个个机器去安装客户端,有些麻烦,到还是可以的。假如你是基于Internet,那就不可能了,你不可能要求每个来浏览网页的客户都安装数据库客户端,另外还需要配置数据库的连接吧。显然是不可能的。
我觉得可行的方法是WEB服务器和数据可服务器进行交互,WEB服务器取得数据后,然后将数据送到浏览器端。比较典型的方式一个是通过CGI编程,WEB服务器上的CGI进程从数据库取数据,然后HTML的方式发到浏览器端;另一种方式现在也用得很多,那就是使用ASP了。
我个人觉得在Applet访问数据美什么意义,不过还是附上JDBC的实现,下面是一个例子,这里提供的是一个通过JDBC以TCP/IP方式访问ORACLE数据库的例子,包括直接执行SQL语句和调用存储过程两种方式:import java.sql.*;
import java.lang.*;
import java.io.*;public class JDBC_EXAMPLE {
public static void main(String args[]){
Connection connection=null;
Statement dispSTMT=null; //用于装载执行静态的SQL语句
CallableStatement callableSTMT=null;
//可以调用数据库存储过程
ResultSet result; String sQueryStr="";
String sVolLevel=""; //建立数据库连接
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
connection = DriverManager.getConnection (
"jdbc:oracle:thin:@10.136.140.156:1521:mis",
"UserName","Password"); //数据库的用户名和口令
//getConnection(String url,String UserName,String UserPassword)
dispSTMT=connection.createStatement();
}catch(Exception e){}
//执行SQL语句并去取得数据集
try {
sQueryStr="select TO_CHAR(SYSDATE) as SD form DUAL";
result=dispSTMT.executeQuery(sQueryStr);
if (result.next())
sVolLevel=result.getString("SD").trim();
}catch(Exception e){}
//执行存储过程并取得数据
try{
callableSTMT=(CallableStatement)con.prepareCall("{call SP_GETDYHGL(?,?,?,?,?,?,?,?)}"); callableSTMT.clearParameters();
String sInParm1,sInParm2,sInParm3,sInParm4;
String sOutParm1,sOutParm2;
float fOutParm3,fOutParm4;
sInParm1 ="Input Parm1";
sInParm2 ="Input Parm2";
sInParm3 ="Input Parm3";
sInParm4 ="Input Parm4"; //输入参数
callableSTMT.setString(1,sInParm1);
callableSTMT.setString(2,sInParm2);
callableSTMT.setString(3,sInParm3);
callableSTMT.setString(4,sInParm4); //注册输出参数
callableSTMT.registerOutParameter(5,Types.VARCHAR);
callableSTMT.registerOutParameter(6,Types.VARCHAR);
callableSTMT.registerOutParameter(7,Types.FLOAT);
callableSTMT.registerOutParameter(8,Types.FLOAT); //执行存储过程
callableSTMT.execute(); //取得输出数据
sOutParm1 =callableSTMT.getString(5);
sOutParm2 =callableSTMT.getString(6);
fOutParm3 =callableSTMT.getFloat(7);
fOutParm4 =callableSTMT.getFloat(8);
}catch(Exception e){}
}
}
这是我觉得在Applet实现队数据的访问好像没什么意义, Applet是需要下载到浏览器端的,然后再浏览器端运行,则会必然要求浏览器端好么安装你的数据库的客户端(比如OrACLE的客户端,SQLServer的客户端),另外还要建立数据的连接,基于浏览器的目的就是为了实现瘦客户,希望在客户端只需要一个浏览器,不需要在安装其他东西,什么数据库客户端啦,统统都不要装,这样就没哟任何意义了。
如果你在Applet中直接实现对数据库的访问,那必然需要在浏览器侧的机器必须安装数据库的客户端,如果你的程序时基于Intrarnet的,只是在企业网内部运行,虽然一个个机器去安装客户端,有些麻烦,到还是可以的。假如你是基于Internet,那就不可能了,你不可能要求每个来浏览网页的客户都安装数据库客户端,另外还需要配置数据库的连接吧。显然是不可能的。
我觉得可行的方法是WEB服务器和数据可服务器进行交互,WEB服务器取得数据后,然后将数据送到浏览器端。比较典型的方式一个是通过CGI编程,WEB服务器上的CGI进程从数据库取数据,然后HTML的方式发到浏览器端;另一种方式现在也用得很多,那就是使用ASP了。
我个人觉得在Applet访问数据美什么意义,不过还是附上JDBC的实现,下面是一个例子,这里提供的是一个通过JDBC以TCP/IP方式访问ORACLE数据库的例子,包括直接执行SQL语句和调用存储过程两种方式:import java.sql.*;
import java.lang.*;
import java.io.*;public class JDBC_EXAMPLE {
public static void main(String args[]){
Connection connection=null;
Statement dispSTMT=null; //用于装载执行静态的SQL语句
CallableStatement callableSTMT=null;
//可以调用数据库存储过程
ResultSet result;String sQueryStr="";
String sVolLevel="";//建立数据库连接
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
connection = DriverManager.getConnection (
"jdbc:oracle:thin:@10.136.140.156:1521:mis",
"UserName","Password"); //数据库的用户名和口令
//getConnection(String url,String UserName,String UserPassword)
dispSTMT=connection.createStatement();
}catch(Exception e){}
//执行SQL语句并去取得数据集
try {
sQueryStr="select TO_CHAR(SYSDATE) as SD form DUAL";
result=dispSTMT.executeQuery(sQueryStr);
if (result.next())
sVolLevel=result.getString("SD").trim();
}catch(Exception e){}
//执行存储过程并取得数据
try{
callableSTMT=(CallableStatement)con.prepareCall("{call SP_GETDYHGL(?,?,?,?,?,?,?,?)}"); callableSTMT.clearParameters();String sInParm1,sInParm2,sInParm3,sInParm4;
String sOutParm1,sOutParm2;
float fOutParm3,fOutParm4; sInParm1 ="Input Parm1";
sInParm2 ="Input Parm2";
sInParm3 ="Input Parm3";
sInParm4 ="Input Parm4"; //输入参数
callableSTMT.setString(1,sInParm1);
callableSTMT.setString(2,sInParm2);
callableSTMT.setString(3,sInParm3);
callableSTMT.setString(4,sInParm4); //注册输出参数
callableSTMT.registerOutParameter(5,Types.VARCHAR);
callableSTMT.registerOutParameter(6,Types.VARCHAR);
callableSTMT.registerOutParameter(7,Types.FLOAT);
callableSTMT.registerOutParameter(8,Types.FLOAT); //执行存储过程
callableSTMT.execute(); //取得输出数据
sOutParm1 =callableSTMT.getString(5);
sOutParm2 =callableSTMT.getString(6);
fOutParm3 =callableSTMT.getFloat(7);
fOutParm4 =callableSTMT.getFloat(8);
}catch(Exception e){}
}
}
不知您用过ORACLE的I系列产品没有,都是采用浏览器的方式管理,而且很多是采用了applet的方式,象FORM SERVER、OEM、SQL*NET等,毫无疑问,他们都是要访问数据库的,当然客户端不需要配置任何ODBC,却不知是如何实现的?
另外,我不知道你的ORACLE8i的工具是不是随便找一台机器,上面除了浏览器之外什么都没装,当然,数据服务端和客户端都没有,是不是也可以连接到数据库服务器。
--
关注这一话题,想听听各位高手的意见^^
这里再提一下另外的问题:
1、如果使用oracle,只能使用jdbc-thin,因为jdbc-oci要求客户机安装有oracle的客户程序
2、jdbc驱动程序下载的问题,oracle的jdbc驱动程序相对拨号网络来说十分巨大,即使是局域网,浏览器处理1兆多的.zip文件还是比较慢,而且oracle得jdbc驱动程序还需要和一个nls_charset12_01.zip文件配合使用,这个文件有12兆。过去曾经在赛扬300、128兆内存的机器上用netscape对sybase进行实验(sybase的jconnect大约1兆),applet连同swing和jconnect地调入需要20分钟!
3、安全问题。上述的连接办法需要使用数据库的账号和密码,而且往往是写死在applet中。而大家知道applet得.class文件是可以下载和反编译的,这样密码和账号就会泄漏了。针对上述问题的解决办法有几种。
1、用socket协议写自己的c/s程序实现,前面也有人提到,缺点是传参数
2、用RMI远程方法调用来做,把数据库连接部分写作服务器上,缺点是IE似乎不支持;不过可以通过安装JAVA PLUGIN来解决。
3、不要用applet来做界面,而是使用纯web界面。即采用b/s模式,利用server/jsp来实现其中第3种方法是大势所趋,其优点十分突出:
1、对客户的端的配置和速度均无特别要求
2、客户机无需执行任何客户程序,即零客户机管理(applet更新时有时会出现客户机无法刷新)
3、服务器端伸缩性好,方便进行连接池、负载分担等设计