lua连接 oracle 数据库,关于lua操作oracle数据库问题总结
近期由于工作的需要,需要把现在程序进行优化,考虑到每个地区一个版本,维护的成本太大,难度太高,决定用存储过程或是脚本语言把各地区和业务相当的代码封装起来,这样,各个地区只需要修改各地的存储过程或是脚本语言即可,主程序只需要维护一份即可。先用oracle的存储过程实现了业务代码的封装,这个相对简单,大家可以参考plsql用户指南与参考。至于脚本语言,考虑到与C的交互性和易用性,决定用lua来编写。由于linux的环境相当多,相当复杂需要自己编lua库、luasql库(代码网上下载),然后再写代码,这期间需到了些问题,在此总结一下,避免他人重复劳动。
1:先需要在自己的linux平台上把lua库和luasql库编出来,地址如下:
然后按照下载源文件中的说明把库编出来,编lua时需要选择指定的平台,这个需要注意一下,由于我的平台是aix编译过程中一直报错,在网上找了一篇解决方案,终于编成功,具体请见:http://cuoss.asiainfo.com/forum/archiver/?tid-177.html,
2:库编成功后,开始写代码,具体c调用lua脚本语言的代码,网上相当多,这里简单列一下
#include"lua.h"
#include"lualib.h"
#include"lauxlib.h"
int main(int argc,char** argv)
{
lua_State *L;
if(NULL == (L = luaL_newstate()))
{
perror("luaL_newstate failed");
return -1;
}
luaopen_base(L);// 加载Lua基本库
luaL_openlibs(L);
if(luaL_loadfile(L, "./jxbureau.lua"))
{
perror("loadfile failed");
return -1;
}
lua_pcall(L, 0, 0, 0);
lua_getglobal(L, "bureau_base_proc");
int batchno = 347;
int bureatype = 1;
char sep[2] = "|";
int errorno = 1;
lua_pushinteger(L,batchno) ;
lua_pushinteger(L,bureatype) ;
lua_pushstring(L,sep);
if (lua_pcall(L, 3, 1, 0) != 0)
{
perror("lua_pcall failed");
}
printf("lua_pcall:%d",lua_tointeger(L,-1));
lua_pop(L,1);
lua_close(L);
return 0;
}
接着需要在jxbureau.lua文件中把函数bureau_base_proc写出来,函数bureau_base_proc中需要访问数据库,在C中直接用include把头文件加进来即可,在lua中需要用到require 或是package.loadlib两个api,经过自己的测试,在windows平台上,加进oracle连接库代码如下:
require "luasql.odbc"
env = assert (luasql.odbc())
dbcon = assert (env:connect("ngboss_dev_10gr2", "cp", "cp"))
在linux平台,加进oracle连接库代码如下:
assert(package.loadlib("libluasql_oci8D.so", "luaopen_libluasql_oci8")) //可以用命令"nm luasql.so |grep luaopen_"查看
env = assert (luasql.oci8())
dbcon = assert (env:connect("ngboss_dev_10gr2", "cp", "cp"))
这样的写法估计和luaSql的版本有关系,不同的版本都有不同的函数。
3 :luasql的sql语句写法,在linux和window平台上也有区别
在window平台下代码如下:
row = cur:fetch ({}, "a")
row.BATCH_NO // 这里数据库表的字段需要大写,其它字段类似
在linux平台下代码如下:
row = cur:fetch ({}, "a")
row.batch_no // 这里数据库表的字段需要小写,其它字段类似
4:数据主程序里需要访问数据库,lua脚本中也访问数据,这就分为两个事务了,程序里的事务和lua中的事务没办法合在一起,程序里需要commit,lua中的才能看到中间数据,才能接着走下去。
lua连接 oracle 数据库,关于lua操作oracle数据库问题总结相关推荐
- 数据库MySQL相关操作||创建数据库、显示所有数据库、切换数据库、显示数据库下的数据库表、删除数据库
数据库MySQL相关操作||创建数据库.显示所有数据库.切换数据库.显示数据库下的数据库表.删除数据库 1,创建数据库 create databases mydb: 记得加:(分号) 2,显示所有数据 ...
- java操作oracle数据_Java jdbc操作oracle数据库的两种方式
本文由广州疯狂软件java培训分享: 第一种应该是比较古老的方法了. Windows下采用JDBC-ODBC Bridge连接oracle数据库 1. 安装oracle客户端程序,在tnsnames. ...
- c 连接oracle 通用类,c#操作oracle,有没有相仿sqlhelp之类的通用操作类(6)
当前位置:我的异常网» C# » c#操作oracle,有没有相仿sqlhelp之类的通用操作类 c#操作oracle,有没有相仿sqlhelp之类的通用操作类(6) www.myexceptions ...
- java制作oracle程序,Java程序操作Oracle两种方式之简单实现
Java程序操作Oracle两种方式之简单实现 1.通过JDBC-ODBC桥连接Oracle数据库 (1)创建odbc源,在控制面板->管理工具->数据源(odbc)中添加DSN,比如取名 ...
- oracle中数据文件创建,操作oracle中的数据文件
收藏于http://dev.yesky.com/296/8090796.shtml Oracle数据库 中管理表空间和数据文件 数据库的三大组成部分:数据文件,控制文件,Redo日志. 表空间分为系统 ...
- tp5连接mongo和mysql_tp5(thinkPHP5)操作mongoDB数据库的方法
本文实例讲述了tp5(thinkPHP5)操作mongoDB数据库的方法.分享给大家供大家参考,具体如下: 1.通过composer安装 composer require mongodb/mongod ...
- 数据库mysql常用操作_mysql数据库常用操作
目前最流行的数据库: oracle.mysql.sqlserver.db2.sqline --:单行注释 #:也是单行注释 /* 注释内容*/:多行注释 mysql -uroot -p密码:登录mys ...
- python数据库实例_Python操作MySQL数据库9个实用实例
用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1.2.3.win32-py2.7.exe MySQL-pytho ...
- c web mysql数据库_C语言操作MySQL数据库
原作者博客http://www.cnblogs.com/nliao/archive/2010/09/09/1822660.html 先看结构体 ---------------------------- ...
- php 显示数据库操作错误,php操作mysql数据库编码错误
有两行相同的代码,来自不同的 php 文件,在对 MySql 数据库(UTF-8格式)操作时,一行代码正常,一行代码异常 代码1,异常 update ordersystem.product Set P ...
最新文章
- python将图像转换为8位单通道_Python OpenCV读取16位单通道图像并转换为8位灰度图显示...
- 平板python_Wacom平板电脑的Python示例
- 第17节 业务流程管理和重组
- CSDN创始人蒋涛:开源吞噬世界,得开发者得天下
- 职场有多少IT精英透支健康和生命?
- spring AOP 之一:spring AOP功能介绍
- mysql本身主从_Mysql主从复制
- 深度特征融合--add和concat【转载】
- strstr函数_leetcode第28题实现strStr()
- nvidia cuda工具包更新9.0版本记录
- c# —— 枚举和值的隐藏副作用
- JavaBean与Map相互转换
- 将ShaderToy中的Shader搬运到Unity
- objective-c 中的关联介绍
- ASP.NET MVC Framework体验(4):控制器
- 怎么视频抠图?一键AI智能抠图,这招你一定要学会
- 揭秘springboot集成tomcat原理
- dom影像图形成数字地形图_基于MapMatrix的数字正射影像图制作
- lsass.exe和smss.exe病毒专杀工具——即磁碟机病毒专杀工具(转载)
- R语言ggplot2可视化多项式曲线、多项式方程以及多项式模型评估指标R方:使用ploynom包拟合三阶多项式模型
热门文章
- chartjs 表格刷新
- Couldn't register com.zyg.ios.XXX with the bootstrap server. Error: unknown error code.
- 换晶振导致stm32串口数据飞码的解决办法
- jar文件运行时 Failed to load Main-Class manifest attribute from
- CAD格式转换大全你想要的转换格式这里都有
- 获取CSS中图片地址
- 线程小游戏制作的心得与体会
- jai_imageio-1.1-alpha.jar
- 神经网络为什么叫神经网络,神经网络的强大之处
- 如何使用DNSPod解析Freenom域名