我在使用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语句后至关重要。
当然,你必须改变端口号的细节和所有。 –
将立即尝试。我知道它不安全,但是我再也没有任何选择,数据库中的数据也不敏感。 –
不仅如此,理想情况下,您不应该在客户端做很多数据处理,它应该发生在服务器上,客户端应该只接收必要的数据。另外,数据很容易失去同步。我想不出任何其他用例,然后尝试一些能够快速运行并且稍后会产生更大问题的东西...... –