现在的位置: 首页 > 综合 > 正文

在Matlab中操作oracle数据库

2013年08月20日 ⁄ 综合 ⁄ 共 2630字 ⁄ 字号 评论关闭

环境说明
  数据库版本:Oracle 11.2.0.1; 安装目录:D:\oracle_app
  MATLAB版本:R2013a 安装目录:D:\Program Files\MATLAB

一 通过ODBC实现到oracle的连接
1)控制面板->管理工具->ODBC数据源->在系统DSN中添加oracle数据源;
2)matlab命令行中输入建立连接的命令:

conn_odbc = database('QUIK', ...   %ODBC名称
                     'QUIK', ...   %登录用户名
                     'QUIK')       %登录密码

二 通过JDBC建立与oracle的连接
1)找到jdbc的驱动程序文件D:\oracle_app\lcm\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar,将其复制到

matlab安装目录的java子目录D:\Program Files\MATLAB\R2013a\java\jar\toolbox;
2)修改matlab的classpath文件:D:\Program Files\MATLAB\R2013a\toolbox\local\classpath.txt,在结尾添加一

行内容:$matlabroot/java/jar/toolbox/ojdbc6.jar
3)matlab命令行中输入建立连接的命令:

conn_jdbc = database('QUIK', ...   %数据库服务名
                     'QUIK', ...   %登录用户名
                     'QUIK', ...   %登录密码
                     'oracle.jdbc.driver.OracleDriver', ...  %驱动名称
                     'jdbc:oracle:thin:@localhost:1521:')    %连接字符串

通过ping命令查看连接状况:

ping(conn_odbc)
ping(conn_jdbc)

 

三 数据库查询
exec函数用于执行SQL语句,并返回一个cursor对象,需要注意的是,这里所说的cursor对象并不是我们在SQL中理解的游标,通过下面执行的语句结合理解:

curs = exec(conn_odbc, 'select EMP_NO,NAME from EMP_MAIN'); %执行查询
curs = fetch(curs); %获取查询呢结果
data = curs.Data; %将查询结果输出到矩阵变量

注意:通过第一句exec执行后,返回的结果变量curs并没有直接包含查询的结果,通过fetch函数才能将查询结果返回给赋值变量,最终的查询结果是包含在curs.Data中的!

四 向数据库中插入数据
fastinsert(conn, 'tablename', colnames, exdata)
参数说明:
    tablename:表名
    colnames:列名
    exdata:待插入的数据
示例:

%执行插入
fastinsert(conn_odbc,'EMP_MAIN',{'EMP_NO','NAME'},{'LIKEQIANG','李克强'});
%查看插入的数据
curs = exec(conn_odbc, 'select EMP_NO,NAME from EMP_MAIN where EMP_NO=''LIKEQIANG''');
curs = fetch(curs);
data = curs.Data

注意:当需要同时向同一个表中插入多条数据时,可以通过向exdata中传入一个多行的矩阵,矩阵的每一行表示一条记录。在java中用惯了Statement.executeUpdate的朋友们,看到这个功能也许会小兴奋一下,至少我是,呵呵。

五 数据库更新
update(conn, 'tab', colnames, exdata, 'whereclause')    %一条update语句
update(conn, 'tab', colnames, ...                       %更新多条update语句
{datA,datAA, ...; datB,datBB, ...; datn, datNN}, ...
{'where col1 = val1'; 'where col2 = val2'; ... 'where  coln = valn'}
参数说明:
    tab:表名
    colnames:列名
    exdata:待更新的数据
    whereclause:条件
示例:

%执行更新
update(conn_odbc, 'EMP_MAIN', {'EMP_NO','NAME'}, {'LIKEQIANG_OK','李克强_OK'}, ...
       'WHERE EMP_NO=''LIKEQIANG''');
%查看更新后的数据
curs = exec(conn_odbc, 'select EMP_NO,NAME from EMP_MAIN where EMP_NO=''LIKEQIANG_OK''');
curs = fetch(curs);
data = curs.Data

 

六 对数据库的其他操作
1)执行数据操作的回滚和提交

exec(conn_odbc, 'rollback');
exec(conn_odbc, 'commit');

2)执行DDL语句
基本语法是:exec(conn,'sql语句');
示例:

%创建新表
mktab = ['CREATE TABLE Person(LastName varchar2(20),' ...
         'FirstName varchar2(30),Address varchar2(100),Age number)'];
curs = exec(conn_odbc, mktab);
%修改表结构
curs = exec(conn_odbc, 'ALTER TABLE Person ADD City varchar2(30)') 
%删除表
curs = exec(conn_odbc, 'DROP TABLE Person')

3)执行存储过程和函数

%执行存储过程
curs = exec(conn,'{call sp_name (parm1,parm2,...)}');
%执行函数
curs = exec(conn,'SELECT dbo.get_prodCount() as num_products');
curs = fetch(curs);

注意:上面的语句是从matlab的帮助文档中粘贴过来的,没经过实际测试,如果的确需要用,只能劳驾自己尝试了!

 

七 完成数据库操作
在完成对数据库的查询、修改等操作后,需要关闭打开的游标和数据库连接,切记!

close(curs); %关闭游标
close(conn_odbc); %关闭数据库连接

 

抱歉!评论已关闭.