我在使用JDBC驅動程序在應用程序和Oracle數據庫之間建立連接時遇到問題。使用JDBC驅動程序在Android應用程序和Oracle數據庫之間建立連接
主機甲骨文版本:Oracle數據庫11g第二版11.2.0.1.0 - 64位生產
的.jar JDBC驅動程序我都試過:ojdbc5.jar,ojdbc6.jar,ojdbc14.jar的,都來自甲骨文自己。 我已嚮應用程序授予清單中的權限。
<uses-permission android:name="android.permission.INTERNET" />
我絕對沒有迴應,logcat中什麼也沒有。 SQL語句對遠程數據庫沒有影響。 我可以使用SQL Plus在我的計算機上使用相同的登錄憑證連接遠程數據庫,並擁有所有權限。從MainActivity.java
package testapp.myapplication;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import java.sql.ResultSet;
import java.util.ArrayList;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
super.onCreate(savedInstanceState);
ConnectOra db = new ConnectOra();
ResultSet rs = db.getResult();
ArrayList<String> list = new ArrayList<String>();
while (rs.next()) {
list.add(rs.getString(1));
System.out.println(rs.getString(1));
}
} catch (Exception e) {
System.out.print(e);
}
}
public void btn(View view) {
startActivity(new Intent(MainActivity.this, MainActivity.class));//Just to refresh the mainact.
}
}
代碼
代碼從ConnectOra.java:
package testapp.myapplication;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import android.util.Log;
public class ConnectOra {
private Connection conn;
private Statement stmt;
public ConnectOra() throws ClassNotFoundException {
try {
System.out.println("in try");
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@103.A.B.C:15210/mdb";
this.conn = DriverManager.getConnection(url,"XXX","pw");
this.conn.setAutoCommit(false);
this.stmt = this.conn.createStatement();
} catch(SQLException e) {
Log.d("tag", e.getMessage());
}
}
public ResultSet getResult() throws SQLException {
ResultSet rset = stmt.executeQuery("select * from emp;");
System.out.println(rset+"");
stmt.close();
return rset;
}
}
所選答案的作品和我的代碼工作過。
Android不能與ojdbc5.jar
,ojdbc6.jar
一起工作,因爲它們需要一些Java SE組件在Android上不可用。因此,我們必須使用ojdbc14.jar
,因爲它的年齡大於ojdbc5.jar
和ojdbc6.jar
,並且不需要預先提供Java組件,這也意味着只有基本功能與ojdbc14.jar
一起使用。
使用ojdbc14.jar
您可能需要在運行數據庫的遠程主機上的sqlnet.ora
中設置「SQLNET.ALLOWED_LOGON_VERSION=8
」。這將允許舊的客戶端連接到新的數據庫,否則引發錯誤ORA-28040: No matching authentication protocol.
它也一直在執行,其他的更改不會保存在實際的遠程DB到close
的Connection
和Statement
SQL語句後至關重要。
當然,你必須改變端口號的細節和所有。 –
將立即嘗試。我知道它不安全,但是我再也沒有任何選擇,數據庫中的數據也不敏感。 –
不僅如此,理想情況下,您不應該在客戶端做很多數據處理,它應該發生在服務器上,客戶端應該只接收必要的數據。另外,數據很容易失去同步。我想不出任何其他用例,然後嘗試一些能夠快速運行並且稍後會產生更大問題的東西...... –