|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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#不一定都能做到。毕竟是抄袭吗。 |
|