在跨平台的C++程序中使用OTL来操作不同的数据库收藏

OTL访问Oracle的封装类 对otl访问oracle数据库的一个封装代码,有数据库连接池 ,支持数据库连接池的自动重连,支持池内每一个连接的达最大在线时长后重连。 立即下载
  在跨平台的C++程序中使用OTL来操作不同的数据库收藏

新一篇: 开放源码嵌入式数据库 SQLite 简介 | 旧一篇: Oracle表数据的C++存取接口

  本文主要介绍了OTL和怎样在C++程序中使用OTL操作数据库。

OTL介绍:
OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库,例如Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS等等。OTL中直接操作Oracle主要是通过Oracle提供的OCI接口进行,进行操作DB2数据库则是通过CLI接口来进行,至于MS的数据库和其它一些数据库,则OTL只提供了ODBC来操作的方式。当然Oracle和DB2也可以由OTL间接使用ODBC的方式来进行操纵。

在MS Windows and Unix 平台下,OTL目前支持的数据库版本主要有:Oracle 7 (直接使用 OCI7), Oracle 8 (直接使用 OCI8), Oracle 8i (直接使用OCI8i), Oracle 9i (直接使用OCI9i), Oracle 10g (直接使用OCI 10g ), DB2 (直接使用DB2 CLI), ODBC 3.x ,ODBC 2.5。OTL最新版本为4.0,参见http://otl.sourceforge.net/,下载地址http://otl.sourceforge.net/otlv4_h.zip。
优点:
      a.
跨平台
      b.
运行效率高,与C语言直接调用API相当
      c.
开发效率高,起码比ADO.net使用起来更简单,更简洁
      d.
部署容易,不需要ADO组件,不需要.net framework 等
缺点:
      a.
说明文档以及范例不足够丰富(暂时性的)
    
其实现在它提供有377个使用范例可参考,下载地址:ttp://otl.sourceforge.net/otl4_examples.zip。

OTL的使用:

   OTL使用起来也很简单,使用不同的数据库连接,主要是根据需要在程序开始的宏定义来指定的。 OTL是首先根据这个宏定义来初始化数据库连接环境。 OTL中用来区分连接方式的宏定义主要有下面这些:
 OTL_ORA7, OTL_ORA8, OTL_ODBC, OTL_DB2_CLI, OTL_ODBC_MYSQL...

不同的宏对应的数据库API,具体说明如下:

宏定义名

说明

OTL_DB2_CLI

for DB2 Call Level Interface (CLI)

OTL_INFORMIX_CLI

for Informix Call Level Interface for Unix (when  OTL_ODBC_UNIX is enabled).

OTL_IODBC_BSD

for ODBC on BSD Unix, when iODBC package is used

OTL_ODBC

for ODBC

OTL_ODBC_MYSQL

for MyODBC/MySQL. The difference between OTL_ODBC_MYSQL and OTL_ODBC is that transactional ODBC function calls are turned off for OTL_ODBC_MYSQL, since MySQL does not have transactions

OTL_ODBC_
POSTGRESQL

for the PostgreSQL ODBC driver 3.5 (and higher) that are connected to PostgerSQL 7.4 / 8.0  (and higher)  servers.

OTL_ODBC_UNIX

for ODBC bridges in Unix

OTL_ODBC_zOS

for ODBC on IBM zOS.

OTL_ODBC_XTG_IBASE6

for Interbase 6.x via XTG Systems'  ODBC driver. The reason for introducing this #define is that the ODBC driver is the only Open Source ODBC driver for Interbase. Other drivers, like Easysoft's ODBC for Interbase, are commercial products, and it beats the purpose of using Interbase, as an Open Source.database server.

OTL_ORA7

for OCI7

OTL_ORA8

for OCI8

OTL_ORA8I

for OCI8i

OTL_ORA9I

for OCI9i. All code that compiles and works under #define OTL_ORA7, OTL_ORA8, and OTL_ORA8I, should work when OTL_ORA9I is used

OTL_ORA 10G

for OCI 10g . All code that compiles and works  under #define OTL_ORA7, OTL_ORA8, OTL_ORA8I, OTL_ORA9I, should work with OTL_ORA 10G .

OTL_ORA 10G _R2

for OCI 10g , Release 2 (Oracle 10.2). All code that compiles and works  under #define OTL_ORA7, OTL_ORA8, OTL_ORA8I, OTL_ORA9I, and OTL_ORA 10G should work with OTL_ORA 10G _R2 .

