在Android中连接到Oracle


问题内容

所以人们可能会告诉我这是一个坏主意,但我至少想让它尝试一下。

编辑 此应用程序的目的是仅当设备与oracle
db位于同一网络中或通过VPN连接到网络时才可以工作。数据库中的信息将无法全局访问,这就是为什么我需要直接连接到oracle db的原因。

现在根据这个线程

他成功查询了oracle db。

因此,我有一个相当基本的类,在初始化时将尝试与我的数据库建立连接。

package com.producermobile;

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 {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            String url = "jdbc:oracle:thin:@x.x.x.x:1521:PR10";
            this.conn = DriverManager.getConnection(url,"xxx","xxx");
            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 customer from customers");
        stmt.close();
        return rset;            
    }
}

在我的主要活动onCreate方法中,我有这个

@Override
public void onCreate(Bundle savedInstanceState) {
    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));
        }
        setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, list));

        ListView lv = getListView();
        lv.setTextFilterEnabled(true);          
    } catch(Exception e) {

    }
}

在Eclipse中,我将外部ojdbc14.jar文件添加到构建路径。

但是当我跑步时

this.conn = DriverManager.getConnection(url,"xxx","xxx");

我收到以下异常

“异常:网络适配器无法建立连接”

但是,如果我在标准的Java应用程序中使用main方法创建此类的实例,则该连接有效。有任何想法吗?


问题答案:

:)是的,我会告诉你这是一个“坏”主意。恕我直言,鉴于Android应用程序旨在在可能会导致连接问题或暂时失去连接的手机上运行,​​因此我认为每个好的应用程序都应具有一定程度的离线功能。因此,您将实现一些非常基本的同步机制-
例如与SampleSyncAdapter演示的-
与应用程序本地SQLite db同步。

我认为这是最好的方法(也是为了用户体验)。