最近在練習使用 JAVA 連結 資料庫,先練習如何存取 Microsoft 的 Access。

1.jpg  

使用

String str = "sun.jdbc.odbc.JdbcOdbcDriver";
Class.forName(str);

建立 jdbc -> odbc 驅動程式居然不管用,原來是因為 Java 8 已經不支援了,所以改用 UCanAccess 這個 Java API。

在開始介紹之前,請先使用 Microsoft Access 建立一個資料庫與資料表,方法如下:

Step 1: 打開 Microsoft Access ,點擊"建立"標籤,選擇"資料表設計"。

5.JPG

 

Step 2: 建立欄位->另存新檔,下方的圖只建立了兩個欄位(account與pwd),當你另存新檔的時候就可以決定"資料表名稱",之後Acces會跳出下列的視窗問你是否增加主索引鍵,當然就是"是"。

4.JPG

 

之後請到下列的網站:

1.JPG

 

選擇網頁最上方的 Download UCanAccess,點它並下載它。

2.JPG

 

下載且解壓縮完之後,請把 ucanaccess-2.0.9.5.jar 與 lib 中所有的 jar 檔通通import到java開發工具。

3.JPG

 

之後就可以使用 Java 與 Microsoft Access 進行連結。

連結的步驟為:

1. 建立驅動程式

2. 連結資料庫

3. 進行新增、修改、選擇、刪除。

我寫了以下的程式碼,清楚地描述所有的事情:


  

package jdbcexample;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import net.ucanaccess.jdbc.JackcessOpenerInterface;
public class JDBCExample 
{
    public static void main(String[] args) throws SQLException 
    {
        Connection connDB = null;
        try
        {
            //建立驅動程式,連結odbc至Microsoft Access
            Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
            //下列字串的://之後要加上access檔案存放的地方
            String dataSource = "jdbc:ucanaccess://d:/Database1.accdb";
            //連結資料庫
            connDB = DriverManager.getConnection(dataSource);
            //SQL共有 INSERT、SELECT、UPDATE、DELETE,以下分別列舉
            Statement st = connDB.createStatement();
            //之後新增資料
            st.executeUpdate("INSERT INTO member (account, pwd) VALUES ('A','Taipei')");
            st.executeUpdate("INSERT INTO member (account, pwd) VALUES ('B','Taipei')");
            st.executeUpdate("INSERT INTO member (account, pwd) VALUES ('C','Taipei')");
            //撈出剛剛新增的資料
            st.execute("SELECT * FROM member");
            ResultSet rs = st.getResultSet();
            while(rs.next())
            {
                System.out.println(rs.getString("account")+" "+rs.getString("pwd"));
            }
            //刪除 account=c的資料
            st.executeUpdate("DELETE FROM member where account='A'");
            st.execute("SELECT * FROM member");
            ResultSet rs1 = st.getResultSet();
            while(rs1.next())
            {
                System.out.println(rs1.getString("account")+" "+rs1.getString("pwd"));
            }
            
            st.close();
            connDB.close();
        }catch(ClassNotFoundException e)
        {
            System.out.println("Driver loading failed!");
        }catch(SQLException e)
        {
            System.out.println("DB linking failed!");
        }     
    }
}
arrow
arrow

    葛瑞斯肯 發表在 痞客邦 留言(8) 人氣()