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