歡迎您光臨本站 註冊首頁

在C、JAVA、PHP中操作postgreSql

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  postgresql的好用不亞於mysql,下文介紹了幾種編程工具與postgresql的交互。

1.C操作postgreSql
程序:
/*程序在redhat6.0上調試通過
*該程序使用pgsql的內部函數實現資料庫的一般功能
*這裡create,insert,select,update,drop幾個最常用的SQL語句
*具體還有些更強大的功能,如阻塞等,需要進一步研究
*詳細資料可以查看參考手冊,那邊有所有的函數調用*/
/*頭文件*/
#include
#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.啟動資料庫:postmaster -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("jdbc:postgresql: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頁面的頂端為
require(common.php3);
?>
common.php3在包含目錄中,包含對每一頁都通用的所有的數據和函數。在common.php3中,為
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 "";
  echo "";
 $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 "";
   $i++;
  }
  echo "";
  while ($record=pg_fetch_array($rst)) {
   echo "";
   $i=0;
   while($i<$fields_num){
   $value = $record[$fields[$i]];
   if($value=="")
   echo "";
   else
   echo "";
   $i++;
   }
   echo "";
  }
  pg_free_result($rst);
  echo "
" . $fields[$i] . "
 " . $value . "
";
  pg_close($conn);
?>


[火星人 ] 在C、JAVA、PHP中操作postgreSql已經有627次圍觀

http://coctec.com/docs/linux/show-post-74203.html