仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 563|回复: 12
打印 上一主题 下一主题

[学习教程] JAVA教程之JSP+JDBC(Thin形式)毗连Oracle

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开js|oracle 在JSP中毗连到Oracle一样平常有2种体例:
  1、OracleJDBC的oci8体例
  2、OracleJDBC的thin体例
  我对照喜好第2种,由于WEB公布服务器与数据库服务器一样平常都不会放在统一台电脑中,而在利用thin体例毗连时,WEB服务器端不必安装oracle的客户端。
  在下手先代码之前,我们先把情况设置妥帖。先从安装了Oracle的数据库服务器中,找到Oracle安装目次,然后将该目次下的jdbclibclasses12.jar文件拷贝到WEB公布服务器的某个目次。假定就间接放在C:根目次下吧,然后把该路径增加到‘体系--初级--情况变量’中变量名为‘CLASSPATH’的值中,如:D:ProgramFilesSQLLIBjavadb2java.zip;D:ProgramFilesSQLLIBjavauntime.zip;c:classes12.jar;也就是让java可以找到这个包。
  设置好情况后,我们就入手下手入手下手下手写代码了。关于数据库毗连的代码,应当写个专门的毗连类来挪用,没需要想收集上有些文章那样,间接写到JSP的代码中。
  关于毗连的代码很复杂
privateConnectionnewConnection(Stringuser,Stringpassword){
Connectioncon=null;
try{
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
con=DriverManager.getConnection(“jdbc:oracle:thin:@192.168.96.1:1521:oracle9i”,user,password);
}
catch(SQLExceptione){
returnnull;
}
returncon;
}
  假如帐号暗码没有错,那这个函数就应当能前往个可用的毗连。但云云复杂的毗连在一个项目中利用,是远远达不到效果的。我们能够在这个数据库毗连类中到场更多的功效,如毗连池等等。上面我就把该数据库毗连类的代码具体的列出来,人人能够参考参考。
