oracle jdbc中getConnection中的参数如何配置才能获得连接,

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle jdbc中getConnection中的参数如何配置才能获得连接,相关的知识,希望对你有一定的参考价值。

JDBC无所谓Oracle还是DB2的, 获取connection的通用步骤如下

       try
        
                 Class.forName("oracle.jdbc.driver.OracleDriver");
                 con=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:name", "scott","tiger");
                 st=con.createStatement();
                 rs=st.executeQuery(sql);
                 while(rs.next())
                 
                            System.out.println(rs.getInt("id"));
                            System.out.println(rs.getString("name"));
                 
       catch(Exception e) 
           ...
       

参考技术A 安装和在Linux机器上运行总结甲骨文:甲骨文在去年年底宣布,与移植的Oracle 8 Oracle应用服务器到Linux。这是一个明确无误的迹象:全世界都应该认识到,Linux已经严重操作系统,足以承担企业级应用程序。乌切Ogbuji将介绍以下如何安装,配置和初次使用的Oracle 8的Linux操作系统。

如何

安装和运行的Oracle

<BR

实用指南经过许多谣言和提示/后>你的Linux机器,1998年甲骨文在10月7日发布Oracle 8的数据库在Linux和Oracle应用服务器。这是最近期的Linux的场面令人眼花缭乱的历史。

无论在甲骨文公司,在大规模数据应用领域的公司的巨大的声誉如何使这个产品发布成为了一个明白无误的标志您的个人看法:全世界都应该认识到,Linux已经是一个严肃的操作系统,足以承载企业级应用程序。

但是,任何人谁真正关心的Linux的各种活动只是独奏,只有代码是至关重要的。 (只有代码事项译注:实际上,Oracle 8i中,即8.1.5对Linux已经研制成功,但JServer模块之一有问题,所以甲骨文尚未公布。)

开始行动安装Oracle在RedHat可以很容易的,但如果完全遵循Oracle的文档可能不那么容易走的。最快的捷径就是汤姆·比塞特的主页:

http://jordan.fortwayne.com/oracle 。

如果你看看Tom的主页,你会发现,他错过了JDBC的安装。如果您准备使用的JDBC(对于跨平台的Oracle应用程序是非常方便),只需在安装屏幕要求您选择的组件(组件),加上该选项。当然,你应该先安装JDK。我个人使用的彩虹JDK 1.1.7。 (译注:红帽包括JDK),那么你需要设置oracle用户的环境变量CLASSPATH中,最好的办法是在bash_profile文件oracle用户配置文件目录或添加:..

CLASSPATH = / usr / lib中/ JDK / lib中/ CLASSES.ZIP;出口的CLASSPATH然后,如果你只是做网页的Applet,那么如果安装程序“选择JDBC组件”时,选择“JDK 1.1 JDBC瘦驱动程序”,你需要做一个完整的Java应用程序,选择“JDK 1.1 JDBC OCI驱动程序”。

另外,请注意:安装程序允许你每次都输入密码,如果密码不符合规格没有警告。当我第一次安装时,口令里加,“。”这是允许在UNIX中,甲骨文又是另一回事。直到安装结束,程序告诉我密码的问题。当它是安全的,我做了一个从无到有的安装。

另一个问题是,安装程序不会尝试建立一个目录往来复制文件。安装

MKDIR-P / u01/app/oracle/product/8.0.5/doc/server.805/install前必要的。

这一关的故事结束后。

安装成功后,您必须以root身份登录,运行root.sh.我root.sh进行了如下:

·LBIN环境,从/ usr / lbin中的变量到/ usr / local / bin目录

·增加环境变量LOG = / tmp目录/ ORACLE-root.sh。日志,结果将被记录在这个脚本

root.sh被提及,为了作为服务器数据库上运行,您必须先设定TWO_TASK变量;

但是,事实上,如果甲骨文运行root.sh从机器的安装,无需设置此变量。

Python和Oracle

我配置了一个小蟒蛇(翻译:一个功能强大,快速的面向对象的脚本语言),来测试Oracle编程接口和网络接口。在python来连接Oracle,需要数码创意(Zope应用程序服务器的作者)DCOracle模块。

您只需下载软件并按照指示做就行了。如果DCOracle 1.1.0,使用setup-8.0.4的配置,删除从ORACLE_LIBS可变lsocket,-lnsl,-LGEN,-lelf,-laio和-lposix4可以,这些都是特定于Solaris的。注意的Redhat 5.2和6.0安装的python设置不全,config目录,其中包括被省略目录,编译器不能安装第三方模块。你需要编译的python或者下载一个合适的转速。 Python中找到RPM,最好的地方可能是奥利弗安德里克的的Python和Linux主页。

