Android作為當前最流行的移動操作系統(tǒng)之一,具有廣泛的應(yīng)用和使用群體,其豐富的特性以及由于開源性質(zhì)所帶來的優(yōu)越可定制性使得其應(yīng)用領(lǐng)域越來越廣泛。而作為企業(yè)級數(shù)據(jù)庫的Oracle,其廣泛的應(yīng)用和龐大的用戶基礎(chǔ)同樣不可忽視。本文將詳細介紹在Android平臺中如何鏈接Oracle數(shù)據(jù)庫。
要在Android平臺中鏈接Oracle數(shù)據(jù)庫,必須先引入jdbc相關(guān)依賴,因為Android中并沒有自帶的jdbc驅(qū)動程序。在編譯時需要用到的依賴一般可以通過gradle配置,在build.gradle文件中添加以下代碼:
dependencies { compile 'com.github.yesnault/sqlite-jdbc-android:3.7.2' }除此之外需要將Oracle JDBC驅(qū)動文件下載到本地,并添加到項目中。在Android Studio中,可以將驅(qū)動文件放在工程目錄下,例如:/app/libs。
dependencies { compile files('libs/ojdbc6.jar') }有時候會遇到一些版本不兼容的問題,為了避免這種情況的發(fā)生,我們需要在gradle的文件里面自己定義依賴的版本,例如:
dependencies { compile 'com.github.yesnault:ojdbc7:12.1.0.1.0' }現(xiàn)在需要在Java文件中編寫鏈接Oracle數(shù)據(jù)庫的代碼。Android Studio提供的模板中選擇Empty Activity,添加Java代碼到onCreate方法中。事先需要確認Oracle數(shù)據(jù)庫實例已經(jīng)啟動并處于可連接狀態(tài)。以下為鏈接Oracle數(shù)據(jù)庫代碼示例:
public class MainActivity extends Activity { private Connection conn = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //建立連接 try { Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();//加載驅(qū)動 conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "root", "password");//建立連接 } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | SQLException e) { e.printStackTrace(); } //查詢數(shù)據(jù)庫 try { Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery("select * from user_info");//查詢數(shù)據(jù)表 while (resultSet.next()) { String name = resultSet.getString("name"); String age = resultSet.getString("age"); Log.i("result->", name + " " + age); } statement.close();//釋放資源 } catch (SQLException e) { e.printStackTrace(); } //斷開連接 try { conn.close();//斷開連接 } catch (SQLException e) { e.printStackTrace(); } } }代碼中的getConnection方法需要輸入的參數(shù)共三個:URL,用戶名和密碼,分別表示連接Oracle實例的路徑、用戶名和密碼。其中URL的格式如下: jdbc:oracle:thin:@主機名/IP地址:端口號:oracle實例名稱 例如,示例中的URL為:jdbc:oracle:thin:@127.0.0.1:1521:orcl,其中“127.0.0.1”代表主機名/IP地址,“1521”代表端口號,“orcl”代表Oracle實例名稱。 由于在Android平臺中訪問數(shù)據(jù)庫是一項耗費資源的操作,建議將它放在異步任務(wù)中進行,以避免長時間的阻塞操作。 例如:
new AsyncTask在Android平臺中鏈接Oracle數(shù)據(jù)庫需要引入相應(yīng)的依賴和驅(qū)動,同時編寫代碼建立連接,查詢數(shù)據(jù)庫,然后斷開連接。為了避免阻塞操作,建議在異步任務(wù)中處理數(shù)據(jù)庫操作。() { @Override protected Void doInBackground(Void... voids) { //todo 處理數(shù)據(jù)庫操作 return null; } }.execute();