您的位置:首页 > 运维架构 > Linux

install and use odbc at linux

2012-08-18 09:01 246 查看
</pre>//install unixodbc<p></p><p>download  from <a target=_blank href="http://www.unixodbc.org/">点击打开链接</a></p><p>$tar zxvf unixODBC-2.3.0.tar.gz</p><p>$cd unixODBC-2.3.0</p><p>$ cmake -G "Unix Makefiles" -DWITH_UNIXODBC=1</p><p>$make</p><p>$make install</p><p></p><p>//install mysql-connector</p><p>download from <a target=_blank href="http://www.mysql.com/downloads/connector/cpp/1.1.html">点击打开链接</a></p><p>$tar  mysql-connector-odbc-5.1.11-src.tar.gz</p><p>$cd mysql-connector-odbc-5.1.11-src</p><p>$./comfigure</p><p>$make</p><p>$make install</p><p></p><p>//odbc.ini (we also can use the file $MYSQL_CONNECTOR_DIR/test/odbc.ini, for example : /home/lee/Downloads/mysql-connector-odbc-5.1.11-src/test/odbc.ini )</p><p>$vi /etc/odbc.ini</p><p></p><pre class="cpp" name="code">[myodbc]
Description     = MySQL test database
Trace       = Off
TraceFile   = stderr
Driver      = /home/lee/Downloads/mysql-connector-odbc-5.1.11-src/lib/libmyodbc5.so
SERVER      = 127.0.0.1
USER        = root
PASSWORD    = sbivfh
PORT        = 3306

DATABASE    = test


//save it use :wq

export ODBCINI=/etc/odbc.ini

//test

[root@localhost etc]# isql -v myodbc
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+

SQL> show databases;
+-----------------------------------------------------------------+
| Database                                                        |
+-----------------------------------------------------------------+
| information_schema                                              |
| mysql                                                           |
| performance_schema                                              |
| test                                                            |
+-----------------------------------------------------------------+


#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <stdlib.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <stdio.h>

/*	error code:
1	undefined reference to `SQLAllocHandle' ,
You need to ask gcc to link with odbc (-lodbc)

2	error while loading shared libraries: libodbc.so.1: cannot open shared object file: No such file or directory
echo $LD_LIBRARY_PATH
LD_LIBRARY_PATH=/usr/local/lib/
echo $LD_LIBRARY_PATH
export LD_LIBRARY_PATH

3	[unixODBC][Driver Manager]Data source name not found, and no default driver specified (0)
[myodbc]
Description     = MySQL test database
Trace       = Off
TraceFile   = stderr
Driver      = /home/lee/Downloads/mysql-connector-odbc-5.1.11-src/lib/libmyodbc5.so
SERVER      = 127.0.0.1
USER        = root
PASSWORD    = sbivfh
PORT        = 3306

DATABASE    = test
*/

/*
mysql> CREATE TABLE test_table(col1 INT,col2 VARCHAR(40),col3 SMALLINT,col4 TIMESTAMP);
INSERT INTO test_table(col1,col2,col3) VALUES(1,'lee',111);
*/
SQLHENV       	V_OD_Env;    // Handle ODBC environment
long       	V_OD_erg;    // result of functions
SQLHDBC       	V_OD_hdbc;                      // Handle connection
SQLHDBC 	V_OD_hstmt;
char       	V_OD_stat[10];    // Status SQL
SQLINTEGER     	V_OD_err,V_OD_rowanz,V_OD_id;
SQLSMALLINT     V_OD_mlen,V_OD_colanz;
char            V_OD_msg[200],V_OD_buffer[200];

int main()
{
printf("test unix odbc\n");
// 1. allocate Environment handle and register version
V_OD_erg=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error AllocHandle\n");
exit(0);
}
V_OD_erg=SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error SetEnv\n");
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}

// 2. allocate connection handle, set timeout
V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error AllocHDB %d\n",V_OD_erg);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
SQLSetConnectAttr(V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0);

// 3. Connect to the datasource "web"
V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "myodbc", SQL_NTS,
(SQLCHAR*) "root", SQL_NTS,
(SQLCHAR*) "sbivfh", SQL_NTS);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error SQLConnect %d\n",V_OD_erg);
SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1,  (SQLCHAR*)V_OD_stat, &V_OD_err, (SQLCHAR*)V_OD_msg,100,&V_OD_mlen);
printf("%s (%d)\n",V_OD_msg,V_OD_err);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
printf("Connected !\n");
V_OD_erg=SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt);
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Fehler im AllocStatement %d\n",V_OD_erg);
SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, (SQLCHAR*)V_OD_stat,&V_OD_err,(SQLCHAR*)V_OD_msg,100,&V_OD_mlen);
printf("%s (%d)\n",V_OD_msg,V_OD_err);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
// to be continue ...
return 0;
}
/*
[lee@localhost project]$  g++  -g -o odbc_test odbc_test.cc   -L/usr/local/lib/  -lodbc
[lee@localhost project]$ ./odbc_test
test unix odbc
Connected !
*/


$ vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

~
// add  a new line:
<pre class="html" name="code">-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

# service iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules: iptables-restore: line 11 failed
                                                           [FAILED]
// do not care the error!!!








                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: