Android如何使用JDBC連線SQLite資料庫?
【首先把結論說出來:不到萬不得已最好不要使用JDBC操作SQLite資料庫】
最近兩天一直在搗鼓JDBC與SQLite相連線的事情,想使用jdbc的preparedStatement類實現對SQLite資料庫的操作。在Java專案上能夠成功載入JDBC驅動,也就是這句話能夠被成功執行: Class.forName("org.sqlite.JDBC") ;,但是一旦移植到Android專案上各種bug橫行其道:
【java.lang.ClassNotFoundException:
com.sqlite.jdbc.Driver】
【unable
to execute dex: gc overhead limit exxeeded】
【An
out of memory error has occurred】
【no
suitable driver found for jdbc:sqlite:db/test.db】
。。。。。。。。。。
百度了兩天,各種解決方案都嘗試了,最後還是無法執行。然後翻過去用谷歌搜尋了一下答案,發現國外有位網友也有同樣的困惑,我就不復制貼上了,截圖如下:
-----------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------
他的大概意思就是:我想在我的Android專案中讀取一個數據庫的內容,所以就把該資料庫放在一個資料夾裡面。我準備通過JDBC建立與該資料庫的連線,然後我匯入JDBC 的jar包並且通過如下語句實現驅動的載入與資料庫的連線,在Java專案中這樣做很成功,但是當我想在Android專案中實現該功能時,中會出現ClassNotFoundException的異常,我檢查了自己的專案,沒發現什麼錯誤啊。請問為什麼會出現這種異常?
有一位網友這樣答道:
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------
他的意思是說:你非得這樣做嗎?我覺著只有0.1%的Android程式設計師會在Android專案中使用JDBC,只用0.05的程式設計師會在Android專案中把JDBC與SQLite資料庫結合使用。很多已經Android中已經封裝好的類例如SQLiteDatabaseSQLiteOpenHelper,已經可以提供很強大的資料庫操作功能了。
還有一位網友這樣答道:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
他的大概意思是說:
JDBC確實不適合在Android上面使用,我絕對不會推薦在Android專案中使用JDBC
JDBC適合於高寬頻、低延遲、高可靠性的網路連線,例如B/S,D/S中的資料庫服務,Android裝置一點也不符合這些特性。
=======================================================================================================
2015年4月9日11:39:23補充
我想在Android中使用JDBC的朋友有一部分是想用JDBC裡面的PreparedStatement類吧,因為preparedStatement提供了很多對資料庫的便捷操作。如果是這樣的話只能說你捨近求遠了。在SQLiteDatabase類中已經提供了很強大的功能實現了。SQLiteDatabase的作用類似於JDBC的Connection,例如方法Cursor rawQuery(String sql String[] selectinArgs)返回的Cursor就像JDBC中的ReultSet。JDBC裡面的PrepatedStatement提供了setXXX()方法,同樣Android中的SQLiteStatement也提供了類似的bindXXX()方法。
========================================================================================================
總而言之,在Android專案開發中不適合使用JDBC。