我们在编译OTL的程序时,需要使用到相应的数据库API,这就要程序在编译时联接lib库文件,不同的数据库对应的lib文件所在位置各不相同,下面是分别在windows与Unix下的数据库API所需要的头文件及lib文件所在的位置列表:

API

API header files for Windows

API libraries for Windows

OCI7

In <ORACLE_HOME>/oci/include

 <ORACLE_HOME>/oci/lib/<compiler_specific>/ociw32.lib

OCI8

In <ORACLE_HOME>/oci/include

 <ORACLE_HOME>/oci/lib/<compiler_specific>/oci.lib

OCI8i

In <ORACLE_HOME>/oci/include

 <ORACLE_HOME>/oci/lib/<compiler_specific>/oci.lib

OCI9i

In <ORACLE_HOME>/oci/include

 <ORACLE_HOME>/oci/lib/<compiler_specific>/oci.lib

OCI 10g

In <ORACLE_HOME>/oci/include

 <ORACLE_HOME>/oci/lib/<compiler_specific>/oci.lib

ODBC

Normally, in one of the C++ compiler system directories, no need to include explicitly.

Normally, in one of the C++ compiler system directories: odbc32.lib

DB2 CLI

In <DB2_HOME>/include

<DB2_HOME>/lib/db2api.lib
<DB2_HOME>/lib/db2cli.lib

 在Unix平台中:

 从上面可以看出,如果在windows下操纵MS的 数据库,使用MS VC++来编译OTL程序,就非常简单了,不用另外去找ODBC32.lib,VC的编译器中已经默认link到工程中了,具体请看如何编译OTL:http://otl.sourceforge.net/otl3_compile.htm。

下面就让我们开始在windows+VC中使用OTL吧。先打开ODBC创建一个数据源DSN(如firebird),指定需要操纵的数据库(如MS Access2000)。这个例子是在一个Access数据库中实现创建表、插入记录、更新记录和查询记录,代码实现:

 #include <iostream>
using namespace std;

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define OTL_ODBC // Compile OTL 4.0/ODBC
// #define OTL_ODBC_UNIX //
如果在Unix下使用UnixODBC,则需要这个宏

#include <otlv4.h> // include the OTL 4.0 header file

otl_connect db; // connect object

void insert()
// insert rows into table
{
 // open a stream with no implicit committing
 otl_stream
    o(1, // stream buffer size should be set to 1
      "insert into test_tab values(:f1<int>,:f2<char[31]>)",
          // SQL statement
      db  // connect object
     );
 char tmp[32];

 for(int i=1;i<=100;++i){
  sprintf(tmp,"Name%d",i);
  o<<i<<tmp;
 }

}

void update(const int af1)
// insert rows into table
{
 otl_stream
   o(1, // buffer size
     "UPDATE test_tab "
     "   SET f2=:f2<char[31]> "
     " WHERE f1=:f1<int>",
        // UPDATE statement
     db // connect object
    );

 o<<"Name changed"<<af1;
 o<<otl_null()<<af1+1; // set f2 to NULL

}

void select(const int af1)
{
 otl_stream i(50, // buffer size may be > 1
              "select * from test_tab "
              "where f1>=:f11<int> "
              "  and f1<=:f12<int>*2",
                 // SELECT statement
              db // connect object
             );
   // create select stream
 
 int f1;
 char f2[31];

 i<<af1<<af1; // Writing input values into the stream
 while(!i.eof()){ // while not end-of-data
  i>>f1;
  cout<<"f1="<<f1<<", f2=";
  i>>f2;
  if(i.is_null())
   cout<<"NULL";
  else
   cout<<f2;
  cout<<endl;
 }

}

int main()
{
 otl_connect::otl_initialize(); // initialize ODBC environment
 try{

 db.rlogon("UID=scott;PWD=tiger;DSN=firebird"); // connect to ODBC
 //
或者使用下面的连接语句方式。

//  db.rlogon("
scott/tiger@firebird"); // connect to ODBC, alternative format
                                    // of connect string

  otl_cursor::direct_exec
   (
    db,
    "drop table test_tab",
    otl_exception::disabled // disable OTL exceptions
   ); // drop table

  otl_cursor::direct_exec
   (
    db,
    "create table test_tab(f1 int, f2 varchar(30))"
    );  // create table

  insert(); // insert records into the table
  update(10); // update records in the table
  select(8); // select records from the table

 }

 catch(otl_exception& p){ // intercept OTL exceptions
  cerr<<p.msg<<endl; // print out error message
  cerr<<p.stm_text<<endl; // print out SQL that caused the error
  cerr<<p.sqlstate<<endl; // print out SQLSTATE message
  cerr<<p.var_info<<endl; // print out the variable that caused the error
 }

 db.logoff(); // disconnect from the database

 return 0;

}