/*
*@Title公司网站
*@Author:zf
*@Version1.0
*@Memo:界说数据库毗连及其数据库毗连池等
*/
packagecom.kingson.db;
importjava.io.*;
importjava.sql.*;
importjava.util.*;
importjava.util.Date;
publicclassDBConnectionManager{
staticprivateDBConnectionManagerinstance;//独一实例
staticprivateintclients;
privateVectordrivers=newVector();
privatePrintWriterlog;
privateHashtablepools=newHashtable();
/**
*前往独一实例.假如是第一次挪用此办法,则创立实例
*
*@returnDBConnectionManager独一实例
*/
staticsynchronizedpublicDBConnectionManagergetInstance(){
if(instance==null){
instance=newDBConnectionManager();
}
clients++;
returninstance;
}
/**
*建构函数公有以避免别的对象创立本类实例
*/
privateDBConnectionManager(){
init();
}
/**
*将毗连对象前往给由名字指定的毗连池
*
*@paramname在属性文件中界说的毗连池名字
*@paramcon毗连对象
*/
publicvoidfreeConnection(Stringname,Connectioncon){
DBConnectionPoolpool=(DBConnectionPool)pools.get(name);
if(pool!=null){
pool.freeConnection(con);
}
}
/**
*取得一个可用的(余暇的)毗连.假如没有可用毗连,且已有毗连数小于最年夜毗连数
*限定,则创立并前往新毗连
*
*@paramname在属性文件中界说的毗连池名字
*@returnConnection可用毗连或null
*/
publicConnectiongetConnection(Stringname){
DBConnectionPoolpool=(DBConnectionPool)pools.get(name);
if(pool!=null){
returnpool.getConnection();
}
returnnull;
}
/**
*取得一个可用毗连.若没有可用毗连,且已有毗连数小于最年夜毗连数限定,
*则创立并前往新毗连.不然,在指定的工夫内守候别的线程开释毗连.
*
*@paramname毗连池名字
*@paramtime以毫秒计的守候工夫
*@returnConnection可用毗连或null
*/
publicConnectiongetConnection(Stringname,longtime){
DBConnectionPoolpool=(DBConnectionPool)pools.get(name);
if(pool!=null){
returnpool.getConnection(time);
}
returnnull;
}
/**
*封闭一切毗连,打消驱动程序的注册
*/
publicsynchronizedvoidrelease(){
//守候直到最初一个客户程序挪用
if(--clients!=0){
return;
}
EnumerationallPools=pools.elements();
while(allPools.hasMoreElements()){
DBConnectionPoolpool=(DBConnectionPool)allPools.nextElement();
pool.release();
}
EnumerationallDrivers=drivers.elements();
while(allDrivers.hasMoreElements()){
Driverdriver=(Driver)allDrivers.nextElement();
try{
DriverManager.deregisterDriver(driver);
log("打消JDBC驱动程序"+driver.getClass().getName()+"的注册");
}
catch(SQLExceptione){
log(e,"没法打消以下JDBC驱动程序的注册:"+driver.getClass().getName());
}
}
}
/**
*依据指定属性创立毗连池实例.
*
*@paramprops毗连池属性
*/
privatevoidcreatePools(Propertiesprops){
EnumerationpropNames=props.propertyNames();
while(propNames.hasMoreElements()){
Stringname=(String)propNames.nextElement();
if(name.endsWith(".url")){
StringpoolName=name.substring(0,name.lastIndexOf("."));
Stringurl=props.getProperty(poolName+".url");
if(url==null){
log("没无为毗连池"+poolName+"指定URL");
continue;
}
Stringuser=props.getProperty(poolName+".user");
Stringpassword=props.getProperty(poolName+".password");
Stringdbip=props.getProperty(poolName+".db_ip","192.168.96.1");
Stringdbport=props.getProperty(poolName+".db_port","1521");
Stringdbuid=props.getProperty(poolName+".db_uid","ORACLE9I");
Stringmaxconn=props.getProperty(poolName+".maxconn","0");
//毗连信息
StringdbInfo=user+"/"+password+"@"+dbip+":"+dbport+":"+dbuid;
intmax;
try{
max=Integer.valueOf(maxconn).intValue();
}
catch(NumberFormatExceptione){
log("毛病的最年夜毗连数限定:"+maxconn+".毗连池:"+poolName);
max=0;
}
DBConnectionPoolpool=newDBConnectionPool(poolName,url,dbInfo,max);
pools.put(poolName,pool);
log("乐成创立毗连池"+poolName);
}
}
}
/**
*读取属性完成初始化
*/
privatevoidinit(){
InputStreamis=getClass().getResourceAsStream("db.properties");
PropertiesdbProps=newProperties();
try{
dbProps.load(is);
}
catch(Exceptione){
System.err.println("不克不及读取属性文件."+
"请确保db.properties在CLASSPATH指定的路径中");
return;
}
StringlogFile=dbProps.getProperty("logfile","newslog.txt");
try{
log=newPrintWriter(newFileWriter(logFile,true),true);
}
catch(IOExceptione){
System.err.println("没法翻开日记文件:"+logFile);
log=newPrintWriter(System.err);
}
loadDrivers(dbProps);
createPools(dbProps);
}
/**
*装载和注册一切JDBC驱动程序
*
*@paramprops属性
*/
privatevoidloadDrivers(Propertiesprops){
StringdriverClasses=props.getProperty("driver");
StringTokenizerst=newStringTokenizer(driverClasses);
while(st.hasMoreElements()){
StringdriverClassName=st.nextToken().trim();
try{
Driverdriver=(Driver)
Class.forName(driverClassName).newInstance();
DriverManager.registerDriver(driver);
drivers.addElement(driver);
log("乐成注册JDBC驱动程序"+driverClassName);
}
catch(Exceptione){
log("没法注册JDBC驱动程序:"+
driverClassName+",毛病:"+e);
}
}
}
/**
*将文本信息写进日记文件
*/
privatevoidlog(Stringmsg){
log.println(newDate()+":"+msg);
}
/**
*将文本信息与非常写进日记文件
*/
privatevoidlog(Throwablee,Stringmsg){
log.println(newDate()+":"+msg);
e.printStackTrace(log);
}
/***************毗连池类*************************************************/
/**
*此外部类界说了一个毗连池.它可以依据请求创立新毗连,直到预定的最
*年夜毗连数为止.在前往毗连给客户程序之前,它可以考证毗连的无效性.
*/
classDBConnectionPool{
privateintcheckedOut;
privateVectorfreeConnections=newVector();
privateintmaxConn;
privateStringname;
privateStringURL;
privateStringdbInfo;
/**
*创立新的毗连池
*
*@paramname毗连池名字
*@paramURL数据库的JDBCURL
*@paramdbInfo数据库毗连信息
*@parammaxConn此毗连池同意创建的最年夜毗连数
*/
publicDBConnectionPool(Stringname,StringURL,StringdbInfo,intmaxConn){
this.name=name;
this.URL=URL;
this.dbInfo=dbInfo;
this.maxConn=maxConn;
}
/**
*将不再利用的毗连前往给毗连池
*
*@paramcon客户程序开释的毗连
*/
publicsynchronizedvoidfreeConnection(Connectioncon){
//将指定毗连到场到向量开端
freeConnections.addElement(con);
checkedOut--;
notifyAll();
}
/**
*从毗连池取得一个可用毗连.如没有余暇的毗连且以后毗连数小于最年夜毗连
*数限定,则创立新毗连.如本来挂号为可用的毗连不再无效,则从向量删除之,
*然后递回挪用本人以实验新的可用毗连.
*/
publicsynchronizedConnectiongetConnection(){
Connectioncon=null;
if(freeConnections.size()>0){
//猎取向量中第一个可用毗连
con=(Connection)freeConnections.firstElement();
freeConnections.removeElementAt(0);
try{
if(con.isClosed()){
log("从毗连池"+name+"删除一个有效毗连");
//递回挪用本人,实验再次猎取可用毗连
con=getConnection();
}
}
catch(SQLExceptione){
log("从毗连池"+name+"删除一个有效毗连");
//递回挪用本人,实验再次猎取可用毗连
con=getConnection();
}
}
elseif(maxConn==0||checkedOut<maxConn){
con=newConnection();
}
if(con!=null){
checkedOut++;
}
returncon;
}
/**
*从毗连池猎取可用毗连.能够指定客户程序可以守候的最长工夫
*拜见前一个getConnection()办法.
*
*@paramtimeout以毫秒计的守候工夫限定
*/
publicsynchronizedConnectiongetConnection(longtimeout){
longstartTime=newDate().getTime();
Connectioncon;
while((con=getConnection())==null){
try{
wait(timeout);
}
catch(InterruptedExceptione){}
if((newDate().getTime()-startTime)>=timeout){
//wait()前往的缘故原由是超时
returnnull;
}
}
returncon;
}
/**
*封闭一切毗连
*/
publicsynchronizedvoidrelease(){
EnumerationallConnections=freeConnections.elements();
while(allConnections.hasMoreElements()){
Connectioncon=(Connection)allConnections.nextElement();
try{
con.close();
log("封闭毗连池"+name+"中的一个毗连");
}
catch(SQLExceptione){
log(e,"没法封闭毗连池"+name+"中的毗连");
}
}
freeConnections.removeAllElements();
}
/**
*创立新的毗连
*/
privateConnectionnewConnection(){
Connectioncon=null;
try{
con=DriverManager.getConnection(URL+dbInfo);
log("毗连池"+name+"创立一个新的毗连");
}
catch(SQLExceptione){
log(e,"没法创立以下URL的毗连:"+URL);
returnnull;
}
returncon;
}

}
}




