2015年5月6日 星期三

取得Date或Calendar中的年、月、日

Java在sdk 1.1後刪除了 Date和 Calendar中的 getDay等function
改由 Calendar.get(int field) 取代

範例:

        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int day = calendar.get(Calendar.DATE);
        int month = calendar.get(Calendar.MONTH) + 1;
        int year = calendar.get(Calendar.YEAR);

因為calendar中的月份是由0算起 (也就是說如果現在是一月,month輸出為0)
所以上方的month我讓他加1

同樣,Calendar中的setYear等function也被取消了,可用Calendar.set(field, value)或Calendar.set(year, month, date)替代

範例:

        calendar.set(Calendar.YEAR, 2015);

2015年3月16日 星期一

Jackcess(用來連接Access的Java Library) : (二) 開啟Access檔案

最基本的開啟方法:

Database db = DatabaseBuilder.open(new File("mydb.mdb"));

是不是很簡單呢?
但是如果要應付不同的需求就得增加點變化了

Q1: 如果我的Access資料庫有密碼呢?

確認一下你的專案是否有加入jackcess-encrypt(詳見上一篇)
然後將上面的程式碼改成這樣:

File dbFile = new File("mydb.mdb");
CryptCodecProvider codec = new CryptCodecProvider("my password");
Database db = new DatabaseBuilder(dbFile).setCodecProvider(codec).open();

Q2: Access97打不開!

由於Jackcess目前只支援Access 97 read only
所以開啟97的mdb時必須聲明唯讀

Database db = new DatabaseBuilder(dbFile).setReadOnly(true).open();

Q3: 讀取出來的資料變成亂碼怎麼辦?

像我的mdb檔中文字是用big5編碼
讀出來全是亂碼
Jackcess一樣提供了編碼解決方案:

Database db = new DatabaseBuilder(dbFile).setCharset(Charset.forName("big5")).open();

2015年3月12日 星期四

Jackcess(用來連接Access的Java Library) : (一) 將Jackcess library加入專案

因為工作的關係需要將一個古老的Access 97資料庫轉換到MySQL
但大部分的資料庫library都不支持Access 97
最後終於找到這個 Jackcess
支援Access 2000-2010 read/write
不過Access 97只有read only
以下將介紹如何把Jackcess加入你的專案

1.
先下載 jackcess-x.x.x.jar 並加入專案

2.
使用前必須先加入一些必要的Library
Jackcess 2.0.8版需要的library如下
commons-lang-2.6.jar
commons-logging-1.2.jar
相關內容也寫在:Project Dependencies
注意:如果用commons-lang 3.x可能會出現錯誤

3.
如果你的Access資料庫有密碼,那就得再加入Jackcess Encrypt
下載並加入以下library:
jackcess-encrypt-x.x.x.jar
bcprov-jdk15

使用方法在官網有簡要的說明:jackcess cookbook
我接下來也會再作相關的筆記

Jackcess(用來連接Access的Java Library) : (二) 開啟Access檔案

2015年3月6日 星期五

NetBeans中的自動補齊(Java)

Tools -> Options -> Code Completion
Language 選擇 Java -> 將 Auto Popup on Typing Any Java Identifier Part 打勾


2012年10月18日 星期四

AndroidManifest

AndroidManifest.xml是android程式的核心控制檔(一個App由此開始)
聲明app中的各種內容

不了解XML與法可以先參考維基百科
簡單的用法就是
<標簽名 標籤屬性="參數" />

<標簽名 標籤屬性="參數" >
....
</標簽名 >

順便一提XML的註解語法
<!-- 註解  -->

這邊介紹一些常用的AndroidManifes屬性

manifest:

  • package:程式封裝名稱(上傳到market時注意package名稱不能跟其他app重複)
  • android:versionCode:程式版本號,只能用數字表示(更新market的程式時,注意新版本號要大於舊的)
  • android:versionName:程式版本名



















uses-sdk:

  • android:minSdkVersion:最低可執行之android版本
  • android:targetSdkVersion:編譯時使用的sdk版本,建議都使用最新版
use-permission:
     要求權限,就是在google play上常看到的權限欄位
     某些功能會要求使用權限,沒加上的話會導致強制關閉,是容易被忘記的步驟
     詳細的使用權限請看http://developer.android.com/reference/android/Manifest.permission.html
application:

  • android:icon:app的圖示
  • android:label:app的名稱
activity:

  • android:name:此activity名稱,必須與java檔同名
  • android:label:標題名稱
  • 注意每新增一個Activity就要到AndroidManifes增加一個Activity標籤(只需要輸入name屬性即可),沒做這個步驟跳轉到該Activity時必定強制關閉

常用的android開發者網站

Android Developer:
Google官方的開發者網站,分為Design(設計),Develop(開發)和Distribute(發佈)三部分,也是app開發流程中的三大步驟。
先在design學習設計界面
Develop中的reference有各種API的詳解
最後再看Distribute

eoe:
大陸的android開發者論壇,有相當多會員和討論串。

android中文翻譯組:
有中文的API翻譯,英文苦手用...

蛙齋:
想在app中放廣告的話可以來這看看,有Admob和台灣兩大行動廣告商KuAD和Vpon的詳細設定方法


2012年9月18日 星期二

EditText:修改虛擬鍵盤的Enter鍵

一般EditText在輸入時虛擬鍵盤上的Enter鍵都預設為"換行" 那要如何改變為其他種類的按鍵呢? 首先在layout檔中加入android:imeOptions屬性


  1. <EditText  
  2.     android:id="@+id/edit_text"    
  3.     android:layout_width="fill_parent"   
  4.     android:layout_height="wrap_content"  
  5.     android:imeOptions="actionDone"
  6.     android:singleLine="true"
  7. /> 


第5行:
輸入enter鍵的種類,有:

actionUnspecified 未指定
actionNone 無動作
actionGo 前往
actionSearch 搜尋
actionSend 發送
actionNext 下一個
actionDone 完成
詳見http://developer.android.com/reference/android/view/inputmethod/EditorInfo.html

第6行:
將EditText改為單行輸入
否則仍然會是換行鍵
在Activity為EditText加入OnEditorActionListener

  1. editText.setOnEditorActionListener(new OnEditorActionListener() {  
  2.             @Override  
  3.             public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
  4.                 //按下完成鍵要執行的動作
  5.                 return false;  
  6.             }