暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL数据库使用odbc示例

shengli 2024-08-22
441

PostgreSQL数据库的ODBC配置可以使得应用程序通过ODBC接口与PostgreSQL数据库进行通信。这使得各种应用程序可以跨平台并与不同的数据库管理系统进行交互。

  1. 安装odbc驱动:
sudo apt-get install unixodbc unixodbc-dev odbc-postgresql
  1. 配置数据源名称 (DSN)
    要通过ODBC连接PostgreSQL数据库,需要设置一个DSN。DSN包含ODBC驱动程序连接数据库所需的详细信息。

配置/etc/odbc.ini

[PostgreSQL] Description = PostgreSQL ODBC Data Source Driver = PostgreSQL Unicode Servername = localhost Port = 5432 Database = postgres User = postgres Password = postgres

配置/etc/obdcinst.ini

[PostgreSQL ANSI] Description=PostgreSQL ODBC driver (ANSI version) Driver=psqlodbca.so Setup=libodbcpsqlS.so Debug=0 CommLog=1 UsageCount=1 [PostgreSQL Unicode] Description=PostgreSQL ODBC driver (Unicode version) Driver=psqlodbcw.so Setup=libodbcpsqlS.so Debug=0 CommLog=1 UsageCount=1

可通过isql验证是否安装配置成功

postgres@slpc:~$ isql -v PostgreSQL +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select * from t1; +------------+ | a | +------------+ | 10 | +------------+ SQLRowCount returns 1 1 rows fetched
  1. 在应用程序中使用psqlODBC

代码示例:

#include <sqlext.h> #include <stdio.h> void ODBC_error ( /* Get and print ODBC error messages */ SQLHENV henv, /* ODBC Environment */ SQLHDBC hdbc, /* ODBC Connection Handle */ SQLHSTMT hstmt) /* ODBC SQL Handle */ { UCHAR sqlstate[10]; UCHAR errmsg[SQL_MAX_MESSAGE_LENGTH]; SDWORD nativeerr; SWORD actualmsglen; RETCODE rc = SQL_SUCCESS; while ( rc != SQL_NO_DATA_FOUND) { rc = SQLError(henv, hdbc, hstmt, sqlstate, &nativeerr, errmsg, SQL_MAX_MESSAGE_LENGTH - 1, &actualmsglen); if (rc == SQL_ERROR) { printf ("SQLError failed!\n"); return; } if (rc != SQL_NO_DATA_FOUND) { printf ("SQLSTATE = %s\n", sqlstate); printf ("NATIVE ERROR = %d\n", nativeerr); errmsg[actualmsglen] = '\0'; printf ("MSG = %s\n\n", errmsg); } } if (hdbc != SQL_NULL_HDBC) { SQLFreeHandle (SQL_HANDLE_DBC, hdbc); } if (henv != SQL_NULL_HENV) { SQLFreeHandle (SQL_HANDLE_ENV, henv); } } int main(void) { SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc = SQL_NULL_HDBC; SQLHSTMT hstmt = SQL_NULL_HSTMT; RETCODE rc = SQL_SUCCESS; rc = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if (rc != SQL_ERROR) { printf("SQLAllocHandle() OK\n"); rc = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3,0); if (rc != SQL_ERROR) { printf("SQLSetEnvAttr() ok\n"); rc = SQLAllocHandle (SQL_HANDLE_DBC, henv, &hdbc); if ( rc != SQL_ERROR) { printf("SQLAllocHandle() ok\n"); rc = SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF,0); if (rc != SQL_ERROR) { printf("SQLSetConnectAttr() ok\n"); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); } } } } if (rc == SQL_ERROR) { ODBC_error (henv, hdbc, hstmt); } }

需要注意编译时要加上-lodbc

参考文档:
psqlODBC - PostgreSQL ODBC driver
Microsoft ODBC Driver for SQL Server

最后修改时间:2024-08-23 09:46:17
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论