市场分额,java比asp高一点,因为C#是仿照java开发的,所以哦C#能做的java都能做到,但是java能做的,C#不一定都能做到。毕竟是抄袭吗。
金色的骷髅 该用户已被删除
沙发
发表于 2015-1-18 17:11:36 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
变相怪杰 该用户已被删除
板凳
发表于 2015-1-22 16:24:47 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
飘灵儿 该用户已被删除
地板
发表于 2015-1-25 12:56:24 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
飘飘悠悠 该用户已被删除
5#
发表于 2015-1-26 12:56:30 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
admin 该用户已被删除
6#
发表于 2015-1-31 20:15:09 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
第二个灵魂 该用户已被删除
7#
发表于 2015-2-6 09:55:19 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
因胸联盟 该用户已被删除
8#
发表于 2015-2-14 11:48:46 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
活着的死人 该用户已被删除
9#
发表于 2015-3-4 06:04:54 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-7 22:38:49 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
老尸 该用户已被删除
11#
发表于 2015-3-8 12:08:28 | 只看该作者
是一种突破用户端机器环境和CPU
冷月葬花魂 该用户已被删除
12#
 楼主| 发表于 2015-3-15 22:31:18 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
山那边是海 该用户已被删除
13#
发表于 2015-3-22 17:10:58 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-16 18:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表