通过OCI封装类实现数据库的快速访问
基于OCI的空间数据访问

图 1 对象关系数据库存储空间数据的存储模型 图 1 中,特征表 (Feature Table) 对应着一个特征类,特 征是具有几何属性的几何对象。特征表中包含许多特征,每 个特征在特征表中用一行表示,它包含一些数目的几何属性,
主要是根据空间对象在oracle数据库中的存储结构对相应的部分进行查询分析和处理在oraclespatial的对象关系模型中空间数据是被作为几何对象来处理的因此在我们的程序中也引入面向对象的思想把对空间数据的操作转化成对对象属性的操作
电脑编程技巧与维护
基于 OCI 的空间数据访问
邵晓芳 1,刘纯贵 2,杨泽刚 3
(dvoid*) &dtype, (ub4 *) 0, (ub4) OCI_AT- TR_DATA_TYPE,errhp )) ; IOraConnection::checkerr ( errhp,OCIAttrGet ( ( dvoid*) parmdp, OCI_DTYPE_PARAM, ( dvoid** ) &col_name, ( ub4 *) &col_name_len, (ub4) OCI_ATTR_NAME,errhp )) ;
{ bool IsEquals; char query [300] ; sword status;
ub2 dtype; OCIDefine *defnp=NULL; OCIParam *parmdp; … sprintf (query, " select A.%s FROM %s A,%s B where A.%s= '%s' and B.%s='%s' \and SDO_RELATE ( A.% s,B.% s,'mask =EQUAL \querytype = WINDOW') ='TRUE'" ,row_name,table1,table2,row_name,ge- om1,row_name, geom2,geom_column,geom_column) ; //建立查询语句 IOraConnection::checkerr (errhp, OCIStmtPrepare (stmthp, errhp, (text *) query, (ub4) strlen (query) , (ub4) OCI_NTV_SYN- TAX, (ub4) OCI_DEFAULT)) ; // 解析查询语句 IOraConnection::checkerr (errhp,OCIStmtExecute (svchp, stmthp, errhp, (ub4) 1, (ub4) 0, (OCISnapshot *) NULL, (O- CISnapshot *) NULL, OCI_DESCRIBE_ONLY)) ; //取得选项列表 (用户需要查询的信息列表) 的信息 IOraConnection::checker (errhp,OCIParamGet ((dvoid*) stmthp, OCI_HTYPE_STMT,errhp,&parmdp, 1)) ; IOraConnection::checkerr ( errhp,OCIAttrGet ( ( dvoid*) parmdp, OCI_DTYPE_PARAM,
oci后缀

oci后缀OCI后缀是指Object Connector Interface的简称,是Oracle公司推出的一种数据库连接技术。
通过OCI,开发人员可以使用各种编程语言与Oracle数据库进行交互,实现数据的读取、写入和修改等操作。
本文将介绍OCI后缀的概念、优势以及使用方法。
一、概念介绍OCI后缀即Object Connector Interface,它是Oracle数据库提供的一种应用编程接口,用于实现程序与数据库的连接和交互。
通过OCI后缀,开发者可以使用C、C++等编程语言来编写与Oracle数据库的应用程序,实现数据的访问和操作。
二、优势分析1. 高性能:OCI后缀采用了Oracle数据库底层的C语言接口,能够直接与数据库进行交互,因此具有较高的性能优势。
相比其他的数据库连接方式,OCI可以更高效地对数据库进行读写操作,提供更好的响应速度和并发性能。
2. 数据安全:OCI后缀支持使用Oracle数据库的安全特性,如数据加密、访问控制等,可以有效保护数据库中的数据安全。
开发者可以通过OCI来实现对敏感数据的加密处理,避免数据泄露和非法访问。
3. 多语言支持:OCI后缀提供了对多种编程语言的支持,如C、C++等。
这意味着开发者可以根据自己的编程习惯和需求,选择合适的编程语言来编写与Oracle数据库的应用程序。
同时,OCI还提供了一系列的开发工具和文档,方便开发者进行开发和调试。
三、使用方法1. 安装OCI驱动程序:在开始使用OCI后缀之前,首先需要安装相应的OCI驱动程序。
可以从Oracle官方网站下载并安装最新的OCI驱动程序,根据操作系统和编程语言选择合适的版本。
2. 配置连接参数:在编写OCI应用程序时,需要正确配置连接参数。
包括数据库的地址、端口、用户名、密码等信息。
使用OCI提供的API或者相关库函数,可以方便地进行连接参数的配置和管理。
3. 连接数据库:使用OCI提供的连接函数,可以与Oracle数据库建立起连接。
Oracle数据库连接的几种方式

Oracle数据库连接的⼏种⽅式⼀、本地通过JDBC获得Oracle数据库连接通过JDBC获得Oracle数据库连接,有三种⽅式:OCI⽅式、thin⽅式和JdbcOdbc桥⽅式。
OCI⽅式依赖于本地的动态链接库,如果在本地安装了Oracle数据库客户端可以采⽤该⽅式;⽽thin⽅式为纯java的数据库连接⽅式;JdbcOdbc桥⽅式依赖于本地ODBC数据库源的配置,这种⽅式⼀般不太被采⽤。
1、OCI⽅式 先在本地安装Oracle客户端,安装完之后,在安装的路径中可以找到…/jdbc/lib/classes12.zip⽂件,我们在环境变量classpath中设置classes12.zip所在的路径。
然后通过以下的数据库连接类,在本地通过OCI⽅式获得Oracle数据库连接。
/*** 在本地获得数据库连接*/package com.j2ee.db;import java.util.*;import java.sql.*;import javax.sql.*;import java.io.*;import oracle.jdbc.driver.*;import javax.naming.*;/*** 通过OCI⽅式获得Oracle数据库连接*/public class DbConnection{ final static String sDBDriver = "oracle.jdbc.driver.OracleDriver"; final static String sConnStr = "jdbc:oracle:oci8:sr/sr@ora199"; /** * */ public DbConnection() { } /** * 获得Oracle数据库连接 */ public java.sql.Connection connectDbByOci() { java.sql.Connection conn=null; try { Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; }}/*** 在本地获得数据库连接*/package com.j2ee.db;import java.util.*;import java.sql.*;import javax.sql.*;import java.io.*;import oracle.jdbc.driver.*;import javax.naming.*;/*** 通过thin⽅式获得Oracle数据库连接*/public class DbConnection{ private String sConnStr = ""; /** * 缺省构造器 */ public DbConnection() { sConnStr = "jdbc:oracle:thin:@10.1.4.199:1521:ora199"; } /** * @param ip,serviceName */ public DbConnection(String ip,String serviceName) { sConnStr = "jdbc:oracle:thin:@"+ip+":1521:"+serviceName; } /** * 通过thin⽅式获得Oracle数据库的连接. */ public java.sql.Connection connectDbByThin() { java.sql.Connection conn=null; try { Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr,"sr","sr"); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; } /** * 通过thin⽅式获得Oracle数据库的连接. * @param userId,password */ public java.sql.Connection connectByJdbc(String userId,String password) { java.sql.Connection conn=null; try { Class.forName(sDBDriver); conn = DriverManager.getConnection(sConnStr,userId,password); } catch (Exception e) { System.out.println("ERROR:"+e.getMessage()); } return conn; }} 这种⽅式运⽤起来⽐较灵活,简单,具有较强的移植性和适⽤性。
C# SQLite数据库 访问封装类

C# SQLite数据库访问封装类C# 异常处理(Catch Throw)IL分析在客户端配置文件<configuration>节点下,添加:[html] view plain copy 在CODE上查看代码片派生到我的代码片<connectionStrings><add name="localdb" connectionString="Data Source=config/local.db;Version=3;UseUTF16Encoding=True;"providerName="System.Data.SQLite.SQLiteFactory"/></connectionStrings>其中【localdb】是本地SQLite数据库的名称,【config/local.db】是在当前程序运行目录下SQLite数据库位置C# SQLite数据库访问封装类代码:[csharp] view plain copy 在CODE上查看代码片派生到我的代码片/// <summary>/// 本类为SQLite数据库帮助静态类,使用时只需直接调用即可,无需实例化/// </summary>public static class SQLiteHelper{// Application.StartupPathpublic static string LocalDbConnectionString = ConfigurationManager.ConnectionStrings["localdb"].ConnectionString;#region ExecuteNonQuery/// <summary>/// 执行数据库操作(新增、更新或删除)/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="cmd">SqlCommand对象</param>/// <returns>所受影响的行数</returns>public static int ExecuteNonQuery(string connectionString, SQLiteCommand cmd){int result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, mandType, mandText);try{result = cmd.ExecuteNonQuery();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}/// <summary>/// 执行数据库操作(新增、更新或删除)/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <returns>所受影响的行数</returns>public static int ExecuteNonQuery(string connectionString, string commandText, CommandType commandType){int result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteCommand cmd = new SQLiteCommand();using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, commandType, commandText);try{result = cmd.ExecuteNonQuery();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}/// <summary>/// 执行数据库操作(新增、更新或删除)/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <param name="cmdParms">SQL参数对象</param>/// <returns>所受影响的行数</returns>public static int ExecuteNonQuery(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms){int result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteCommand cmd = new SQLiteCommand();using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, commandType, commandText);try{result = cmd.ExecuteNonQuery();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}#endregion#region ExecuteScalar/// <summary>/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="cmd">SqlCommand对象</param>/// <returns>查询所得的第1行第1列数据</returns>public static object ExecuteScalar(string connectionString, SQLiteCommand cmd){object result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, mandType, mandText);try{result = cmd.ExecuteScalar();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}/// <summary>/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <returns>查询所得的第1行第1列数据</returns>public static object ExecuteScalar(string connectionString, string commandText, CommandType commandType){object result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteCommand cmd = new SQLiteCommand();using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, commandType, commandText);try{result = cmd.ExecuteScalar();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}/// <summary>/// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <param name="cmdParms">SQL参数对象</param>/// <returns>查询所得的第1行第1列数据</returns>public static object ExecuteScalar(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms){object result = 0;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteCommand cmd = new SQLiteCommand();using (SQLiteConnection con = new SQLiteConnection(connectionString)){SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, true, commandType, commandText);try{result = cmd.ExecuteScalar();mit();}catch (Exception ex){trans.Rollback();throw ex;}}return result;}#endregion#region ExecuteReader/// <summary>/// 执行数据库查询,返回SqlDataReader对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="cmd">SqlCommand对象</param>/// <returns>SqlDataReader对象</returns>public static DbDataReader ExecuteReader(string connectionString, SQLiteCommand cmd){DbDataReader reader = null;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, mandType, mandText);try{reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);}catch (Exception ex){throw ex;}return reader;}/// <summary>/// 执行数据库查询,返回SqlDataReader对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <returns>SqlDataReader对象</returns>public static DbDataReader ExecuteReader(string connectionString, string commandText, CommandType commandType){DbDataReader reader = null;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteCommand cmd = new SQLiteCommand();SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, commandType, commandText);try{reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);}catch (Exception ex){throw ex;}return reader;}/// <summary>/// 执行数据库查询,返回SqlDataReader对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <param name="cmdParms">SQL参数对象</param>/// <returns>SqlDataReader对象</returns>public static DbDataReader ExecuteReader(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms){DbDataReader reader = null;if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || mandText.Length == 0)throw new ArgumentNullException("commandText");SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteCommand cmd = new SQLiteCommand();SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms);try{reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);}catch (Exception ex){throw ex;}return reader;}#endregion#region ExecuteDataSet/// <summary>/// 执行数据库查询,返回DataSet对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="cmd">SqlCommand对象</param>/// <returns>DataSet对象</returns>public static DataSet ExecuteDataSet(string connectionString, SQLiteCommand cmd){DataSet ds = new DataSet();SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, mandType, mandText);try{SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);sda.Fill(ds);}catch (Exception ex){throw ex;}finally{if (cmd.Connection != null){if (cmd.Connection.State == ConnectionState.Open){cmd.Connection.Close();}}}return ds;}/// <summary>/// 执行数据库查询,返回DataSet对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <returns>DataSet对象</returns>public static DataSet ExecuteDataSet(string connectionString, string commandText, CommandType commandType){if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");DataSet ds = new DataSet();SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteCommand cmd = new SQLiteCommand();SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, commandType, commandText);try{SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);sda.Fill(ds);}catch (Exception ex){throw ex;}finally{if (con != null){if (con.State == ConnectionState.Open){con.Close();}}}return ds;}/// <summary>/// 执行数据库查询,返回DataSet对象/// </summary>/// <param name="connectionString">连接字符串</param>/// <param name="commandText">执行语句或存储过程名</param>/// <param name="commandType">执行类型</param>/// <param name="cmdParms">SQL参数对象</param>/// <returns>DataSet对象</returns>public static DataSet ExecuteDataSet(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms){if (connectionString == null || connectionString.Length == 0)throw new ArgumentNullException("connectionString");if (commandText == null || commandText.Length == 0)throw new ArgumentNullException("commandText");DataSet ds = new DataSet();SQLiteConnection con = new SQLiteConnection(connectionString);SQLiteCommand cmd = new SQLiteCommand();SQLiteTransaction trans = null;PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms);try{SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);sda.Fill(ds);}catch (Exception ex){throw ex;}finally{if (con != null){if (con.State == ConnectionState.Open){con.Close();}}}return ds;}#endregion#region 通用分页查询方法/// <summary>/// 通用分页查询方法/// </summary>/// <param name="connString">连接字符串</param>/// <param name="tableName">表名</param>/// <param name="strColumns">查询字段名</param>/// <param name="strWhere">where条件</param>/// <param name="strOrder">排序条件</param>/// <param name="pageSize">每页数据数量</param>/// <param name="currentIndex">当前页数</param>/// <param name="recordOut">数据总量</param>/// <returns>DataTable数据表</returns>public static DataTable SelectPaging(string connString, string tableName, string strColumns, string strWhere, string strOrder, int pageSize, int currentIndex, out int recordOut) {DataTable dt = new DataTable();recordOut = Convert.ToInt32(ExecuteScalar(connString, "select count(*) from " + tableName, CommandType.Text));string pagingTemplate = "select {0} from {1} where {2} order by {3} limit {4} offset {5} ";int offsetCount = (currentIndex - 1) * pageSize;string commandText = String.Format(pagingTemplate, strColumns, tableName, strWhere, strOrder, pageSize.ToString(), offsetCount.ToString());using (DbDataReader reader = ExecuteReader(connString, commandText, CommandType.Text)){if (reader != null){dt.Load(reader);}}return dt;}#endregion#region 预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化/// <summary>/// 预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化/// </summary>/// <param name="cmd">Command对象</param>/// <param name="conn">Connection对象</param>/// <param name="trans">Transcation对象</param>/// <param name="useTrans">是否使用事务</param>/// <param name="cmdType">SQL字符串执行类型</param>/// <param name="cmdText">SQL Text</param>/// <param name="cmdParms">SQLiteParameters to use in the command</param>private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, ref SQLiteTransaction trans, bool useTrans, CommandType cmdType, string cmdText, params SQLiteParameter[] cmdParms){if (conn.State != ConnectionState.Open)conn.Open();cmd.Connection = conn;mandText = cmdText;if (useTrans){trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);cmd.Transaction = trans;}mandType = cmdType;if (cmdParms != null){foreach (SQLiteParameter parm in cmdParms)cmd.Parameters.Add(parm);}}#endregion}使用demo:[csharp] view plain copy 在CODE上查看代码片派生到我的代码片/// <summary>/// 获取数据库关键字信息/// </summary>/// <param name="category">分类</param>/// <param name="versions">版本</param>/// <returns></returns>private DataSet GetSystemDataBaseKeyWords(string category, string versions){StringBuilder sql = new StringBuilder();sql.Append("SELECT Keywords , Versions , Type , Description , Category , Id , Extends ");sql.Append(" FROM A_DataBaseKeyWords ");sql.AppendFormat(" WHERE 1={0} ", "1");if (!String.IsNullOrEmpty(category)){sql.AppendFormat(" AND Category='{0}'", category);}if (!String.IsNullOrEmpty(versions)){sql.AppendFormat(" AND Versions='{0}'", versions);}return SQLiteHelper.ExecuteDataSet(SQLiteHelper.LocalDbConnectionString, sql.ToString(), CommandType.Text);}。
C++ 使用OCILIB 连接Oracle数据库 总结

====== 参考文献 ====== -/blog/1059676 -/p/ocilib/ -/jackyxinli/archive/2009/07/30/91711.html -ocilib 中的文档
using namespace std;
// 用来提示错误的句柄 void err_handler(OCI_Error *err) {
printf( "code : ORA-%05i\n" "msg : %s\n" "sql : %s\n", OCI_ErrorGetOCICode(err), OCI_ErrorGetString(err), OCI_GetSql(OCI_ErrorGetStatement(err))
printf("证券代码: %i, 日期: %i \n", OCI_GetInt(rs,1), OCI_GetInt(rs,2)); }
OCI_StatementFree(st); OCI_ConnectionFree(cn); }else{ cout << "数据库连接失败" << endl; } OCI_Cleanup();
); }
int main(){ OCI_Connection *cn;
python访问sqlite封装的常用类实例

python访问sqlite封装的常用类实例在Python中,访问SQLite数据库通常使用封装好的类库,如sqlite3模块提供了对SQLite数据库的底层访问。
SQLite是一种轻量级的关系型数据库,广泛应用于移动应用和嵌入式系统中。
下面将介绍SQLite数据库的常用类和实例。
1. 连接数据库:使用sqlite3.connect()函数可以建立与SQLite数据库的连接。
这个函数接受一个参数,表示数据库文件的路径。
如果数据库文件不存在,会自动创建。
示例代码:```import sqlite3conn = sqlite3.connect("test.db")```2. 创建表:使用游标(cursor)对象可以执行SQL语句。
首先,要调用游标的execute()方法,参数是一条创建表的SQL语句。
然后,调用commit()方法提交事务,确保表结构的改变生效。
示例代码:```cursor = conn.cursor()cursor.execute("CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)")mit()```3. 插入数据:使用INSERT语句可以将数据插入到表中。
首先,要调用游标的execute()方法,参数是一条插入数据的SQL语句。
然后,调用commit()方法提交事务,确保数据的改变生效。
示例代码:```cursor.execute("INSERT INTO students (name, age) VALUES ('Alice', 20)")mit()```4. 查询数据:使用SELECT语句可以从表中查询数据。
首先,要调用游标的execute()方法,参数是一条查询数据的SQL语句。
然后,通过调用游标的fetchone()或fetchall()方法获取查询结果。
C++ 使用OCILIB 连接Oracle数据库 总结

本文是在 win7 64 位平台上,远程访问 64 位的 Oracle 11g 服务器,使用的编译器是 VS2012。 同时安装了对应的 64 位 Oracle 客户端,在配置和移植工具中配置对应的服务器 SCDB。配置 完毕后,使用 PLSQL Deveplor 可以正常登陆。 正常情况下,即可以使用 ocilib 连接数据库,如有问题,可能是一些配置出问题,可以参看 猫猫爱吃鱼的《OCI 试用》一文,重点摘录如下。
====== 引言 ======
在 C++下连接 Oracle 的方式可以使用 OCI。OCI 是甲骨文提供 Oracle 调用接口(Oracle Call Interface 简称 OCI),是 Oracle 数据库访问的基础接口。OCI 访问 Oracle 虽然效率很高,但 OCI 的 API 非常复杂,一个简单的功能就需要编写相当多的代码。后来 Oracle 为 C++提供了 一套新的 OCCI(Oracle C++ Call Interface)接口。该接口使用起来较为简单,但 Oracle 对其支持 力度有限,且 occi 库对编译器,编译器版本,数据库版本,crt 版本,操作平台版本都有诸 多限制。因此,出现了一些封装 oci 但是是以类 jdbc 或者 occi 风格的 wrapper 库,比如 oraLib, ocilib,ocl。本文中使用的即是 OCILIB。
system("pause");
return EXIT_SUCCESS; }
</code> ====== 错误解决 ====== 本部分记录在测试过程中碰见的错误以及解决方法。
===== 错误 LNK2019:无法解析的外部符号_OCI_Initialize@12 ===== 这是编译环境不匹配,导致 lib 文件未能正确导入的问题。由于本文中是 64 位系统,因此相 关项目需要将编译环境设置为 x64。设置方法为:项目属性 》 配置管理器 》 活动解决方 案平台 》 新建 》 x64。
用oci开发oracle数据库的方法

