java JDBC 提高程式可移植性 (轉)

a400發表於2007-08-16
java JDBC 提高程式可移植性 (轉)[@more@]

陳小洪  南昌航空工業學院系

很多初學者在開始接觸JC的時候,在網上和大部分的教材上都是這樣
介紹一般的:
//可以執行的完整程式
import java..*;

public class DatabaseDemo
{
 public static void main(String args[])
 {
 Connection con;
 Statement stmt;
 ResultSet rs;
 
 //load the class
 try
 {//直接在程式裡面寫字串 com..jdbc.sqlserver.SQLServerDriver
 //降低了程式的可移植性。
 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
 }catch(ClassNotFoundException e)
 {
 System.out.println(e.getMessage());
 }
 
 //get database connection ,statement and the ResultSet
 try
 {
 con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs", "sa", "");
 
 stmt=con.createStatement();
 rs=stmt.executeQuery(" * from authors");
 
 while(rs.next())
 {
 for(int i=1;i<=rs.getMetaData().getColumnCount();i++)
 {
 System.out.print(rs.getString(i)+" | ");
 }
 System.out.println();
 }
 }catch(SQLException e)
 {
 System.out.println(e.getMessage());
 }
 }
 
}
這個程式明顯有一個問題,就是程式的可移植性很差,加入我現在不用了,我要使用或orcale
而程式已經大包了,怎麼辦。在這裡我們可以像在ado中的 uld一樣。使用我們的properties檔案。把屬性和對應的值寫入屬性檔案。例如我們在屬性檔案 basic.properties 輸入一些內容:
connectionURL:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs
driverManager:com.microsoft.jdbc.sqlserver.SQLServerDriver
userID:sa
pass:
//注意屬性與值之間要有一個冒號,英文,不是中文冒號。
我們可以透過 java.util包裡面的Properties類來讀取檔案屬性的值。

java.util.Properties  pro=new java.util.Properties  pro();
try
{
  pro.load(new  FileInputStream("basic.properties"));
}catch(IOException e){.......}
conSql=pro.getProperty("connectionURL");
 driverStr=pro.getProperty("driverManager");
 userId=pro.getProperty("userID");
 password=pro.getProperty("password");
這樣我們就可以得到properties中的屬性值。當我們的應用程式要改用其他的管理的時候我們只要
修改 properties檔案就可以了。

把上面的程式完善一些(可以執行的)
/*
 AA.java
*/
import java.util.*;
import java.io.*;
import java.sql.*;


public class AA
{
 public static void main(String args[])
 {
 String conSql;
 String driverStr;
 String userId;
 String password;
 Connection con;
 Statement stmt;
 ResultSet rs;
 Properties pro=new Properties();;
 //load the properties file and get the proterties
 try
 {
 
 pro.load(new  FileInputStream("basic.properties"));

 }catch(IOException e)
 {
 System.out.println(e.getMessage());
 }
 
 conSql=pro.getProperty("connectionURL");
 driverStr=pro.getProperty("driverManager");
 userId=pro.getProperty("userID");
 password=pro.getProperty("password");
 System.out.println(conSql+" "+driverStr+" "+userId+" "+password);
 // load the driver class
 try
 {
 Class.forName(driverStr);
 }catch(ClassNotFoundException e)
 {
 System.out.println(e.getMessage());
 }
 
 // get the database connection
 try
 {
 con=DriverManager.getConnection(conSql,userId,password);
 String queryStr="select * from authors";
 stmt=con.createStatement();
 rs=stmt.executeQuery(queryStr);
 
 while(rs.next())
 {
 for(int i=1;i<=rs.getMetaData().getColumnCount();i++)
 {
 System.out.print(rs.getString(i)+" | ");
 }
 System.out.println();
 }
 }catch(SQLException e)
 {
 System.out.println(e.getMessage());
 }
 
 }
 
}
注意了::::屬性檔案要和你的java原始檔放在同一個目錄下面。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10790690/viewspace-961269/,如需轉載,請註明出處,否則將追究法律責任。

相關文章