在linux下利用ODBC API访问数据库所需的软件及安装方法 rt,谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 linux 下一般是直接用C API啊。并且MYSQL好象没有发布官方的LINUXODBC connector. linux下有非常有名的unixODBC,它自带mysql和pgsql的odbc驱动。很好用的。 怎么这么相似的问题,上次有个家伙到我们公司来面试,我们的头让我出了个小题目:其中就有linux下odbc的使用方法,也就是连接过程吧:我简单的说一下吧:首先得有odbc驱动程序吧,oracle,还有unixODBC都是可以使用得,然后就会是配置数据源了。这个是在server端完成的。在代码中当然是连接数据库,写sql 语句查询,断开等等了。这个是连接的: //分配环境句柄 m_retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_henv); m_retcode = SQLSetEnvAttr(m_henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); //分配链接句柄 m_retcode = SQLAllocHandle(SQL_HANDLE_DBC, m_henv, &m_odbc); //链接数据库 m_retcode = SQLConnect(m_odbc, (SQLCHAR*)cpServerName, SQL_NTS, (SQLCHAR*)cpUserName, SQL_NTS, (SQLCHAR*)cpPassword, SQL_NTS); 下边是查询的: //分配句柄 m_retcode = SQLAllocHandle(SQL_HANDLE_STMT, m_odbc, &m_hstmt); //绑定列 SQLINTEGER outid; SQLINTEGER outidlen; //返回的数据长度 SQLBindCol(m_hstmt, 1, SQL_C_SLONG, &outid, sizeof(outid), &outidlen); int ntId = iputid; SQLINTEGER nSQLTestValue = 0; //绑定参数 m_retcode = SQLBindParameter(m_hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ntId, 0, &nSQLTestValue); //根据SQL语句查询信息 char szSQLA[] = "select distinct NUMBER from table where ID = ?"; m_retcode = SQLExecDirect(m_hstmt, (unsigned char *)szSQLA, SQL_NTS); while ((m_retcode=SQLFetch(m_hstmt)) != SQL_NO_DATA) { //int result = outid; } //clear SQLFreeHandle(SQL_HANDLE_STMT, m_hstmt); m_hstmt = NULL;写的粗糙,见笑了。 说实话,在window下的几种访问方式,向ADO,ODBC 。代码和你的差不多,但是移植到linux下就有问题,由于我是初学linux,所以很多东西不大懂,呵呵……头说我在安装的时候没把组件装全(没有完全安装),后来我也在那上面安装了组件包,结果找不到ODBCConfig文件,编译没有问题,只是无法找到驱动等。现在重新安装了系统,看看能不能解决。我才刚到公司上班,那以后得多多想你请教了。呵呵…… 为什么要用图形界面呢,只要你了解odbc.ini以及odbcinst.ini文件格式,完全可以自己写配置文件。odbcinst命令行程序一样可以导入文本数据源。 我不知道你用的是哪个发行版的linux,所以假设你是用一般的普通linux发行版好了。假设你安装不上ODBCConfig。只有命令行版本。假设你要使用的还是ASE数据库的ODBC驱动,命令:/usr/bin/odbcinst -i -d -f drivertemplate.txt驱动样例文件如下:(drivertemplate.txt)[Adaptive Server Enterprise]Description = Sybase ODBC DriverDriver = /opt/sybase/ODBC-12_5/lib/libsybdrvodb.soFileUsage = -1可以安装一个ODBC驱动 命令:/usr/bin/odbcinst -i -s -f sampletemplate.txt可以装一个数据源数据源样例文件如下:(sampletemplate.txt)[sampledsn]Description = Sybase ODBC Data SourceUserID = saPassword =Driver = Adaptive Server EnterpriseServer = sampleserverPort = 4100Database = pubs2UseCursor = 1MySQL的驱动及数据源样例文件,内容如下:;; odbc.ini configuration for MyODBC and MyODBC 3.51 Drivers;[ODBC Data Sources]myodbc = MySQL ODBC 2.50 Driver DSN myodbc3 = MySQL ODBC 3.51 Driver DSN [myodbc]Driver = /usr/local/lib/libmyodbc.soDescription = MySQL ODBC 2.50 Driver DSNSERVER = localhostPORT =USER = rootPassword =Database = testOPTION = 3SOCKET = [myodbc3]Driver = /usr/local/lib/libmyodbc3.soDescription = MySQL ODBC 3.51 Driver DSNSERVER = localhostPORT =USER = rootPassword =Database = testOPTION = 3 SOCKET = [Default]Driver = /usr/local/lib/libmyodbc3.soDescription = MySQL ODBC 3.51 Driver DSNSERVER = localhostPORT =USER = rootPassword =Database = testOPTION = 3SOCKET = 直接使用后边一个命令就可以安装了。安装完以后,一般会在/etc/下更新odbc.ini和odbcinst.ini内容。这和ODBCConfig图形界面操作效果一样。并且,有些数据库并不支持ODBCConfig操作。所以,还是命令行或者直接手工更新来得方便。ODBC可移植性相当好,除了include头文件稍有不同以外,基本上不用作任何修改。 mysql如何动态生成交叉表? 初学mysql,买了个虚拟主机空间,用什么客户端管理最好呢? MySQL 已经创建好了表 然后想设置自动增长列 急!!!!! 改进版本的批量给存储过程赋权限的存储过程。 关于还原Mysql数据库乱码的问题 mysql server安装完以后,无法启动服务? 问一个菜鸟问题,没分,请指教。 〓 〓 〓 〓 MySQLDB的菜鸟问题 〓 〓 〓 〓 mysql为啥就突然启动不了呢 mysql子查询 mysql C++调用存储过程的问题
我简单的说一下吧:
首先得有odbc驱动程序吧,oracle,还有unixODBC都是可以使用得,然后就会是配置数据源了。这个是在server端完成的。
在代码中当然是连接数据库,写sql 语句查询,断开等等了。
这个是连接的:
//分配环境句柄
m_retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_henv);
m_retcode = SQLSetEnvAttr(m_henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
//分配链接句柄
m_retcode = SQLAllocHandle(SQL_HANDLE_DBC, m_henv, &m_odbc);
//链接数据库
m_retcode = SQLConnect(m_odbc, (SQLCHAR*)cpServerName, SQL_NTS,
(SQLCHAR*)cpUserName, SQL_NTS,
(SQLCHAR*)cpPassword, SQL_NTS);
下边是查询的:
//分配句柄
m_retcode = SQLAllocHandle(SQL_HANDLE_STMT, m_odbc, &m_hstmt);
//绑定列
SQLINTEGER outid;
SQLINTEGER outidlen; //返回的数据长度
SQLBindCol(m_hstmt, 1, SQL_C_SLONG, &outid, sizeof(outid), &outidlen); int ntId = iputid;
SQLINTEGER nSQLTestValue = 0;
//绑定参数
m_retcode = SQLBindParameter(m_hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &ntId, 0, &nSQLTestValue); //根据SQL语句查询信息
char szSQLA[] = "select distinct NUMBER from table where ID = ?";
m_retcode = SQLExecDirect(m_hstmt, (unsigned char *)szSQLA, SQL_NTS);
while ((m_retcode=SQLFetch(m_hstmt)) != SQL_NO_DATA)
{
//int result = outid;
}
//clear
SQLFreeHandle(SQL_HANDLE_STMT, m_hstmt);
m_hstmt = NULL;
写的粗糙,见笑了。
头说我在安装的时候没把组件装全(没有完全安装),后来我也在那上面安装了组件包,结果找不到ODBCConfig文件,编译没有问题,只是无法找到驱动等。
现在重新安装了系统,看看能不能解决。
我才刚到公司上班,那以后得多多想你请教了。呵呵……
为什么要用图形界面呢,只要你了解odbc.ini以及odbcinst.ini文件格式,完全可以自己写配置文件。
odbcinst命令行程序一样可以导入文本数据源。
假设你安装不上ODBCConfig。只有命令行版本。假设你要使用的还是ASE数据库的ODBC驱动,
命令:/usr/bin/odbcinst -i -d -f drivertemplate.txt
驱动样例文件如下:(drivertemplate.txt)
[Adaptive Server Enterprise]
Description = Sybase ODBC Driver
Driver = /opt/sybase/ODBC-12_5/lib/libsybdrvodb.so
FileUsage = -1
可以安装一个ODBC驱动
命令:/usr/bin/odbcinst -i -s -f sampletemplate.txt
可以装一个数据源
数据源样例文件如下:(sampletemplate.txt)
[sampledsn]
Description = Sybase ODBC Data Source
UserID = sa
Password =
Driver = Adaptive Server Enterprise
Server = sampleserver
Port = 4100
Database = pubs2
UseCursor = 1MySQL的驱动及数据源样例文件,内容如下:
;
; odbc.ini configuration for MyODBC and MyODBC 3.51 Drivers
;[ODBC Data Sources]myodbc = MySQL ODBC 2.50 Driver DSN
myodbc3 = MySQL ODBC 3.51 Driver DSN
[myodbc]
Driver = /usr/local/lib/libmyodbc.so
Description = MySQL ODBC 2.50 Driver DSN
SERVER = localhost
PORT =
USER = root
Password =
Database = test
OPTION = 3
SOCKET =
[myodbc3]
Driver = /usr/local/lib/libmyodbc3.so
Description = MySQL ODBC 3.51 Driver DSN
SERVER = localhost
PORT =
USER = root
Password =
Database = test
OPTION = 3
SOCKET =
[Default]
Driver = /usr/local/lib/libmyodbc3.so
Description = MySQL ODBC 3.51 Driver DSN
SERVER = localhost
PORT =
USER = root
Password =
Database = test
OPTION = 3
SOCKET =
直接使用后边一个命令就可以安装了。
安装完以后,一般会在/etc/下更新odbc.ini和odbcinst.ini内容。
这和ODBCConfig图形界面操作效果一样。
并且,有些数据库并不支持ODBCConfig操作。所以,还是命令行或者直接手工更新来得方便。ODBC可移植性相当好,除了include头文件稍有不同以外,基本上不用作任何修改。