不出意外,应该比较顺利地运行并输出结果:

f1=8, f2=Name 8
f1=9, f2=Name
9
f1=10, f2=Name changed
f1=11, f2=NULL
f1=12, f2=Name
12
f1=13, f2=Name
13
f1=14, f2=Name
14
f1=15, f2=Name
15
f1=16, f2=Name16


OTL4.0
中有一个问题,就是当OTL与boost的date_time库一起使用时,会出现命名冲突,主要是OTLV4.h头文件中使用std中的isspace()函数缺少命名空间,加上即可:
line 4801:     while(isspace(*c)&&*c)
 modified to:    while(std::isspace(*c)&&*c)   // OK
line 12065:   while(isspace(*c)||(*c)=='(')++c;
 modified to:  while(std::isspace(*c)||(*c)=='(')++c;  // OK

这是在windows平台下进行的测试,还没在Unix或Linux下进行,我第一次使用OTL,记下来所使用的过程,希望对后来者有所帮助。
 

 

 

 

API

API header files for Unix

API libraries for Unix

OCI7

-I$(ORACLE_HOME)/rdbms/demo 

 -I$(ORACLE_HOME)/rdbms/public

-L$(ORACLE_HOME)/lib/ -lclntsh

OCI8

-I$(ORACLE_HOME)/rdbms/demo 

-I$(ORACLE_HOME)/rdbms/public

-L$(ORACLE_HOME)/lib/ -lclntsh

OCI8i

-I$(ORACLE_HOME)/rdbms/demo

  -I$(ORACLE_HOME)/rdbms/public

-L$(ORACLE_HOME)/lib/ -lclntsh

OCI9i

-I$(ORACLE_HOME)/rdbms/demo 

 -I$(ORACLE_HOME)/rdbms/public

-L$(ORACLE_HOME)/lib/ -lclntsh

OCI 10g

-I$(ORACLE_HOME)/rdbms/demo

  -I$(ORACLE_HOME)/rdbms/public

-L$(ORACLE_HOME)/lib/ -lclntsh

ODBC

ODBC bridge specific

ODBC bridge specific

DB2 CLI

-I/<DB2_HOME>/sqllib/include

-L/<DB2_HOME>/sqllib/lib -ldb2

发表于 @ 2006年03月23日 02:02:00|评论(3)|编辑

新一篇: 开放源码嵌入式数据库 SQLite 简介 | 旧一篇: Oracle表数据的C++存取接口

C++OTL使用说明 C++OTL使用说明,HTML,保存的博客的网页,用浏览器打开查看 立即下载

相关推荐

OTL编程简介 c++

OTL编程简介,Word文档,敬请参考。

在跨平台的C++程序中使用OTL来操作不同的数据库

document.title="在跨平台的C++程序中使用OTL来操作不同的数据库 - "+document.title;  本文主要介绍了OTL和怎样在C++程序中使用OTL操作数据库。OTL介绍:OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数

roger007的专栏 1万+

PS/Ai/PR/AE等adobe出现正版弹窗提示:Your non-genuine Adobe app will be disabled soon解决办法

就是用专门的清理工具下载,清理工具在文章下方。然后新建三个空的记事本文件,重命名为 Adobe Genuine Launcher.exe,AdobeGCClient.exe,AGMService.exe。在该文件目录中,分别找到 Adobe Genuine Launcher.exe,AdobeGCClient.exe,AGMService.exe,然后在防火墙入站规则里,阻止Adobe Genuine Launcher.exe,AdobeGCClient.exe,AGMService.exe。

Q82556499的博客 1万+

C++连接各种数据库,包含SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库

以下是一些示例代码,演示如何使用 C++ 连接 SQL Server、MySQL、Oracle、ACCESS、SQLite 和 PostgreSQL、MongoDB 数据库。要使用 C++ 连接 PostgreSQL 数据库,可以使用 PostgreSQL C++ 驱动程序。要使用 C++ 连接 Oracle 数据库,可以使用 Oracle 提供的 ODBC 驱动程序。要使用 C++ 连接 SQLite 数据库,可以使用SQLite C++库。3.连接 Oracle 数据库。2.连接 MySQL 数据库。

m0_73075606的博客 2020

