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 | 長度無限制的可變字元陣列 |