刚转-E - nodeps在蟒蛇,然后转 - 我蟒蛇,蟒蛇-dev的和可以其他的RPM。

安装蟒蛇后,我运行下面的基本查询,访问Oracle。

[乌切@马拉泰斯塔乌切] $蟒蛇

的Python 1.5.1(#1,1998年9月3日,22时51分17秒)[GCC 2.7.2.3]关于linux-I386 版权所有1991-1995斯蒂廷Mathematisch Centrum公司,阿姆斯特丹

>>>进口DCOracle

>>>#连接到数据库。斯科特/老虎是测试数据库的用户名/密码

>>> DBC = DCOracle.Connect(“斯科特/老虎@斯福尔扎”)#斯福尔扎是当地

>>> C = dbc.cursor()

>>> c.execute(“SELECT * FROM EMP WHERE EMP.DEPTNO = 10”)

>>>行= c.fetchall()>>>喷印行数

[(7782,CLARK,经理,7839,dbiDate(1981年6月9日00:00:00),2450.0,

无,10),

(7839,国王,主席,无,dbiDate(1981年11月17日00:00:00),5000.0,

无,10),

(7934,MILLER,秘书,7782,dbiDate(1982 -01-23 00:00:00),1300.0,

无,10)]

开发工作站配置

我在上一个数据库服务器机比编译和安装Python和其他编程接口等。起初,我不得不安装Oracle似乎所有的PRO * C / C + +封装。但Oracle安装程序应该运行尚未有够麻烦的,所以我不希望出现这种情况。所以,我写一个程序来找到需要限制

头文件(包括)最低,目标文件(对象)和库(库):

$ ORACLE_HOME / lib中/ *

$ ORACLE_HOME / RDBMS /演示/ *

$ ORACLE_HOME / RDBMS / lib中/ *

我的机器设置ORACLE_HOME为/ usr /本地/ ORACLE上。

请注意,这些文件不能让你嵌入SQL语句在C程序中,只有一个完整的安装PRO * C / C + +的工作之后。如果你希望Java那么必须增加$ ORACLE_HOME / JDBC / lib中/ *;注意这个目录CLASSPATH变量。

JDBC连接

要测试JDBC连接,我做了一个小程序来测试库中显示所有员工的名字在列表框中。下面的程序是调用JDBC的Java小程序,程序2是调用JAVA程序的html超文本。如果你的JDBC已经成功安装,该程序的副本JDBCTest.java,该程序为JDBCTest.html的两个副本,

然后:

javac的JDBCTest.java appletviewer的JDBCTest。 HTML

您可以看到自己是如何的结果:

方案一:

/ *读取几个

小程序。从远程Oracle数据库

行,并将其显示在一个列表框

* /

进口的java.sql *;。

导入java.awt中的*;。

进口java.applet中*;。

导入java.lang中的*;。

公共类JDBCTest扩展Applet的

/ /单选列表框

私人房产employee_list =新名单(5,假)

公共无效的init()

的setLayout(新的BorderLayout());

尝试

/ /设置Oracle的JDBC驱动程序

DriverManager.registerDriver(新oracle.jdbc.driver.OracleDriver( ));

/ /连接到机器上斯福扎Oracle数据库,使用用户名

/ /“斯科特”和密码“;老虎”

连接DB_conn = DriverManager.getConnection

( “的jdbc:oracle的:瘦:@斯福尔扎:1521:ORCL”,“斯科特”,“虎”);

/ /连接DB_conn = DriverManager.getConnection

(“的jdbc:oracle的:瘦:斯科特/老虎@斯福尔扎:1521:ORCL“);

/ /创建一个JDBC语句对象

)声明statement_obj = DB_conn.createStatement(;

/ /执行查询,从拿到员工姓名测试数据库

ResultSet的结果= statement_obj.executeQuery(“从

EMP选择易名”);

/ /填充

所有员工姓名列表框中,同时(results.next( ))

employee_list.add(results.getString(1));



赶上(的SQLException五)

抛出新的RuntimeException(“SQL异常”+ E。的getMessage());



添加(employee_list);


的 http://oracle.chinaitlab.com/install/520180.html

JDBC在getConnection之前为什么要调用Class.forName(转)

获取一个数据库连接的通用模板如下:

String driver = "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String user = "scott";
String password = "ticmy";
Class.forName(driver);
Connection conn = DriverManager.getConnection(url, user, password);

里面有个Class.forName(driver),这句话有什么作用?将驱动类load到内存?如果没有这句会怎么样?运行发现,如果去掉这一句会有以下异常:
java.sql.SQLException: No suitable driver found for xxx….

在解释具体原因之前先简单看下Class.forName做了什么。

假设一个类以前从来没有被装进内存过,Class.forName(String className)这个方法会做以下几件事情:
1、装载。将字节码读入内存,并产生一个与之对应的java.lang.Class类对象
2、连接。这一步会验证字节码,为static变量分配内存,并赋默认值(0或null),并可选的解析符号引用(这里不理解没关系)
3、初始化。为类的static变量赋初始值,假如有static int a = 1;这个将a赋值为1的操作就是这个时候做的。除此之外,还要调用类的static块。(这一步是要点)

Class.forName(String className)方法会将这三步都做掉,如下面的例子:

package com.ticmy.oracle;
 
public class TestClinit {
    public static void main(String[] args) throws Exception {
        Class.forName("com.ticmy.oracle.ABC");
    }
}
class ABC {
    private static int a = getNum();
    static {
        System.out.println("this is static block");
    }
    public static int getNum() {
        System.out.println("getNum");
        return 1;
    }
}

程序的运行结果是:
getNum
this is static block

那么,Class.forName(driver)这个driver类里有没有什么static块呢?去探究一下。例子用的是Oracle,反编译下oracle.jdbc.OracleDriver,发现其继承了oracle.jdbc.driver.OracleDriver,那么继续看这个oracle.jdbc.driver.OracleDriver,确实有个static块,里面有这样的代码:

static {
    Timestamp localTimestamp = Timestamp.valueOf("2000-01-01 00:00:00.0");
    try {
      if (defaultDriver == null) {
        defaultDriver = new OracleDriver();
        DriverManager.registerDriver(defaultDriver);
      }
    } catch (RuntimeException localRuntimeException) {
    } catch (SQLException localSQLException){}
    _Copyright_2004_Oracle_All_Rights_Reserved_ = null;
}

再看看mysql吧:com.mysql.jdbc.Driver:
同样发现了static块,里面代码如下:

static {
    try {
      DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
      throw new RuntimeException("Can‘t register driver!");
    }
}

再看一个db2:com.ibm.db2.jcc.DB2Driver:
也发现了static块:

static {
    if (o.Nb != null) {
      exceptionsOnLoadDriver__ = dg.a(o.Nb, exceptionsOnLoadDriver__);
    }
 
    try {
      registeredDriver__ = new DB2Driver();
      DriverManager.registerDriver(registeredDriver__);
    }
    catch (SQLException localSQLException) {
      exceptionsOnLoadDriver__ = new SqlException(null,
      "Error occurred while trying to register Jcc driver with JDBC 1 Driver Manager");
      exceptionsOnLoadDriver__.setNextException(localSQLException);
    }
}

无一例外地,发现里面都有DriverManager.registerDriver(driver)的调用。那么是不是可以将开头的例子中的Class.forName换成DriverManager.registerDriver呢?

String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
String user = "scott";
String password = "ticmy";
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
conn.close();

经过测试发现OK。现在,已经知道Class.forName(driver)的根本目的就是为了调用DriverManager.registerDriver。

Class.forName还有个重载的方法:Class.forName(String name, boolean initialize, ClassLoader loader),Class.forName(String className)就等价于Class.forName(className, true, currentLoader),注意中间的参数为true,这个参数的含义就是要不要初始化。如果此参数为true且指定的类以前没有被初始化过,就会去初始化。

另外,jdbc4已经不需要显式的调用Class.forName了,在jdbc4中,调用getConnection的时候DriverManager会自动去加载合适的驱动。
http://www.ticmy.com/?p=249

以上是关于oracle jdbc中getConnection中的参数如何配置才能获得连接,的主要内容,如果未能解决你的问题,请参考以下文章

关于jdbc的数据库驱动类DriverManager.getConnection()参数

jdbc的数据库驱动类DriverManager.getConnection()详解

JDBC在getConnection之前为什么要调用Class.forName(转)

jdbc连接oracle语法

通过 JDBC (oracle) 创建触发器

使用 Oracle 瘦客户端和 jdbc 强制加密网络流量?