多模态特征融合方法总结

由于本人的研究是文本、语音和图像三者模态数据的融合,所以针对的是这三种模态的特征融合方法进行总结。 首先,多模态特征融合的方法大体分为三种

华辰烟雨的博客 9万+

保姆级教程:用Jetson Orin Nano和ROS2 Humble搞定PIXhawk 4飞控通信(含配置文件详解)

本文提供了一份详细的Jetson Orin Nano与PIXhawk 4飞控通信配置指南,涵盖硬件连接、ROS2 Humble环境搭建、MAVROS2配置及通信调试全流程。通过实战案例和配置文件详解,帮助开发者快速实现无人机上位机与飞控的稳定通信,适用于无人机开发与自动化控制场景。

weixin_33670786的博客 475

C++程序中使用OTL来操作Oracle数据库

关于OTL,网上介绍的也不少,但看来看去也只是官方的那些文档。OTL很好用,结合官方提供的一些例子,多多尝试才能领悟。经过一个月左右的项目开发,对OTL也有些了解,在这里总结一下,希望对刚接触OTL的新手有所帮助。其中有些地方,比如对网络异常的处理,可是费了我两天的时间才解决的,我那个汗哪。废话少说,开始正题:一、开始前的准备工作 在使用OTL进行编程之前,要首先确定使用的Oralce版本以及所选用的字符集。OTL支持目前几乎所有的主流数据库,可以通过宏启用otlv4.h中对应的数据库操作接口。 如:使用O

qq_20853741的博客 1613

Jlink除了调试还能干啥?用JFlash SPI给W25Q64烧录固件的5个实用技巧

本文深入探讨了Jlink的隐藏功能,特别是通过JFlash SPI高效烧录W25Q64的5个进阶技巧。从硬件连接优化到批量处理脚本,再到数据安全验证,这些技巧能显著提升烧录速度和稳定性,适用于量产环境。文章还提供了详细的参数配置和脚本示例,帮助工程师充分发挥Jlink的潜力。

weixin_29164843的博客 410

c++操作数据库(增删改查)------otl库----c++

c++操作数据库(增删改查)

mankeywang的博客 833

FPGA以太网通信实战(一):实现MDIO接口驱动,掌控PHY芯片的钥匙

本文介绍了以太网通信技术及其核心组件。首先概述了以太网的发展历程,从标准以太网(10Mbps)到万兆以太网(10Gbps)的技术演进。重点分析了以太网接口的两大核心部件:MAC控制器负责数据链路层协议处理,PHY芯片负责物理信号转换和连接管理。文章详细解读了MDIO接口规范,包括帧格式和读写时序,并以YT8531 PHY芯片为例,介绍了其寄存器配置方法。最后设计了一个FPGA实现方案,通过MDIO接口完成PHY芯片的软复位和状态监测功能,并利用LED指示灯实时显示网络连接速率。

weixin_64402689的博客 1662

告别手册!S32K3XX的eMIOS实战:从GPT定时到PWM输出,一个通道搞定电机控制

本文深入探讨了NXP S32K3XX系列MCU的eMIOS模块在电机控制中的高效应用。通过单通道实现PWM生成、输入捕获和定时中断三大功能,展示了如何简化BLDC电机控制硬件设计。文章结合RTD库与寄存器级编程,提供动态模式切换和性能优化方案,显著降低CPU负载。

weixin_42522374的博客 147

OTL:通用数据库连接模板

OTL使用,以及使用中的缓存问题

抱猫人的博客 1957

SAP_MM模块非限制库存转冻结库存

项目非限制 → 冻结事务码移动类型343影响库存不可用,不参与MRP常见用途质量问题封存、盘点冻结、待退货品通过本文,我们了解了 SAP 的[SAP_MM模块非限制库存转冻结库存]的基本概念和应用方法。希望这些信息能帮助您在实际工作中更好地使用 SAP 系统,提高工作效率和管理水平。更多SAP文章请点击更多SAP文章更新,大家一起学习进步!!!文章中如有错误。敬请指正!搜索公众号:SAP资料文库微信号:SPRO_PP时间:2025-10-14。

我小时候很黑的博客 586

使用OTL来访问数据库

使用OTL来访问数据库 使用OTL来访问数据库 - 牵着老婆满街逛 - C++博客使用OTL来访问数据库来源:http://read.newbooks.com.cn/info/157869.htmlOTL介绍:OTL 是 Oracle, Odbc and DB2-...

189

电商平台系统需求规格说明书(示例)

