首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 學習筆記(二):PDA 上的數據庫操作實戰 (SQL Anywhere UltraLite)

     編輯:J2ME

前言:J2ME 也能用關係數據庫?

在 PDA/Windows CE 等 CDC 設備上,可運行 iAnywhere UltraLite(原 Sybase,現 SAP)這類輕量級關係數據庫,支持 JDBC 子集、SQL-92、事務、同步複制。本文記錄一次在 Windows CE 模擬器上跑通「增/查」的完整過程。

一、 環境準備

  • JDK 1.4.2 + J2ME CDC 構建環境
  • UltraLite 9.0 开發包 (jul9.jar, jul9_zh.jar, 本地庫 jul9.dll)
  • Windows CE 模擬器 / 真機 (安裝 Jeode JVM / Creme JVM)
  • 數據庫文件:tutcustomer.udb、模式文件 tutcustomer.usm

二、 關鍵代碼:Customer.java

package tutorial;

import ianywhere.native_ultralite.*;
import java.sql.SQLException;

public class Customer {
    static Connection conn;

    public static void main(String[] args) {
        try {
            Customer c = new Customer();
            c.insert();
            c.select();
            conn.close();
        } catch (SQLException e) { e.printStackTrace(); }
    }

    public Customer() throws SQLException {
        DatabaseManager dbMgr = new DatabaseManager();
        // 連接參數:桌面路徑 + CE 部署路徑雙寫
        String parms = "uid=DBA;pwd=sql" +
            ";file_name=f:\\J2ME\\tutcustomer.udb" +
            ";schema_file=f:\\J2ME\\tutcustomer.usm" +
            ";ce_file=\\UltraLite\\tutorial\\tutcustomer.udb" +      // CE 設備端路徑
            ";ce_schema=\\UltraLite\\tutorial\\tutcustomer.usm";

        try {
            conn = dbMgr.openConnection(parms);
            System.out.println("連接數據庫成功");
        } catch (SQLException e) {
            if (e.getErrorCode() == SQLCode.SQLE_ULTRALITE_DATABASE_NOT_FOUND) {
                conn = dbMgr.createDatabase(parms); // 自動建庫
                System.out.println("按模式創建數據庫成功");
            } else throw e;
        }
    }

    private void insert() throws SQLException {
        Table t = conn.getTable("customer");
        t.open();
        short idCol = t.schema.getColumnID("id");
        short fnCol = t.schema.getColumnID("fname");
        short lnCol = t.schema.getColumnID("lname");

        if (t.getRowCount() == 0) { // 避免重複插入
            t.insertBegin();
            t.setString(fnCol, "Li");
            t.setString(lnCol, "You");
            t.insert();
            conn.commit();
            System.out.println("插入數據成功");
        } else {
            System.out.println("數據已存在");
        }
        t.close();
    }

    private void select() throws SQLException {
        Table t = conn.getTable("customer");
        t.open();
        short idCol = t.schema.getColumnID("id");
        short fnCol = t.schema.getColumnID("fname");
        short lnCol = t.schema.getColumnID("lname");

        t.moveBeforeFirst();
        while (t.moveNext()) {
            System.out.println("id=" + t.getInt(idCol) +
                ", name=" + t.getString(fnCol) + " " + t.getString(lnCol));
        }
        t.close();
    }
}

三、 部署到 Windows CE 設備的關鍵步驟

  1. 將 jul9.dll、jul9_zh.jar 複製到設備 \UltraLite\lib\。
  2. 創建啟動快捷方式 test.lnk,內容:
    18#"\Storage Card\Insignia Solutions JeodeRuntime\evm.exe" -Djeode.evm.console.local.keep=TRUE -Djeode.evm.console.local.paging=TRUE -Djul.library.dir=\UltraLite\lib -cp \UltraLite\tutorial;\UltraLite\lib\jul9_zh.jar Customer
  3. 數據庫文件 tutcustomer.udb/.usm 放置於設備 \UltraLite\tutorial\。

四、 踩坑記錄

問題原因解決
桌面運行正常,CE 設備報 UnsatisfiedLinkError缺 jul9.dll 或路徑錯誤確保 DLL 在 \UltraLite\lib\ 且 -Djul.library.dir 指向正確
連接報 SQLE_ULTRALITE_DATABASE_NOT_FOUNDCE 路徑與桌面路徑不同連接串同時指定 file_name(桌面) 和 ce_file(設備)
中文亂碼未使用 jul9_zh.jar (含中文排序/字符集)Classpath 優先載入 jul9_zh.jar

五、 總結

UltraLite 為 CDC 設備帶來了真正的關係數據庫能力,JDBC 風格 API 學習成本極低。關鍵在於雙路徑連接串與本地庫部署。若目標為 CLDC 設備,請改用 RMS 或 SQLite 移植版 (如 SQLCipher for Java ME)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved