Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: cách kết nối tới CSDL PostgreSQL bằng C trên Linux?

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    23

    Mặc định cách kết nối tới CSDL PostgreSQL bằng C trên Linux?

    Chào các bạn. Cho mình hỏi cách kết nối tới csdl PostgreSQL sử dụng C, hoặc có thư viện nào có hỗ trợ kết nối không? Xin cảm ơn

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    PostgreSQL hỗ trợ C không còn gì phải boăn khoăn cả, còn tìm thư viện gì nữa?
    Đọc cái này sẽ hiểu: postgresql.org/docs/8.2/static/libpq.html

    Đây là một ví dụ:
    C Code:
    1. #include <stdio.h>
    2. #include <postgresql/libpq-fe.h>
    3. #include <string>
    4.  
    5.  int main()
    6. {
    7.     PGconn          *conn;
    8.     PGresult        *res;
    9.     int             rec_count;
    10.     int             row;
    11.     int             col;
    12.  
    13.     conn = PQconnectdb("dbname=ljdata host=localhost user=dataman password=supersecret");
    14.     if (PQstatus(conn) == CONNECTION_BAD) {
    15.         puts("We were unable to connect to the database");
    16.         exit(0);
    17.     }
    18.  
    19.     res = PQexec(conn, "update people set phonenumber=\'5055559999\' where id=3");
    20.     res = PQexec(conn, "select lastname,firstname,phonenumber from people order by id");
    21.  
    22.     if (PQresultStatus(res) != PGRES_TUPLES_OK) {
    23.         puts("We did not get any data!");
    24.         exit(0);
    25.     }
    26.  
    27.     rec_count = PQntuples(res);
    28.  
    29.     printf("We received %d records.\n", rec_count);
    30.     puts("==========================");
    31.  
    32.     for (row=0; row<rec_count; row++) {
    33.         for (col=0; col<3; col++) {
    34.             printf("%s\t", PQgetvalue(res, row, col));
    35.         }
    36.         puts("");
    37.     }
    38.  
    39.     puts("==========================");
    40.    
    41.     PQclear(res);
    42.     PQfinish(conn);
    43.     return 0;
    44. }

    C Code:
    1. #include <stdio.h>
    2. #include "libpq-fe.h"
    3.  
    4. void exit_nicely(PGconn * conn)
    5. {
    6.     PQfinish(conn);
    7.     exit(1);
    8. }
    9.  
    10. int main()
    11. {
    12.     char * pghost, * pgport, * pgoptions, * pgtty;
    13.     char * dbName;
    14.     char name[256];
    15.     int i, num_records;
    16.  
    17.     PGconn * conn;
    18.     PGresult * res;
    19.  
    20.     pghost = NULL;
    21.     pgport = NULL;
    22.     pgoptions = NULL;
    23.     pgtty = NULL;
    24.  
    25.     dbName = "test";
    26.  
    27.     conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
    28.  
    29.     if (PQstatus(conn) == CONNECTION_BAD)
    30.     {
    31.         fprintf(stderr, "Connection to database \"%s\" failed.\n", dbName);
    32.         fprintf(stderr, "%s", PQerrorMessage(conn));
    33.         exit_nicely(conn);
    34.     }
    35.  
    36.     res = PQexec(conn, "SET DateStyle = 'European'");
    37.  
    38.     if ((!res) || (PQresultStatus(res) != PGRES_COMMAND_OK))
    39.     {
    40.         fprintf(stderr, "SET command failed\n");
    41.         PQclear(res);
    42.         exit_nicely(conn);
    43.     }
    44.     PQclear(res);
    45.  
    46.     res = PQexec(conn,
    47.         "SELECT first_name, last_name, hired_at"
    48.         " FROM employees"
    49.         " ORDER BY last_name, first_name"
    50.     );
    51.     if ((!res) || (PQresultStatus(res) != PGRES_TUPLES_OK))
    52.     {
    53.         fprintf(stderr, "SELECT command did not return tuples properly\n");
    54.         PQclear(res);
    55.         exit_nicely(conn);
    56.     }
    57.  
    58.     printf("%-40s%-20s\n", "Name:", "Hired At:");
    59.     for(i=0;i<60;i++)
    60.     {
    61.         printf("-");
    62.     }
    63.     printf("\n");
    64.  
    65.     num_records = PQntuples(res);
    66.  
    67.     for(i = 0 ; i < num_records ; i++)
    68.     {
    69.         sprintf(name, "%s %s", PQgetvalue(res, i, 0), PQgetvalue(res, i, 1));
    70.         printf("%-40s%-20s\n", name, PQgetvalue(res, i, 2));
    71.     }
    72.  
    73.     PQclear(res);
    74.  
    75.     PQfinish(conn);
    76.  
    77.     return 0;
    78.  
    79. }
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  3. #3
    Ngày gia nhập
    12 2007
    Bài viết
    23

    Bạn ơi. Cho mình hỏi thêm là khi mình biên dịch code thì báo lỗi là không tìm thấy file postgresql/libpq-fe.h, postgresql/libpq-fe.h: no such file or directory. Mình nghĩ là bản posgres của mình có vấn đề. Mong bạn hướng dẫn mình xoá hoàn toàn bản postgres trên máy fedora của mình, vì mình đã lỡ cài chồng 1 bản postgres khác và bây h cứ rồi tung lên, mong bạn hướng dẫn mình xoá sạch hết và cài mới lại từ đâu. Cám ơn bạn nhiều.

  4. #4
    Ngày gia nhập
    09 2008
    Bài viết
    57

    Bạn đã cài gói postgres-dev chưa. Những gói này sẽ chưa file header (.h) cho việc phát triển.
    Ghi rõ license hoặc 0 điểm

  5. #5
    Ngày gia nhập
    12 2007
    Bài viết
    23

    Trích dẫn Nguyên bản được gửi bởi doime Xem bài viết
    Bạn đã cài gói postgres-dev chưa. Những gói này sẽ chưa file header (.h) cho việc phát triển.
    Oh. Thanks bạn nhiều lắm. Mình làm được rồi.

Các đề tài tương tự

  1. Database Cách kết nối CSDL MySQL trên hosting Linux trong C#?
    Gửi bởi Ken Zaki trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 17-12-2012, 10:37 PM
  2. Muốn học về Linux để phát triển theo hướng mã nguồn mở trên Linux thì phải làm những gì?
    Gửi bởi vncoder trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 7
    Bài viết cuối: 06-01-2012, 07:58 AM
  3. Source code C# trên postgresql,help me!
    Gửi bởi Csmdd trong diễn đàn Dự án & Source code C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 08-02-2011, 04:30 PM
  4. Lập trình C trong linux. Cách biên dịch chương trình C trên Linux như thế nào?
    Gửi bởi thangbn trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 5
    Bài viết cuối: 30-05-2009, 11:38 AM
  5. Làm việc với kí tự và chuỗi trong lập trình C trên Linux [Linux Programming]
    Gửi bởi Xcross87 trong diễn đàn Thủ thuật, Tutorials và Mã nguồn
    Trả lời: 4
    Bài viết cuối: 02-10-2007, 11:33 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn