2008-09-30

Java Type vs PostgreSQL Type (一) 字元型別之對應

String:
在測試String格式前,首先在postgre建立一個資料表。

資料表語法:
CREATE TABLE chartypes
(
id serial NOT NULL,
"char" character(50),
charvary character varying(50),
"text" text,
CONSTRAINT chartypes_pkey PRIMARY KEY (id)
)


程式原始碼:
JavaStringType.java:

package zasax.type.chartypes;

//引用套件
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.logging.Level;
import java.util.logging.Logger;
import zasax.conn.PostgreConnection;

/**
*
* @author YiCheng, Hsiao
*/
public class JavaStringType {

//宣告變數
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
private String setSQL = "Insert into chartypes (char,charvary,text) values (?,?,?)";
private String getSQL = "Select * from chartypes";

public static void main(String[] args) {
JavaStringType jst = new JavaStringType();
jst.setStringValue("Hello", "Java", "World");
//Hello Java World
System.out.println(jst.getStringValue());
}

//字串值存入資料庫的方法
public void setStringValue(String str1, String str2, String str3) {
try {
PostgreConnection pc = new PostgreConnection();
this.conn = pc.getConnection();
this.pstmt = conn.prepareStatement(setSQL);
pstmt.setString(1, str1);
pstmt.setString(2, str2);
pstmt.setString(3, str3);
pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (IOException ex) {
Logger.getLogger(JavaStringType.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(JavaStringType.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(JavaStringType.class.getName()).log(Level.SEVERE, null, ex);
}
}

//從資料庫讀出字串值的方法
public ResultSet getStringValue() {
String output = "";
try {
PostgreConnection pc = new PostgreConnection();
this.conn = pc.getConnection();
this.pstmt = conn.prepareStatement(getSQL);
this.rs = pstmt.executeQuery();
while(rs.next()){
output += rs.getString("char");
output += "\t";
output += rs.getString("charvary");
output += "\t";
output += rs.getString("text");
output += "\n";
}
} catch (IOException ex) {
Logger.getLogger(JavaStringType.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(JavaStringType.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(JavaStringType.class.getName()).log(Level.SEVERE, null, ex);
}
return rs;
}
}

實際測試程序:

儲存String值方式:
先經過setStringValue的方法將三個字串值傳入方法內,透過方法的內部的pstmt.setString的方法,
分別將三個值儲存至資料庫裡的三個型別,分別是char(charater(50)), charvary(character varying(50)), text text等欄位。


讀取String值方式:
將資料庫的三個欄位值,分別讀取回程式,然後將三個字串值都放置一個字串,
最後再印出此字串。
印出值為Hello(包含前面約空50格的位置,如上圖註解印出部分) Java World。
會發生類似這狀況原因為 character 這個型別為,固定長度的字元屬性,所以不
管後面有多少個空白字元,都會將之印出。

整理表格如下:

Java 型別 PostgreSQL 型別 特性
String characher(n) 長度固定的不可變字元陣列
characher varying(n) 長度固定的可變字元陣列
text 長度無限制的可變字元陣列


沒有留言:

PostgreSQL & Google-Analytics Running...

::Planet PostgreSQL::

PostgreSQL Information Page

PostgreSQL日記(日本 石井達夫先生Blog)

PostgreSQL News

黑喵的家 - 資料庫相關

Google 網上論壇
PostgreSQL 8 DBA 專業指南中文版
書籍內容討論與更多下載區(造訪此群組)
目錄下載: PostgreSQL_8 _DBA_Index_zh_TW.pdf (更新:2007-05-18)

全球訪客分佈圖(Google)

全球訪客分佈圖(Google)