| 導購 | 订阅 | 在线投稿
分享
 
 
 

在C、JAVA、PHP中操作postgreSql

來源:互聯網  2008-05-18 21:58:25  評論

postgresql的好用不亞于mysql,下文介紹了幾種編程工具與postgresql的交互。

1.C操作postgreSql

程序:

/*程序在redhat6.0上調試通過

*該程序使用pgsql的內部函數實現數據庫的一般功能

*這裏create,insert,select,update,drop幾個最常用的SQL語句

*具體還有些更強大的功能,如阻塞等,需要進一步研究

*詳細資料可以查看參考手冊,那邊有所有的函數調用*/

/*頭文件*/

#include <stdio.h>

#include

main() {

char *pghost,

*pgport,

*pgoptions,

*pgtty;

char *dbName;

int nFields;

int i, j;

PGconn *conn;

PGresult *res;

/*

* 程序開頭需要設定連接到數據庫服務器的一些參數,如果設置值爲NULL,

* 則使用環境變量中設置的缺省值。

*/

pghost = NULL; /* 服務器的主機名 */

pgport = NULL; /* 服務器端口 */

pgoptions = NULL;/* 附加的功能參數 */

pgtty = NULL; /* 服務器的調試tty */

dbName = "mytest"; /* 要操作的數據庫名 */

/* 連接數據庫服務器*/

conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);

/* 檢查連接是否成功 */

if (PQstatus(conn) == CONNECTION_BAD)

{

fprintf(stderr, "Connection to database '%s' failed.", dbName);

fprintf(stderr, "%s", PQerrorMessage(conn));

exit_nicely(conn);

}

/* 開始處理數據塊 */

res = PQexec(conn, "BEGIN");

if (!res' 'PQresultStatus(res) != PGRES_COMMAND_OK)

{

fprintf(stderr, "BEGIN command failed");

PQclear(res);

exit_nicely(conn);

}

/*調用PQclear在PQresult的遊標不再使用後清除遊標,防止內存溢出 */

PQclear(res);

/* 建立一個叫test1的表 */

PQexec(conn,"create table test1 (name char(20),age int4)");

/* 插入數據 */

PQexec(conn,"insert into test1 values ('cjm',10)");

PQexec(conn,"insert into test1 values ('eight',20)");

PQexec(conn,"insert into test1 values ('linuxaid',30)");

/* 開始查詢 */

printf("all the date is:");

res = PQexec(conn, "select * from test1");

for (i = 0; i < PQntuples(res); i++)

{

for (j = 0; j < PQnfields(res); j++)

printf("%-15s", PQgetvalue(res, i, j));

printf("");

}

PQclear(res);

/* 使用SQL的update函數 */

PQexec(conn,"update test1 set age=25 where name='eight'");

/* 打印出更新後的數據 */

printf(" the new date is:");

res = PQexec(conn, "select * from test1");

for (i = 0; i < PQntuples(res); i++)

{

for (j = 0; j < PQnfields(res); j++)

printf("%-15s", PQgetvalue(res, i, j));

printf("");

}

PQclear(res);

/* 刪除表 */

PQexec(conn,"drop table test1");

/* 關閉和數據庫的連接 */

PQfinish(conn);

}

在C下操作postGreSql比較簡單,Sample很多,下面介紹一下用Java操作postGreSql.

2.JAVA操作postGreSql