用oci开发oracle数据库的方法OCI是Oracle提供的一种基于C/C++语言的接口,用于访问Oracle数据库。
在OCI开发的过程中,可以使用OCI提供的函数来执行各种类型的数据库操作。
本文将介绍OCI开发Oracle数据库的一般步骤。
1. 安装Oracle数据库客户端在使用OCI开发Oracle数据库之前,您需要安装Oracle数据库客户端。
Oracle客户端包含OCI库和头文件。
建议使用与目标Oracle数据库版本相同的客户端。
2. 配置开发环境为了使用OCI进行开发,你需要在你的开发环境中配置相关的Oracle环境变量。
设置ORACLE_HOME和LD_LIBRARY_PATH环境变量,以便OCI库和头文件所在的目录被正确找到。
3. 设置OCI环境使用OCI开发Oracle数据库之前,需要创建OCI环境和错误处理器。
OCI环境是OCI函数调用所需的上下文信息,可通过OCIEnvCreate函数创建。
OCIEnvCreate函数需要连接模式和错误处理器作为输入参数。
4. 连接到Oracle数据库在使用OCI连接Oracle数据库之前,您需要知道以下信息:· Oracle数据库的SID或服务名称;· 数据库主机名或IP地址;· 使用的端口号;· 连接的用户名和密码。
您可以使用OCI函数OCILogon或OCIConnect来连接Oracle数据库。
其中OCILogon函数使用数据库SID或服务名来连接数据库,而OCIConnect函数使用主机名、端口号和服务名称。
5. 执行SQL语句使用OCI函数OCIStmtPrepare和OCIStmtExecute来执行SQL语句。
OCIStmtPrepare用于准备一个SQL语句的执行,而OCIStmtExecute函数用于实际执行该SQL语句。
执行SQL语句可能涉及到绑定参数和获取结果集,您可以使用OCI函数OCIBindByPos、OCIDefineByPos和OCIStmtFetch来完成这些操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
J B P o* / + + a dO I r o ae h w teb t rpr r n e f C nacsiga rc aaae D C, r c c n C ecmp rdt so et ef ma c Io ces noal d tbs.Thn a o h e o oO n e e
总第 1 0 9 期 21 年第 4 00 期
舰 船 电 子 工 程
S i e to i En ie rn h p Elc r n c g n e ig
Vo . 0 No 4 I3 .
1 40Biblioteka 通 过 OC I封装 类 实现数 据 库 的快 速 访 问
李秋珍 钱 辉
武汉 407) 3 04 ( 武汉数字工程研究所
Li u h n Qin Hu ze Qi a i
( u a gtlEn iern n t ue W h n Dii gn eigI si t ,W u a 4 0 7 ) a t hn 3 0 4
Ab t a t As t e d ma d f ra s o tr r s o s i h e eo m e to a g p l a in a e n o a l s a s rc h e n o h r e e p n e t me i t ed v l p n fl r e a p i to sb s d o r ce ma s d — n c t b s ,h w O s o t r t e r s o s i n fe t e y a c s n o a l a a a eb c mea h tr s a c o i.Fis l a l a a e o t h re h e p n e t me a d e f c i l c e sa r c ed t b s e o o e e r h t p c v r ty Or ce
Cal n efc OCI l I tra e( ),ameh do c esn n o al aa a ei isr d c d n h mpe n ig me h ns o to fa c sig a rced tb s s n to u e ,a d te i lme tn c a im fODB C,
摘
要
基于 O al 海量数据库的大型应用开发对 系统 响应时间提 出了越来越高 的要求 , rc e 如何有 效地提 高 Orc 数 al e
据库 的访问效率 , 减少系统等待时间成为一个研究热点。介绍一种数据库访 问方法 O ( al C lItr c) 并通过分 析 CIOrc a ef e , e ln a 和对 比 OD C、D C和 P o / B JB r *c c++的实现原理 , 明 OC 在访 问 Orc 数据库上性能优越性 。通过 C++类封装 O I 表 I al e C,
可实现多平 台应用 系统快速访 问 Orce 据库 。该类 ( 口) al数 接 不仅克服 了直接使用 O 过于复杂 、 可重用等缺 点, CI 不 同时具
有效率高 , 代码可读性 、 易维护性和可重用性增强等优点 。 关键词 数据 库调用接 口;数据库 ; 数据库接 口; 封装 ;多平台 T 311 P 1 . 中图分类号
a p ia in s s e p l t y t m.Th n e f c e v rt e d s d a t g ,s c s t e c m p e iy o d p ig OCI e sr p a e s d a d c o e it r a e g to e h ia v n a e u h a h o l x t fa o t n ,l s e e t d u e n S n,a d as p o e t e r a a i t ,ma n e a c n e e t d u e fs u c o e Oo n lo i r v h e d b l y m i i t n n e a d r p a e s d o o r ec d . Ke o d OC ,d t b s ,d t b s I yW rs I a a a e a a a e AP ,wr p i g a p n ,m u - a hi t l f Cls m b r TP3 】 1 a s Nu e 1 .
pe e t g awa f a pn rs ni yo p ig OCI nC+ + ca s tcna he ehg -p e c e st no al aa a ewi i ut paf r n wr i ls ,i a c iv ih s eda c s oa r ced tb s t nm li lto m h -
Ac e e H i h—pe d Ac e s t a a as hi v g s e c s o a D t b e b r p i a l l n e f c t n a Cl s y W a p ng Or ce Ca lI t r a e wihi as
1 引言
Orce 以结构化 查 询语 言 ( tu trdQu — al是 S rcue e r a g a e S yL n u g , QL) 为基 础 的 大 型关 系数 据 库 , 是 目前应 用 较 广泛 的数 据 库 之 一 。开 发 基 于 O a l rce
专 门开发 工具 , P o*C C+ +l 、 IOrc 如 r / _ 3 OC ( al 叫J e