通过OCI封装类实现数据库的快速访问
- 格式:pdf
- 大小:338.77 KB
- 文档页数:5
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数据库连接的⼏种⽅式⼀、本地通过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# 异常处理(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);}。
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()方法获取查询结果。
用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来完成这些操作。
基于Oracle OCI的数据访问C语言接口ORADBIcheungmine@ORADBI是我在Oracle OCI(Oracle 调用接口)基础上开发的,支持Oracle8i、9i、1 0g等数据库。
根据Oracle公司的介绍:OCI是如此可靠,以至于Oracle数据库中的每一条S QL语句都通过OCI来执行。
当应用程序开发人员需要面向Oracle数据库服务器的最强大的接口时,他们将调用Oracle调用接口(OCI)。
OCI提供了对所有Oracle数据库功能的最全面的访问。
OCI API中包含了最新的性能、可伸缩性和安全性特性。
采用OCI的最大好处就是:它是最切近Oracle底层的技术,因此,效率是最高的。
同时,它是跨平台的。
因此,在我给出的ORADBI库,除了OCI之外,没有其他外部依赖,稍加改动,就可以移植到非Windows平台上或其他嵌入式平台。
然而,OCI也比较不容易使用。
它的功能之强,粒度之细,语法之烦琐,都不适合今天熟悉了快速开发模式的人员使用。
然而,OCI的高效,直接根植于数据库核心,跨平台的语言特性,是其他如OO4O、OLEDB、ADO等COM方式不具备的。
我最初开发Oralce数据库是4年以前,使用的是OO4O。
直到最近,使用OCI成了我的爱好。
于是,写了一套OCI的Help er库,方便OCI的使用。
我不敢说是OCI的Wrapper库,因为我没能力包装OCI的方方面面。
然而,我的ORADBI已经足够我(可能也包括你们)日常使用了。
我就是用这套ORADBI 操纵BLOB等大数据字段的。
公布这套ORADBI库,没有任何商业上的风险:我拥有这个库的全部版权,任何个人或团体可以为任何目的免费地、无限制地使用ORADBI库,前提是不能声明对ORADBI库的版权。
对使用ORADBI库所造成的任何后果,我不负任何责任。
如果这套软件对您的工作产生了很大的帮助,我不拒绝任何您的资助。
好了,让我们概览一下这个库,它包含下列文件:.h文件 .c文件oradbi.h* oradbi.coracol.h oracol.coraconn.h oraconn.coradate.h oradate.coraerr.h oraerr.coraparam.h oraparam.corarows.h orarows.corastmt.h orastmt.coratype.hunistd.hlist.h list.chashmap.h hashmap.c其中,oradbi.h是你唯一需要包含的头文件。
Python操作Oracle数据库的简单⽅法和封装类实例本⽂实例讲述了Python操作Oracle数据库的简单⽅法和封装类。
分享给⼤家供⼤家参考,具体如下:最近⼯作有接触到Oracle,发现很多地⽅⽤Python脚本去做的话,应该会⽅便很多,所以就想先学习下Python操作Oracle的基本⽅法。
考虑到Oracle的使⽤还有⼀个OracleClient的NetConfig的存在,我觉得连接起来就应该不是个简单的事情。
果然,⽹上找了⼏个连接⽅法,然后依葫芦却画了半天,却也不得⼀个瓢。
⽅法1:⽤户名,密码和监听分别作为参数conn=cx_Oracle.connect('⽤户名','密码','数据库地址:数据库端⼝/SID')根据我看的⼏篇⽂章和我写代码出错的提⽰,我找到了python连接数据库的配置项应该和Oracle客户端的配置⽂件tnsnames.ora有关。
但是我的配置项并没有SID项,⽽且⼀开始我也不知SID是个什么东西,⽹上写什么我就跟着写,所以这种⽅法失败了。
后来想通了要在配置项加⼀个SID,然后想想这个东西配置完了我系统是不是要重启啊。
所以,先看看其他⽅法吧….⽅法2:⽤户名,密码和监听共同作为⼀个参数conn=cx_Oracle.connect('⽤户名/密码@数据库地址:数据库端⼝/SID')这个⽅法基本和⽅法⼀⼀样,换汤不换药…⽅法3:使⽤tns配置信息conn=cx_Oracle.connect('⽤户名','密码',tns)⽹上的代码获取tns是⽤函数做的,依然会使⽤SID,但是..我已经可以⽤的配置项并没有SID啊,所以使⽤tns=cx_Oracle.makedsn('数据库地址','数据库端⼝', 'SID')依旧不⾏,但是看看这个tns的⽣成⽅法和上⾯的两种⽅法差不多的。