栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

PostgreSQL C++接口libpqxx在ubuntu下环境配置

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PostgreSQL C++接口libpqxx在ubuntu下环境配置

本次主要介绍PostgreSQL C++接口libpqxx在ubuntu下环境配置并测试添加数据到主机windows下PostgreSQL数据库中。

1、打开ubuntu终端,执行命令sudo apt install libpqxx-dev 安装libpqxx-dev
2、打开安装的pqxx文件,依次执行以下命令

ls /usr/include/
ls /usr/include/pqxx
ls /usr/include/pqxx/pqxx


3、回到主机下,在安装好的PostgreSQL的安装目录下,找到data文件夹下pg_hba.conf文件,先拷贝一个副本作为备用,
再打开该文件(可用记事本打开),找到最下面的IPV4 修改IP为0.0.0.0/0 

0.0.0.0/0表示所有的IP地址.它表示的是这样一个集合:
1)所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。
2)对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一 律送进去。
3)如果在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。
改为0.0.0.0/0的目的是为了在虚拟机中也可以访问(虚拟机ip与本机不同)
4、到了这一步,就可以用的测试文件在ubuntu中进行链接。首先将以下三个.cpp文件放入ubuntu中

//con.cpp
#include 
#include  

using namespace std;
using namespace pqxx;

int main(int argc, char* argv[])
{
   try{
      connection C("dbname=testdb user=postgres password=123456 hostaddr=10.4.36.43 port=5432");
      if (C.is_open()) {
         cout << "Opened database successfully: " << C.dbname() << endl;
      } else {
         cout << "Can't open database" << endl;
         return 1;
      }
      C.disconnect ();
   }catch (const std::exception &e){
      cerr << e.what() << std::endl;
      return 1;
   }
}
//table.cpp
#include 
#include  

using namespace std;
using namespace pqxx;

int main(int argc, char* argv[])
{
   char * sql;
   
   try{
      connection C("dbname=testdb user=postgres password=123456 hostaddr=10.4.36.43 port=5432");
      if (C.is_open()) {
         cout << "Opened database successfully: " << C.dbname() << endl;
      } else {
         cout << "Can't open database" << endl;
         return 1;
      }
      
      sql = "CREATE TABLE COMPANY("  
      "ID INT PRIMARY KEY     NOT NULL," 
      "NAME           TEXT    NOT NULL," 
      "AGE            INT     NOT NULL," 
      "ADDRESS        CHAr(50)," 
      "SALARY         REAL );";

      
      work W(C);
      
      
      W.exec( sql );
      W.commit();
      cout << "Table created successfully" << endl;
      C.disconnect ();
   }catch (const std::exception &e){
      cerr << e.what() << std::endl;
      return 1;
   }

   return 0;
} 
//insert.cpp
#include 
#include  

using namespace std;
using namespace pqxx;

int main(int argc, char* argv[])
{
   char * sql;
   
   try{
      connection C("dbname=testdb user=postgres password=123456 hostaddr=10.4.36.43 port=5432");
      if (C.is_open()) {
         cout << "Opened database successfully: " << C.dbname() << endl;
      } else {
         cout << "Can't open database" << endl;
         return 1;
      }
      
      sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  
      "VALUES (1, 'Paul', 32, 'California', 20000.00 ); " 
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  
      "VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); "     
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" 
      "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );" 
      "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" 
      "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );";

      
      work W(C);
      
      
      W.exec( sql );
      W.commit();
      cout << "Records created successfully" << endl;
      C.disconnect ();
   }catch (const std::exception &e){
      cerr << e.what() << std::endl;
      return 1;
   }

   return 0;
}  

打开con.cpp、table.cpp、insert.cpp 修改ip以及PostgreSQL密码为自己的主机ip以及PostgreSQL密码

提示:主机IP查询方法 win+R 输入cmd打开终端 输入命令 ipconfig (linux下输入ifconfig)

5、修改完毕后,打开PostgreSQL,右键Databases,新建一个数据库,数据库名与table.cpp中建立的表名一致,为testdb 

6、回到linux终端 依次输入以下命令,生成可执行文件

g++ con.cpp -o -con -lpqxx -lpq
g++ table.cpp -o -table -lpqxx -lpq
g++ insert.cpp -o -insert -lpqxx -lpq

6、依次链接 建表 插入

./con
./table
./insert

7、回到主机下,依次打开 tsestdb->schemas->Tables->Query Tool 输入以下语句

select *
from company

即可按照insert.cpp中输入的数据进行建表。

8、需要将libpqxx配置在自己的开发环境中,下面展示在利用cMake构建的开发环境中配置libpqxx的方法:

在自己构建的工程目录下,打开src文件夹下的cMakeLists.txt文件夹,依次添加以下语句:

ADD_EXECUTABLE(pq con.cpp)


set(PQXX_INCLUDE_DIR /usr/include)
set(PQXX_LIBRARY_DIR /lib/x86_64-linux-gnu/)

FIND_PATH(
        PQXX_INCLUDE_DIR
        pqxx/pqxx
        HINTS
        ${PQXX_INCLUDE_DIR}
)

FIND_LIBRARY(PQXX_LIBRARY
        NAMES libpqxx-6.4.so libpqxx.a libpqxx.la libpqxx.so  libpq.so.5 libpq.a libpq.so  libpq.so.5.12
        HINTS
        ${PQXX_LIBRARY_DIR})

FIND_PACKAGE_HANDLE_STANDARD_ARGS(pqxx DEFAULT_MSG
        PQXX_INCLUDE_DIR
        PQXX_LIBRARY
        )

IF(pqxx_FOUND)
    SET(PQXX_INCLUDE_DIR ${PQXX_INCLUDE_DIR})
    SET(PQXX_LIBRARIES ${PQXX_LIBRARY})

    MARK_AS_ADVANCED(
            PQXX_LIBRARIES
            PQXX_INCLUDE_DIR
            PQXX_LIBRARY
    )
ELSE()
    SET(PQXX_LIBRARY "" CACHE STRING
            "An optional hint to a directory for finding `PQXX`"
            )
    MESSAGE(FATAL_ERROR
            "Could not find PQXX package. ")
ENDIF()

target_link_libraries( pq PRIVATE ${PQXX_LIBRARIES})

即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号