文档章节

informix数据库在linux中的安装以及用java/c/c++访问

wangxuwei
 wangxuwei
发布于 06/23 01:21
字数 1432
阅读 51
收藏 2
点赞 0
评论 0

一、安装前准备

安装JDK(略)

到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。

我也放到了百度云天翼云上供下载。

创建informix用户、组和安装目录:

sudo adduser  --home /opt/informix  informix

二、准备informix环境变量

在.bashrc追加下面内容(在informix用户和日常登录的用户都加。OS用户同事也是informix用户)

export INFORMIXSERVER=ifxserver
export INFORMIXDIR=/opt/informix
export ONCONFIG=onconfig.ifxserver
export INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts.ifxserver
export PATH=$INFORMIXDIR/bin:/usr/bin:${PATH}:.
export DB_LOCALE=zh_CN.utf8
export CLIENT_LOCALE=zh_CN.utf8

三、创建数据库文件的安装目录

su - informix
mkdir $INFORMIXDIR/dbs
touch $INFORMIXDIR/dbs/rootdbs
chmod 660 $INFORMIXDIR/dbs/rootdbs

四、数据库软件安装
 使用root用户执行/mypkg/ids_install文件进行安装, 注意这里从用户informix 切换到 root 用户时,su root 而不是su - root,这样可以保留informix环境,安装时不需要即可安装到指定目录:
安装过程中选择不创建实例,其他都选择默认选项。
===============================================================================
Server Instance
---------------

Type 'back' to go to the previous step or 'quit' to cancel the installation.

Create a database server instance?

  ->1- Yes - create a server instance
    2- No - do not create a server instance

ENTER THE NUMBER FOR YOUR CHOICE, OR PRESS <ENTER> TO ACCEPT THE DEFAULT:: 2

当然你的硬盘很大也可以选创建默认安装实例demo_no。

五、数据库初始化
回到informix用户:
将$INFORMIXDIR/etc/目录中的onconfig.std文档拷贝一份,命名为$ONCONFIG变量指定(onconfig.ifxserver)

cd $INFORMIXDIR/etc  
cp onconfig.std onconfig.ifxserver

,并编辑以下参数:

ROOTPATH  /opt/informix/dbs/rootdbs 
DBSERVERNAME  ifxserver
MIRRORPATH $INFORMIXDIR/tmp/ifxserver.root_mirror

将$INFORMIXDIR/etc/目录中的sqlhosts.std文档拷贝一份,名称为$INFORMIXSQLHOSTS变量指定的名称(sqlhosts.ifxserver)
 

cp $INFORMIXDIR/etc/sqlhosts.std $INFORMIXDIR/etc/sqlhosts.ifxserver

,并编辑为一下内容:

#demo_on	onipcshm	on_hostname	on_servername
ifxserver  	onsoctcp  	127.0.0.1    	9088

初始化数据库:oninit -ivy

六、启动停止数据库

启动数据库oninit -vy

停止onmode -ky

七、使用dbaccess创建数据库testdb

1、使用dbaccess进入informix交互环境

2、选择Database,回车

3、选择 Create,回车

4、输入数据库名:testdb,回车

5、选择 Dbspace(表空间)  ,回车

6、选择跟局数据数据库bureaudb一样的表空间,回车

7、选择 Log ,回车

8、选择 Log,回车(选择日志模式,其他不支持事务)

9、选择 Exit,回车

10、选择 Create-new-database ,回车。

此时数据库应该已经建立。

八、表脚本sqlfile.sql

create table customer 
  (
    num serial not null ,
    name char(15),
    create_time datetime year to fraction(3)
  );

insert into customer values (1,'萝莉','2010-11-17 15:41:00.000');

dbaccess testdb sqlfile.sql 或者 dbaccess testdb@ifxserver sqlfile.sql

九、java

$INFORMIXDIR/lib/ifxjdbc.jar导入到CLASSPATH(eclipse构建路径)

import java.sql.*;

