【问题标题】:Connecting to oracle in android在android中连接到oracle
【发布时间】:2011-06-28 06:52:07
【问题描述】:

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

编辑这个应用程序的目的是,它只能在设备是 oracle db 所在的同一网络的一部分或通过 VPN 连接到网络时工作。数据库中的信息不会被全局访问,这就是为什么我需要直接连接到 oracle db。

现在根据这个帖子

Connecting the oracle in android application

他成功查询了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");

我收到以下异常

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

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

【问题讨论】:

  • 请注意,许多公司将其公司网络与 wifi 隔离,并且需要额外的安全层,还需要使用公司 VPN。

标签: java android oracle jdbc


【解决方案1】:

另一种更简单的方法是使用依赖于安全三层架构的虚拟 JDBC 驱动程序:您的 JDBC 代码通过 HTTP 发送到远程 Servlet,该 Servlet 过滤 JDBC 代码(配置和安全性),然后将其传递给Oracle JDBC 驱动程序。结果通过 HTTP 发回给您。

有一些免费软件使用了这种技术。 只需谷歌“Android JDBC Driver over HTTP”。

【讨论】:

    【解决方案2】:

    Oracle 的产品既提供与 Oracle DB 的数据同步,又提供离线功能;它叫Mobile Server

    它们的工作方式是,您只需将数据存储在 SQLite 中,Oracle 客户端将处理同步。当然,您必须安装和配置移动服务器,并且每个新设备都需要进行配置,但一旦完成,它“就可以工作了!”

    上面的链接中有一个下载标签,你可以下载并尝试一下。

    我希望这会有所帮助。祝你好运。

    问候

    埃里克,甲骨文产品经理

    【讨论】:

    • 没有任何合适的文档来制作应用程序。您能否提供示例链接以创建应用程序。我想从 oracle 获取一些数据到 Android 并显示图形视图。
    【解决方案3】:

    很抱歉恢复一个旧线程,但我有这个问题很长一段时间,终于解决了。只需以“管理员身份”运行 eclipse 或您正在开发的任何东西,错误就会消失。

    【讨论】:

      【解决方案4】:

      你是否在AndroidManifest.xml中添加了

      uses-permission android:name="android.permission.INTERNET"

      我必须创建一个具有相同连接和数据库约束的应用程序。我已经这样做了,并且我有很多异常(与数据库连接期间的ArrayIndexOutOfBound。)

      我为此使用 ojdbc14.jar。所以,我“只需要”修复我拥有的异常,就可以了......

      欲了解更多信息,请参阅this topic

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 谢谢,所以这个适配器是基于云的。好的,这个应用程序的目的是它只能在设备是 oracle db 所在网络的一部分或通过 VPN 连接到网络时才能工作。数据库中的信息不会被全局访问,这就是为什么我需要直接连接到 oracle 数据库。
        • 关于您收到的异常:您是否将访问wifi的权限添加到您的应用程序中?
        • “连接可能是一个问题或暂时丢失” 这对于无线笔记本电脑或任何有线或无线网络连接来说不是问题吗?如果是这样,是否应该用额外的东西过度复杂化架构以避免这种神秘的“连接性暂时丢失综合症”,除非我们的公司网络出现故障,否则我还没有看到这种情况?在办公室使用无线手持电脑与普通台式电脑有何不同?
        • 当然,如果要求需要断开连接的功能,那就另当别论了。
        • @StarShip3000 智能手机通常更容易受到攻击。但这取决于您的上下文。如果您仅在公司的内部无线网络内,那么这是一种情况,就好像您通过移动网络连接到外部一样。但总的来说,我认为考虑这种离线存储模式是改善移动应用用户体验的必要条件。
        猜你喜欢
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-20
        • 2015-05-14
        • 1970-01-01
        相关资源
        最近更新 更多