需要postgreSQl的java driver(jdbc),從網上下一個吧,解包後發現,其實就是一個jar文件,將這個jar文件的路徑加入到classpath中.注意,我在這上面困了很久.我裝的jdk1.2使用時不需要classpath,因此開始的時候,我將該jar文件放到jdk的目錄下,在makefile文件中指定路徑,死活通不過,總是該死的class not found錯誤,創建classpath環境變量後才得以通過(不要問我爲什麽我也不知,:-( ); 在用JDBC時要不斷的使用try{...}catch(..){..},否則總出錯, 下面給一個簡單的sample,大家happy一下.程序中用到的數據庫非常簡單,按以下方法創建就可以了(以postgres用戶創建):

1.啓動數據庫ostmaster -S -i

2.創建其他用戶:createuser eight

3.創建數據庫:createdb mytest

4.創建table: 首先psql mytest

mytest=>create table test1( name char(10), age int(4));

注意,命令要以;結尾。

mydb=>q 退出psql.

import java.lang.*;

import java.util.*;

import java.sql.*;

public class db {

public static void main(String argv[]) {

System.out.println("start...");

//init database connection

Connection pdb;

try

{

Class.forName("postgresql.Driver");

}

catch(java.lang.ClassNotFoundException e) {

System.out.println("err:class.forname.");

}

try

{

pdb=DriverManager.getConnection("jdbcostgresql:mytest","eight","");

Statement stmt=pdb.createStatement();

ResultSet rs=stmt.executeQuery("select * from test1");

if(rs!=null)

{

System.out.println("get data from database:");

while(rs.next())

{

System.out.print(rs.getString(1));

System.out.print(rs.getint(2));

System.out.print("");

}

}

rs.close();

stmt.close();

pdb.close();

}

catch(Exception e)

{

e.printStackTrace();

}

}

}

3.PHP操作postGreSql

使用PHPLIB處理各種數據庫的方式都一樣,只需要擴充PHPLIB,加入所需要PHPLIB文件既可。PHPLIB通過一個名爲DB_Sql的類來操作SQL數據庫。在你的代碼中包含適合你的數據庫的版本。在下面的例子中,我使用postGreSql版本。爲了在代碼中得到DB_Sql,在 PHPLIB要求的目錄下安裝PHPLIB文件。然後,找到cgi-bin目錄,在cgi-bin目錄下創建phplib目錄。接著,拷貝所有的 PHPLIB中的.inc文件到phplib目錄下。最後,將phplib目錄放在php.ini文件中include_path = 的那行上。include_path是PHP引用在include()或require()中文件名的地方。在每一個PHP頁面的頂端爲

<?php

require(common.php3);

?>

common.php3在包含目錄中,包含對每一頁都通用的所有的數據和函數。在common.php3中,爲

<?php

require(db_pgsql.inc);

require(ct_sql.inc);

require(session.inc);

require(auth.inc);

require(perm.inc);

require(user.inc);

require(page.inc);

?>

下面是一個操作PostgreSql的例子

<?

$conn = pg_connect("","","","","mytest");

if (!$conn)

{

echo "無法連接數據庫.";

exit;

}

echo "<table border="1" cellspacing="0" cellpadding="0">";

echo "<tr>";

$rst = pg_exec("select * from test1",$conn)

if (!$rst)

{

echo "執行Sql錯誤!.";

exit;

}

$fields_num = pg_num_fields($rst);

$i=0;

while($i<$fields_num){

$fields[$i] = pg_field_name($rst,$i);

echo "<th>" . $fields[$i] . "</th>";

$i++;

}

echo "</tr>";

while ($record=pg_fetch_array($rst)) {

echo "<tr>";

$i=0;

while($i<$fields_num){

$value = $record[$fields[$i]];

if($value=="")

echo "<td> </td>";

else

echo "<td>" . $value . "</td>";

$i++;

}

echo "</tr>";

}

pg_free_result($rst);

echo "</table>";

pg_close($conn);

?>

  postgresql的好用不亞于mysql,下文介紹了幾種編程工具與postgresql的交互。   1.C操作postgreSql   程序:   /*程序在redhat6.0上調試通過   *該程序使用pgsql的內部函數實現數據庫的一般功能   *這裏create,insert,select,update,drop幾個最常用的SQL語句   *具體還有些更強大的功能,如阻塞等,需要進一步研究   *詳細資料可以查看參考手冊,那邊有所有的函數調用*/   /*頭文件*/   #include <stdio.h>   #include   main() {   char *pghost,   *pgport,   *pgoptions,   *pgtty;   char *dbName;   int nFields;   int i, j;   PGconn *conn;   PGresult *res;   /*   * 程序開頭需要設定連接到數據庫服務器的一些參數,如果設置值爲NULL,   * 則使用環境變量中設置的缺省值。   */   pghost = NULL; /* 服務器的主機名 */   pgport = NULL; /* 服務器端口 */   pgoptions = NULL;/* 附加的功能參數 */   pgtty = NULL; /* 服務器的調試tty */   dbName = "mytest"; /* 要操作的數據庫名 */   /* 連接數據庫服務器*/   conn = PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);   /* 檢查連接是否成功 */   if (PQstatus(conn) == CONNECTION_BAD)   {   fprintf(stderr, "Connection to database '%s' failed.", dbName);   fprintf(stderr, "%s", PQerrorMessage(conn));   exit_nicely(conn);   }   /* 開始處理數據塊 */   res = PQexec(conn, "BEGIN");   if (!res' 'PQresultStatus(res) != PGRES_COMMAND_OK)   {   fprintf(stderr, "BEGIN command failed");   PQclear(res);   exit_nicely(conn);   }   /*調用PQclear在PQresult的遊標不再使用後清除遊標,防止內存溢出 */   PQclear(res);   /* 建立一個叫test1的表 */   PQexec(conn,"create table test1 (name char(20),age int4)");   /* 插入數據 */   PQexec(conn,"insert into test1 values ('cjm',10)");   PQexec(conn,"insert into test1 values ('eight',20)");   PQexec(conn,"insert into test1 values ('linuxaid',30)");   /* 開始查詢 */   printf("all the date is:");   res = PQexec(conn, "select * from test1");   for (i = 0; i < PQntuples(res); i++)   {   for (j = 0; j < PQnfields(res); j++)   printf("%-15s", PQgetvalue(res, i, j));   printf("");   }   PQclear(res);   /* 使用SQL的update函數 */   PQexec(conn,"update test1 set age=25 where name='eight'");   /* 打印出更新後的數據 */   printf(" the new date is:");   res = PQexec(conn, "select * from test1");   for (i = 0; i < PQntuples(res); i++)   {   for (j = 0; j < PQnfields(res); j++)   printf("%-15s", PQgetvalue(res, i, j));   printf("");   }   PQclear(res);   /* 刪除表 */   PQexec(conn,"drop table test1");   /* 關閉和數據庫的連接 */   PQfinish(conn);   }   在C下操作postGreSql比較簡單,Sample很多,下面介紹一下用Java操作postGreSql.   2.JAVA操作postGreSql   需要postgreSQl的java driver(jdbc),從網上下一個吧,解包後發現,其實就是一個jar文件,將這個jar文件的路徑加入到classpath中.注意,我在這上面困了很久.我裝的jdk1.2使用時不需要classpath,因此開始的時候,我將該jar文件放到jdk的目錄下,在makefile文件中指定路徑,死活通不過,總是該死的class not found錯誤,創建classpath環境變量後才得以通過(不要問我爲什麽我也不知,:-( ); 在用JDBC時要不斷的使用try{...}catch(..){..},否則總出錯, 下面給一個簡單的sample,大家happy一下.程序中用到的數據庫非常簡單,按以下方法創建就可以了(以postgres用戶創建):   1.啓動數據庫ostmaster -S -i   2.創建其他用戶:createuser eight   3.創建數據庫:createdb mytest   4.創建table: 首先psql mytest   mytest=>create table test1( name char(10), age int(4));   注意,命令要以;結尾。   mydb=>q 退出psql.   import java.lang.*;   import java.util.*;   import java.sql.*;   public class db {   public static void main(String argv[]) {   System.out.println("start...");   //init database connection   Connection pdb;   try   {   Class.forName("postgresql.Driver");   }   catch(java.lang.ClassNotFoundException e) {   System.out.println("err:class.forname.");   }   try   {   pdb=DriverManager.getConnection("jdbcostgresql:mytest","eight","");   Statement stmt=pdb.createStatement();   ResultSet rs=stmt.executeQuery("select * from test1");   if(rs!=null)   {   System.out.println("get data from database:");   while(rs.next())   {   System.out.print(rs.getString(1));   System.out.print(rs.getint(2));   System.out.print("");   }   }   rs.close();   stmt.close();   pdb.close();   }   catch(Exception e)   {   e.printStackTrace();   }   }   }   3.PHP操作postGreSql   使用PHPLIB處理各種數據庫的方式都一樣,只需要擴充PHPLIB,加入所需要PHPLIB文件既可。PHPLIB通過一個名爲DB_Sql的類來操作SQL數據庫。在你的代碼中包含適合你的數據庫的版本。在下面的例子中,我使用postGreSql版本。爲了在代碼中得到DB_Sql,在 PHPLIB要求的目錄下安裝PHPLIB文件。然後,找到cgi-bin目錄,在cgi-bin目錄下創建phplib目錄。接著,拷貝所有的 PHPLIB中的.inc文件到phplib目錄下。最後,將phplib目錄放在php.ini文件中include_path = 的那行上。include_path是PHP引用在include()或require()中文件名的地方。在每一個PHP頁面的頂端爲   <?php   require(common.php3);   ?>   common.php3在包含目錄中,包含對每一頁都通用的所有的數據和函數。在common.php3中,爲   <?php   require(db_pgsql.inc);   require(ct_sql.inc);   require(session.inc);   require(auth.inc);   require(perm.inc);   require(user.inc);   require(page.inc);   ?>   下面是一個操作PostgreSql的例子   <?   $conn = pg_connect("","","","","mytest");   if (!$conn)   {   echo "無法連接數據庫.";   exit;   }   echo "<table border="1" cellspacing="0" cellpadding="0">";   echo "<tr>";   $rst = pg_exec("select * from test1",$conn)   if (!$rst)   {   echo "執行Sql錯誤!.";   exit;   }   $fields_num = pg_num_fields($rst);   $i=0;   while($i<$fields_num){   $fields[$i] = pg_field_name($rst,$i);   echo "<th>" . $fields[$i] . "</th>";   $i++;   }   echo "</tr>";   while ($record=pg_fetch_array($rst)) {   echo "<tr>";   $i=0;   while($i<$fields_num){   $value = $record[$fields[$i]];   if($value=="")   echo "<td> </td>";   else   echo "<td>" . $value . "</td>";   $i++;   }   echo "</tr>";   }   pg_free_result($rst);   echo "</table>";   pg_close($conn);   ?>
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有