​​电商系统​​:指本文件所描述的集商品展示、销售、支付、物流跟踪、用户管理等功能于一体的综合性在线购物平台。​​API​​:应用程序编程接口(Application Programming Interface),用于实现系统各模块之间或与外部系统之间的数据交互和功能调用。

跟佟格湾一起学习计算机知识吧~ 1265

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OTL简介

OTL简介 - cdone的专栏 - 博客频道 - youkuaiyun.com OTL简介 2008-12-31 14:39 1419人阅读 评论(0) 收藏 举报exceptionstreamdb2数据库oraclesql server目录(?)[+]特点类介绍otl_connectotl_streamotl_exceptionexampleOOTL简介 1       特点:Ø         跨数据库...

weixin_33704591的博客 277

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

OTL简介 - cdone的专栏 - 博客频道 - youkuaiyun.com

OTL简介 - cdone的专栏 - 博客频道 - youkuaiyun.comOTL简介 2008-12-31 14:39 1419人阅读 评论(0) 收藏 举报exceptionstreamdb2数据库oraclesql server目录(?)[+]特点类介绍otl_connectotl_streamotl_exceptionexampleOOTL简介 1       特点:Ø         跨数据库平...

weixin_34174422的博客 144

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

泛C++开发: 如何用C++写跨平台应用

泛C++开发: 如何用C++写跨平台应用 分类: C C++ 操作系统 2011-09-10 16:58 27人阅读 评论(0) 收藏 举报   泛C++开发: 如何用C++写跨平台应用 2009年07月20日 星期一 下午 11:33 口号:一次编码,到处编译! :-)      一次编码,在 vc7.1 , vi 甚至ultere

junecauzhang的专栏 526

oci 批量插入

<br />转载 使用OTL进行数据库编程 收藏 操作环境: 1. 操作系统:Windows XP Professional with SP2。 2. 编程环境:Visual C++ 6.0 with SP6。 3. 数据库环境:Access 2003。 OTL简介: OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个C++编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库,例如Oracle, MS SQL Serv

wu_jing_sheng0的专栏 2764

数据库

  数据库编程总结 收藏 此文于2010-04-12被推荐到优快云首页此文于2010-04-16被推荐到优快云首页如何被推荐?数据库编程总结当前各种主流数据库有很多,包括Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen

lihaihuai3yy的专栏 3306

给程序员介绍一些C++开源库

给程序员介绍一些C++开源库 排行榜 收藏 打印 发给朋友 举报来源: 开源中国   发布者:zhangy 热度131票  浏览955次 【共0条评论】【我要评论】时间:2011年11月13日 17:50 C++开源库,欢迎补充。 C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年。因为当今商业应用程序类型,已经从桌面应

lionzl的专栏 1717

2013年个人工作与学习总结(20131207)

很高兴能在六道愉快地工作至今,下面是我的2013年全年工作与学习内容的回顾与总结。 一、今年本职工作完成的情况: 上半年(2013.3-2013.9)捕鱼项目的开发。 主要负责: 1.除骨架之外的游戏房间服务器 2.奖池算法与鱼群AI算法 3.Cocos2d-x客户端PC版鱼群的绘制与逻辑 4.轨迹编辑器 下半年(2013.9-2013.12)三公项目的开发。 主要负责: 1.

u010401391的专栏 1029

一个好用的C++数据库操作库:OTL

OTL库是一个功能强大、高效且易用的C++数据库访问库。它提供了丰富的功能和简洁的接口,使得C++开发者能够方便地进行数据库操作。可以使用OTL访问基本上所有的数据库,在你更换数据库时不用修改任何业务代码。强烈推荐在C++开发中使用。

红军不怕远征难,万水千山只等闲 2389

OTL技术应用

什么是OTL:OTL 是 Oracle, Odbc and DB2-CLI TemplateLibrary 的缩写,是一个操控关系数据库的C++模板库,它目前几乎支持所有的当前各种主流数据库,如下表所示: 数据库 访问接口 支持版本 Oracle OCI OCI7、OCI8、O...

391

C++06使用OTL操作Oracle数据库

一、编写代码   注:以下代码来自OTL示例   文本查看复制代码打印关于     # /*     #  *otl_test.cpp     # *     # */        #include     using namespace std;       #include        #define OTL_ORA10G_R2 // C

晴天的专栏 1180
上一篇: IE编程
下一篇: LINUX下的CP命令的源代码
skyremember
博客等级 码龄20年 204粉丝 484原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值