① 求,KETTLE怎么用OCI方式连接数据库ORACLE
Java程序连接oracle数据库时,用oci驱动要比用thin驱动性能好些。主要的区别是使用thin驱动时,不需要安装oracle的客户端,而使用oci时则要安装oracle的客户端。
从使用thin驱动切换到oci驱动在配置来说很简单,只需把连接字符串java:oracle:thin:@hostip:1521:实例名换为java:oracle:oci@本地服务名即可。如:
从
jdbc:oracle:thin:@10.1.1.2:1521:shdb
改成:
jdbc:oracle:oci8:@shdb
但这里这台机器需安装oracle数据库的客户端并配置本地服务名,同时还需指定NLS_LANG环境变量,NLS_LANG环境变量是用来控制客户端在显示oracle数据库的数据时所用的字符集和本地化习惯。通常把NLS_LANG的字符集部分指定为数据库所用的字符集,就不会存在java显示的乱码问题了。
对于oracle数据库客户端的安装,有二种选择,一是老实的用oracle数据库的安装光盘,安装对应版本的oracle客户端。二是下载oracle提取的即时客户端,即时客户端是不用安装的,把下载包解压即可。
要使java web正常的通过oci驱动访问oracle,还需要客户端正确的配置一下相关变量。主要如下:
对于windows系统并使用oracle客户端时:
1、把%ORACLE_HOME%\lib加到PATH环境变量。
2、把%ORACLE_HOME%\jdbc\lib\classes12.jar加到CLASSPATH环境变量里,也可以把classes12.jar拷贝到tomcat的comman\lib目录下。
对于windows系统并使用oracle的即时客户端时(假定即时客户端解压在d盘):
1、把d:\instantclient_10_2加到PATH环境变量;
2、把d:\instantclient_10_2\classes12.jar加到CLASSPATH环境变量里,也可以把classes12.jar拷贝到tomcat的comman\lib目录下。
对于linux系统并使用oracle客户端时:
1、在使用tomcat的用户主目录下的.bash_profile文件中加入:
exprot ORACLE_HOME=/u01/app/oracle/proct/9.2.0.4
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
2、把classes12.jar拷贝到tomcat的comman\lib目录下。
对于linux系统并使用oracle即时客户端时:
1、在使用tomcat的用户主目录下的.bash_profile文件中加入:
exprot ORACLE_HOME=/instantclient_10_2
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
2、把instantclient_10_2目录下的classes12.jar拷贝到tomcat的comman\lib目录下。
如果一个tomcat下带了几个应用,且几个应用都要连接oracle数据库时,则要注意的是,不要在每个应用的WEB-INF/lib目录下放入oracle的classes12.jar/zip文件。而应该把classes12.jar/zip文件放到tomcat的common/lib目录下。否则会出来ojdbclib9/10库重复加载的错误。
使用oracle即时客户端时,本地服务名的建立可以在目录instantclient_10_2下建立tnsnames.ora下添加连接串,如:
SHDB =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =
(PROTOCOL = TCP)(HOST = 10.1.1.236)(PORT = 1521)))
(CONNECT_DATA =(SERVICE_NAME = shdb)))
② oci驱动连接oracle数据库
<%
Dim conn
set conn=server.createobject("adodb.connection")
conn.Open "Provider=OraOLEDB.Oracle.1;Persist Security Info=True;User ID=dbo;Password=moaadmin;Data Source=mtas"
Set rs=Server.CreateObject("ADODB.Recordset")
'sqltext="select * from web_admin"
'rs.open sqltext,conn
%>
我的是oracle 9i
我的连接是这样写的!
希望对你有所帮助!
③ ocilib连接数据库怎么声明
1. ocilib的使用
利用ocilib操作oracle数据库
1) 首先初始化
OCI_Initialize(err_handler, NULL, OCI_ENV_THREADED)
这里的第一个参数是异常错误处理函数。
2) 创建连接
定义OCI_Connection* m_pConntion并为m_pConntion赋值。
m_pConntion = OCI_ConnectionCreate(csServerDataBase, csServerUser, csServerPassWord, OCI_SESSION_DEFAULT)
这里的第一个参数是oracle数据库ip,端口及名字组成的字符串,172.7.14.6:1521/ORCL。第二个参数是用户名,第三个参数是密码。
3) 由已得的oci_connection*创建OCI_Statement* m_stRow。
m_stRow = OCI_StatementCreate(m_pConntion)。之后的SQL语句均与这个oci_statement*有关。
4) 对于返回记录集的SQL语句。
OCI_ExecuteStmt(m_stRow, csSQL)。
这里第一个参数就是OCI_Statement* 的对象,也就是之前有oci_connection*所创建的。第二个参数就是要执行的SQL语句。如果要获取记录集,首先要定义一个记录集指针OCI_Resultset* rsRow,然后调用rsRow = OCI_GetResultset(m_stRow),这里的参数仍然是OCI_Statement* 基本上要执行SQL语句都会用到这个。然后可以调用OCI_FetchNext(rsRow)来获取记录集中下一个记录,如果配合while循环就可以遍历记录集。对于回去每一条记录的每个字段,要使用OCI_Get***,这里的***就是数据类型,常用的由OCI_GetInt,OCI_GetString,GetLob,OCI_GetDate OCI_GetTimestamp等等。
5) 对于没有记录集的操作,比如insert,可以使用上面的方法。Ocilib还提供了一种方式:bind方式。
对于这种方式,SQL语句也有一些小的变化,这里存在了占位的概念。比如这样的一个SQL语句:sqlInsert.Format("Insert into TableName(DeviceIndex,DrivewayNumber,DirectName,PlateInfo,PlateType,AlarmPlace,AlarmTime ,AlarmAction,VehicleSpeed,VehicleType,VehicleLen,VehicleColor,PlateColor,AlarmAdd,PicNum,PicFullView)values(:DeviceIndex,:DrivewayNumber,:DirectName,:PlateInfo,:PlateType,:AlarmPlace,:AlarmTime,:AlarmAction,:VehicleSpeed,:VehicleType,:VehicleLen,:VehicleColor,:PlateColor,:AlarmAdd,:PicNum,:PicfullView)"
这里的:DeviceIndex等都是随意起名字的,当然为了可读性,可以与字段起相同的名字,“:”一定要有的。
OCI_Prepare(m_stRow, sqlInsert.GetBuffer());这里的第一个参数仍然是oci_statement*。这句话也是必须的。之后就要将变量与字段名绑定在一起,比如:OCI_BindString(m_stRow, ":DeviceIndex", struAlarmTable.csDeviceIndex.GetBuffer(), 0);第二个参数就是前面SQL语句中占位变量的名字,第三个参数是要绑定到字段的具体的变量。可以绑定的类型由很多的。在每个字段都完成绑定后调用OCI_Execute(m_stRow),然后再调用OCI_Commit(m_pConntion),这样就完成了插入语句。当然这仅仅是插入一条数据,如果要进行批量绑定并插入,这里不做说明。
6) 退出时要记得释放资源
OCI_StatementFree(m_stRow)
OCI_ConnectionFree(m_pConntion);
④ java的oci方式连接数据库的问题
OCI 只是一种连接方式,既然你使用 Java 来做客户端程序,为什么要使用 Native 方式的驱动?
你应该使用 java:oracle:thin:@ 的 thin 协议来连接数据库。
OCI 本身是为 C++, VB 这样的程序准备的。Java 版本的程序建议使用 thin 协议的驱动。
Java 驱动有4种类型,type 1 - type 4,现在已经基本上普及了type 4驱动,几乎所有的厂商都提供 type 4驱动,它是说服务器端和驱动程序之间是厂商内部网络通信格式,驱动程序和 java 程序之间是纯 java。而依赖厂商的 DLL 的驱动就是 type 2,它是要求在当前 path 变量路径或 java.library.path 参数的路径上能找到 oracle 驱动程序的 DLL。所以如果你坚持使用 oci 驱动,你需要把 oracle 的 BIN 目录 (可能还有其它目录,反正有Oracle 的 DLL 的目录你都得确认一下)添加到 PATH 变量中。
而且要记得,type 2 驱动跟版本之间的依赖关系比较大,可能它要求特定版本的 DLL,而 type 2 则不同,它本身不依赖 dll,驱动与服务器之间本来就是纯 java 版的,它本身代替了DLL 的功能,所以版本依赖关系小。
你的 -Djava.library.path 的路径是真实存在的 oracle 客户端目录么?里面说的那个 dll 能找到么?你的程序中 println(System.getProperty("java.library.path")) 得到的结果是什么?
⑤ 有人用过oracle的oci么
oracle调用接口(oracle Call Interface简称oci)提供了一组可对oracle数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如c语言)中进行调用可达到存取oracle数据库的目的。
在普通的情况下,用户可以通过sql和PL/sql来访问数据库中的数据。oracle数据库除了提供sql和PL/sql来访问数据库外,还提供了一个第三代程序设计语言的接口,用户可以通过C、cobol、fortran等第三代语言来编程访问数据库。oci就是为了实现高级语言访问数据库而提供的接口。oci允许开发者在程序里使用sql和PL/sql来访问数据库。开发者可以使用第三代语言来编写程序,而使用oci来访问数据库。
oci是由一组应用程序开发接口(api)组成的,ORACLE提供api的方式是提供一组库。这组库包含一系列的函数调用。这组函数包含了连接数据库、调用SQL和事务控制等。在安装dbms server或者客户端的时候,就安装了OCI。
OCI开发方法实际上是将结构化查询语言(SQL)和第三代程序设计语言相结合的一种方法。对数据库的访问是通过调用OCI库函数实现的,若将C语言作为宿主语言,那么ORACLE数据库调用其实就是C程序中的函数调用,一个含OCI调用的C程序其实就是用C语言编写的应用程序。这样的程序既具有SQL语言非过程性的优点又具有C语言过程性的优点,同时还可具有SQL语言的扩展,PL/SQL语言过程性和结构性的优点,因此使得开发出的应用程序具有高度灵活。
⑥ 如何在c语言中编程访问数据库
第一种,数据库厂商提供的C变种,比如oracle的proc-c,简单点说,就是在C嵌入sql代码来实现数据库的访问。
第二种,数据库厂商提供的api,比如oracle的OCI。
⑦ oci 连接 oracle
ORACLE调用接口(Oracle Call Interface简称OCI)提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。
在普通的情况下,用户可以通过SQL和PL/SQL来访问数据库中的数据。ORACLE数据库除了提供SQL和PL/SQL来访问数据库外,还提供了一个第三代程序设计语言的接口,用户可以通过C、COBOL、FORTRAN等第三代语言来编程访问数据库。OCI就是为了实现高级语言访问数据库而提供的接口。OCI允许开发者在程序里使用SQL和PL/SQL来访问数据库。开发者可以使用第三代语言来编写程序,而使用OCI来访问数据库。
⑧ 我有个c程序,通过OCI访问数据库,但是报错了
无法解析指定的连接标识符
连接字符串有错误,你发上来大家看一下。