mysql(mariadb) java 連線設定(connection string)

每次都會忘記, 因此寫下來

 
jdbc:mysql://localhost:3306/database?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

有時候透過別人寫好的web設定界面, 會造成寫入xml錯誤 , 因此要注意所搭配系統是否使用xml當作設定檔.

例如&useUnicode=true ,寫到xml會出現  &useUnicode=true

請將多餘的amp;移除,只要留下 &useUnicode=true 即可

優化Android搜尋藍牙裝置方式(API 21)

Android 6.0(API 21)以後, 搜尋藍芽裝置的方式改成:

BluetoothAdapter.startScan (ScanCallback callback)

這種方式我一直用了很久, 也沒遇到問題.

直到有一個需求是隨時監控廣播封包,

這種寫法就會遇到問題, 無法快速取得周遭藍牙廣播資料, 因此需要修改寫法, 把能下的藥都下下去(但耗電):

final List<ScanFilter> filters = new ArrayList<>();
ScanFilter filter = new ScanFilter.Builder().build();
filters.add(filter);

final ScanSettings scanSettings =
        new ScanSettings.Builder() .setNumOfMatches(ScanSettings.MATCH_NUM_MAX_ADVERTISEMENT).setMatchMode(ScanSettings.MATCH_MODE_STICKY).setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES).setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).build();


BluetoothAdapter.getBluetoothLeScanner().startScan(filters,scanSettings,mLeScanCallback);

DbVisualizer如何正確顯示中文(Oracle連線)

DbVisualizer是一款很好用又跨平台的資料庫工具(java), 但是常常剛開始使用的時候, 會有中文亂碼的問題, 

以oracle 為例子, 需要將字型改為中文字型, 才能正確顯示中文, 解決方式如下:

ps. 若mysql可能要使用另外一中設定的方式. 

Java程式如何使用JasperReport產出報表(PDF)

使用java產出PDF很麻煩, 除了要了解iText 7外 , 還要手工製作, 超級費時,甚至要搞定中文字型, 難怪沒人提出解法.

因此偶想到使用 Jasper Report 產出報表的方式, 利用內建匯出PDF的功能,就能達到目的.

簡易步驟如下:

10028_(Java)如何使用JasperReport.txt

打包軟體Advanced Installer對於32位元與64位元設定條件

因為偶使用eclipse開發java軟體,號稱跨平台, 但是實際上使用到eclipse SWT元件都知道, 還是要另外匯出各個平台的jar檔案,才能到不同平台上執行, 而且還必須區分32位元與64位元.

eclipse匯出的可執行的jar檔案既然區分這麼多, 那就者能依靠打包軟體幫忙, 這裡推薦advanced installer.

Advanced Installer對於32位元與64位元設定條件, 偶看得有點霧煞煞, 只好紀錄一下.

Advanced Installer 專案新增好之後, 請點選 "Organization"就可以詳細看到相關的設定

將老舊DBF資料檔案轉成Excel

以往讀取老舊DBF資料檔案 , 只要透過ODBC , 搭配MSQRY這隻程式就可以下SQL指令完成任務.

可是這些常用的工具漸漸地不再支援, 連java 8之後也不內含JdbcOdbc, 簡單的說若你有老系統的資料要讀取, 已經是非常困擾的一件事情, 因此有必要將這些資料都導出來, 方便查閱.

因此偶找到一些好用的函式庫(jdbf), 再簡單寫一個GUI程式, 可將DBF轉成Excel, 最後就再也用不到這些老舊的檔案了.  程式可在此下載

1. Windows 7 64bits or above or Ubuntu 16.04 64bits or above

2. java 8 or above

java的byte array如何擴充或相加

多個byte array 要加起來,很簡的作法

import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class Tester {
   public static void main(String[] args) throws IOException {
      byte[] ArrayA = { 1,2,3};
      byte[] ArrayB = { 4,5,6};
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      baos.write(ArrayA);
      baos.write(ArrayB);
      byte[] c = baos.toByteArray();
      for(int i=0; i< c.length ; i++) {
         System.out.print(c[i] +" ");
      }
   }
}

Java如何存取USB-HID裝置-使用hid4java

有些產品必須透過USB-HID連線方式, 才能進行溝通, 偶記得以往都是使用vb6(好古老)的方式連線, java能派上用場的機會不多.

但最近有個需求, 需使用java開發windows app, 但是又必須透過USB-HID的方式讀取產品的資料.

若依照以往(好多年前), 偶寫個vb6程式, 透過hid的方式讀取資料後存成txt檔案; 最後再使用java觸發vb6程式, 處理vb6抓取出來的txt檔案.

java 呼叫 vb6 的解法, 雖然可解, 但就差在現在誰在跟你寫vb6, 身為java old school 的偶, 看到vb6就討厭, 又不想寫.net程式與usb溝通, 導致遇到這種USB-HID的需求, 我就鬱卒 🙁

Oh ya!

幾年後的今天, 想說找找open source是否有pure java的解, 終於找到了

可以使用 https://github.com/gary-rowe/hid4java 這個專案搭配 JNA library 完成 pure java 的期望.

目前偶用 hid4java 0.5.0 + JNA 4.1.0  用得很順, 還可以跨三個平台 Mac , Linux , Windows , 真是棒啊

咖啡偶習慣把這些東西作成簡單好用的工具函式庫 , 基本上就是發送指令到usb hid設備 , 然後接收到資料,請到以下連結參考:

https://bitbucket.org/inmethod/inmethodusblib

PS. 只提供usb連線的裝置超冷門的, 未來將漸漸勢微

tomcat 8.0移轉到8.5注意事項

tomcat 8.0移轉到8.5時候, 要注意原本應用軟體是否有用到傳統的cookie方式,

若有則必須在 context.xml 檔案加上一段相容的設定, 否則會無法使用舊系統的cookie認證方式

<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />
1 2