public class TestInformixsql {
    static String url = "jdbc:informix-sqli://127.0.0.1:9088/testdb";
 
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Connection conn = null;
        try {
            Class.forName("com.informix.jdbc.IfxDriver");
            conn = DriverManager.getConnection(url, "mymotif", "wxwpxh");
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM customer");
            int col_count=st.getResultSet().getMetaData().getColumnCount();
            while (rs.next()) {
                for(int col=1;col<=col_count;col++){
                    System.out.print(rs.getString(col));
                    System.out.print("  ");
                }
                System.out.println();
            }
            rs.close();
            st.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}

十、esqlc

demo1.ec

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

EXEC SQL define NAME_LEN	15;

int main()
{
EXEC SQL BEGIN DECLARE SECTION;
    int  num;
    char name[ NAME_LEN + 1 ];
EXEC SQL END DECLARE SECTION;

    printf( "DEMO1 Sample ESQL Program running.\n\n");
    EXEC SQL WHENEVER ERROR STOP;
    EXEC SQL connect to 'testdb';

    EXEC SQL declare democursor cursor for
	select num, name
	   into :num, :name
	   from customer
	   where num < 100;

    EXEC SQL open democursor;
    for (;;)
	{
	EXEC SQL fetch democursor;
	if (strncmp(SQLSTATE, "00", 2) != 0)
	    break;

	printf("%d %s\n",num, name);
	}

    if (strncmp(SQLSTATE, "02", 2) != 0)
        printf("SQLSTATE after fetch is %s\n", SQLSTATE);

    EXEC SQL close democursor;
    EXEC SQL free democursor;

    EXEC SQL disconnect current;
    printf("\nDEMO1 Sample Program over.\n\n");

   exit(0);
}

Makefile

# targets
PRG 	= demo1
INCL	=-I$(INFORMIXDIR)/incl -I$(INFORMIXDIR)/incl/esql
ESQL 	= $(INFORMIXDIR)/bin/esql
RPATH	= $(INFORMIXDIR)/lib:$(INFORMIXDIR)/lib/esql

$(PRG): $(PRG).ec
	$(ESQL) -o $(PRG) $(INCL) $(PRG).ec  -Wl,-rpath=$(RPATH)
clean:
	rm $(PRG) $(PRG).c

十一、c++

queryex1.cpp

#include <iostream>
#include <it.h>
#include <string>
using namespace std;

int main(int argc, char *argv[])
{
    if (argc != 1)
        {
        cout << "Usage: " << argv[0]  << endl;
        return 1;
        }

    // Make a connection using defaults
    ITConnection conn;
    conn.SetDBInfo(ITDBInfo(ITString("testdb")));
    conn.Open();

    // Create a query object
    ITQuery q(conn);

    if (argc != 1)
        {
        // Drop the table first; ignore errors if it didn't exist
        cout << "Usage:./queryex1" << endl;
    	conn.Close();
    	return 0;
        }

    // Does the table exist? If not, then create it.                // 1 begin
    ITRow *r1 = q.ExecOneRow(
        "select owner from systables where tabname = 'customer';");
    if ( !r1
         && (!q.ExecForStatus(
             "create table customer (    num serial not null ,name char(15),create_time datetime year to fraction(3));"
			     )
            ))
        {
        cerr << "Could not create table `customer'!" << endl;
        return 1;
        }                                                            // 1 end

    // Show the contents of the table                              // 2 begin
    cout << "These are the members of the Informix fan club, version ";
    ITValue *rel = q.ExecOneRow                                     
        ( "select owner from systables where tabname = ' VERSION';" );
    cout << rel->Printable() << " ALWAYS_DIFFERENT" << endl;
    rel->Release();                                                 

    ITSet *set = q.ExecToSet
        ("select * from customer order by 1;"); 
    if( !set )
    {
	    cout << "Query failed!" << endl;
	    conn.SetTransaction(ITConnection::Abort);
	    conn.Close();
	    return -1;
    }
    ITValue *v;
    while ((v = set->Fetch()) != NULL)
    {
        cout << v->Printable() << endl;
        v->Release();
    }                                                           
    set->Release();                                                 // 2 end

    cout << endl;

    conn.Close();

    return 0;
}

Makefile

CPPIFDIR	= $(INFORMIXDIR)
CCHOME		= /usr

CCPP		= $(CCHOME)/bin/g++
CCPLUS		= $(CCPP) $(HEADEROPTS)
CCPPFLAGS 	= -I$(INFORMIXDIR)/incl/dmi -I$(INFORMIXDIR)/incl \
	-I$(INFORMIXDIR)/incl/esql
CCPLINK		= $(CCPLUS) $(CCFLAGS) $(CCPPFLAGS)
CC		= $(CCHOME)/bin/gcc
C-COMPILE-FLAGS	= $(CCFLAGS)
CCDEFS		= -DLINUX -DIT_HAS_DISTINCT_LONG_DOUBLE \
	-DIT_COMPILER_HAS_LONG_LONG -DIT_DLLIB -DMITRACE_OFF -fPIC
CCFLAGS		= -g $(CCDEFS) -fsigned-char

ESQL		= $(INFORMIXDIR)/bin/esql

RANLIB		= echo

LOCALINCL	= -I$(CPPIFDIR)/incl/c++

LIBS_SYSTEM	= -lm -ldl -lcrypt -lnsl
LIBS_ESQL	= -L$(INFORMIXDIR)/lib/esql -L$(INFORMIXDIR)/lib -lifsql \
 -lifasf -lifgen -lifos -lifgls -lifglx $(INFORMIXDIR)/lib/esql/checkapi.o
LIBS_LIBMI	= -L$(INFORMIXDIR)/lib/dmi -lifdmi 
LIBS_CPPIF	= -L$(CPPIFDIR)/lib/c++ -lifc++
LIBS		= $(LIBS_CPPIF) $(LIBS_LIBMI) $(LIBS_ESQL) $(LIBS_SYSTEM) 
RPATH		= $(INFORMIXDIR)/lib:$(INFORMIXDIR)/lib/esql:$(INFORMIXDIR)/lib/dmi:$(INFORMIXDIR)/lib/c++

PROGRAMS	= queryex1
.SUFFIXES: .cc .o .hdr .cpp

.cc.o:
	@rm -f $@
	$(CCPLUS) $(CCFLAGS) $(LOCALINCL) $(CCPPFLAGS) -c $<

.cpp.o:
	@rm -f $@
	$(CCPLUS) $(CCFLAGS) $(LOCALINCL) $(CCPPFLAGS) -c $<

all: 	$(PROGRAMS)

queryex1: queryex1.o
	$(CCPLINK) -o queryex1 queryex1.o $(SUBSYSTEMS.link) $(LIBS) -Wl,-rpath=$(RPATH)

clean:
	$(RM) *.o $(PROGRAMS) core

 

=============================================================

逻辑日志满处理:

$ oninit -vy

停留在

Initializing DBSPACETEMP list...succeeded
------------启动数据库到这里不动了。

查看/opt/informix/tmp/online.log :

21:17:40  Process exited with return code 127: /bin/sh /bin/sh -c /opt/informix/etc/alarmprogram.sh 3 20 "Logical Logs are Full -- Backup is Needed." "Logical Log Files are Full -- Backup is Needed

发现逻辑日志满了,需要备份。

touch /opt/informix/dbs/logbackup1
chmod 660 /opt/informix/dbs/logbackup1
vi etc/onconfig.ifxserver
把:
LTAPEDEV /dev/tapedev
改为:
LTAPEDEV /opt/informix/dbs/logbackup1

ontape -a

 

© 著作权归作者所有

共有 人打赏支持
wangxuwei
粉丝 21
博文 326
码字总数 110959
作品 0
杭州
其他
用 JNI 进行 Java 编程(2)

从 Java 程序调用 C/C++ 代码 概述 当无法用 Java 语言编写整个应用程序时,JNI 允许您使用本机代码。在下列典型情况下,您可能决定使用本机代码: 希望用更低级、更快的编程语言去实现对时间...

Jerikc
2012/10/08
0
0
android开发教程(4)— jni编程之采用 javah 从java调用C++

用Java调用C/C++代码 当无法用 Java 语言编写整个应用程序时,JNI 允许您使用本机代码。在下列典型情况下,您可能决定使用本机代码: 希望用更低级、更快的编程语言去实现对时间有严格要求的...

刘小米
2014/09/18
0
1
java调用dll或so动态库文件(c++/c)

java调用dll或so动态库文件(c++/c)开发平台:Eclipse3.3.1.1+CDT(cdt-master-4.0.3)+MinGW(MinGW-5.1.4) 一:下面是java调用dll(C++) 1:下载并安装cdt :http://www.eclipse.org/cdt/downloa......

lee123lee
2013/08/30
0
0
简单介绍Java和C/C++交互

1、Java调用C/C++: Java代码 [JNITest.java]: package darcy; public class JNITest { static{ System.loadLibrary("Hello"); } public native void HelloKitty(); public static void main(......

叶大侠
2014/03/18
0
0
Android 开发 及 编译系统

一、Android 的开发分为三个类型 移植开发移动设备系统;android 系统级开发;应用程序 可以把android 分为四个层次,从底层往上依次为:linux 内核、C/C++ 库、java 框架和java 应用程序。 ...

SibylY
2015/06/16
0
0
学习——>JNI设置C++与java的结合

JNI是Java Native Interface的英文缩写, 中文翻译为本地调用, 自从Java 1.1开始就成为了Java标准的一部分. C/C++是系统级的编程语言, 可以用来开发任何和系统相关的程序和类库, 但是Java本身...

home-kevin
2014/01/07
0
0
jni c++ dll java

java通过jni 来调用.dll(在linux中称为.so文件) c++->.dll (windows) c++->.so (linux) 所以加载时,只要指定名就行了. 开发步骤; /* * 1.建立java工程编写带有native声明的方法的java类 ...

~小白
2012/03/28
0
0
1-1 ubuntu配置 --- ubuntu开发环境搭建

这篇文章就没什么技术含量了,只是从官网拷过来后,稍加整理的...仅供我自己参考... 1-1 ubuntu配置 --- ubuntu开发环境搭建 1-3 ubuntu开发环境搭建 一.准备工作 ubuntu server安装好后,...

zhuran0822
2014/01/22
0
0
在Ubuntu14下构建Hotspot并使用Eclipse调试

偶尔会看一点点JVM代码,所以尝试构建了一把最新的OpenJDK8 1.环境介绍 1)时间: 2015-05-13 2)系统: Linux haogrgr-vm 3.16.0-30-generic #40~14.04.1-Ubuntu SMP Thu Jan 15 17:43:14 UTC 2...

德胜
2015/05/14
0
2
android开发教程(3)— jni编程之采用SWIG从Java调用C/C++

Android 从Java调用C/C++ 当无法用 Java 语言编写整个应用程序时,JNI 允许您调用C/C++本机代码。在下列典型情况下,您可能决定使用本机代码: 希望用更低级、更快的编程语言C/C++去实现对时...

刘小米
2014/09/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Jvm堆内存的划分结构和优化,垃圾回收详解(详细解答篇)

在JVM中堆空间划分如下图所示 上图中,刻画了Java程序运行时的堆空间,可以简述成如下2条 1.JVM中堆空间可以分成三个大区,新生代、老年代、永久代 2.新生代可以划分为三个区,Eden区,两个幸...

嘻哈开发者
14分钟前
0
0
CentOS 7.4 设置系统字符编码

1.语言变量LANG在 /etc/locale 文件中。 2.可以通过/ect/profile 来修改LC_TYPE 变量的值 添加如下代码 export LC_ALL="zh_CN.GBK" export LANG="zh_CN.GBK" 到profile文件中,变量的可以修改...

qimh
15分钟前
0
0
Kafka相关使用

安装前提,需要有jdk环境,还有zookeeper环境 zookeeper下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/ zookeeper安装参考:https://www.jianshu.com/p/f7037105db46 kafka的下......

朝如青丝暮成雪
16分钟前
0
0
CentOS7 解决无法使用tab自动补全 tab代码提示

一、前言 对于刚刚开始学习linux的新人来说,linux的一切都显着神秘,只能惊叹于大牛在Linux上行云流水的操作。今天介绍一下在linux中自动补全的功能。 对于新人来说,在不懂得技巧的情况下,...

ziluopao
22分钟前
0
0
redis安装

https://www.cnblogs.com/feijl/p/6879929.html

ghou-靠墙哭
22分钟前
0
0
Spring核心——注解自动装载

从配置上扩展 之前的文章介绍了Spring的IoC容器配置管理方面的详细内容,需要了解的可以从IoC容器的设计模式开始阅读。在介绍基于注解配置的配置之前我们再重复一下在之前提到的基本认识: ...

随风溜达的向日葵
26分钟前
1
0
ElasticSearch学习(8)—— SearchType

Elasticsearch有四种类型的SearchType 1、query and fetch 向索引的所有分片(shard)都发出查询请求,各分片返回的时候把元素文档(document)和计算后的排名信息一起返回。这种搜索方式是最...

叶枫啦啦
27分钟前
0
0
MYSQL备份工具-mysqldump

介绍 mysqldump 是文本备份还是二进制备份 它是文本备份,如果你打开备份文件你将看到所有的语句,可以用于重新创建表和对象。它也有 insert 语句来使用数据构成表。 语法 mysqldump 的语法是...

郭恩洲_OSC博客
29分钟前
0
0
我的第一个go web框架

使用了beego等go web开发框架之后,感觉各种不方便,尤其是在接收参数、和自定义输出的时候,各种难受,定义各种model,这不是找事情嘛??尤其是在角色权限控制的时候我也感觉力不从心。。。...

独坐苔痕但观罗敷
30分钟前
0
0
自动代码生成图形化工具

自动生成Spring代码 https://github.com/EliMirren/Spring-generator 自动生成Vertx https://gitee.com/duhua/vertx-generator...

奋斗的小牛
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部