在android中连接到oracle

时间:2011-02-16 11:02:10

标签: java android oracle jdbc

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

编辑此应用程序的目的是它只能在设备是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应用程序中创建此类的实例,则连接有效。有什么想法吗?

5 个答案:

答案 0 :(得分:2)

Oracle的产品既提供与Oracle DB的数据同步,也提供离线功能;它被称为Mobile Server

它们的工作方式是,您只需将数据存储在SQLite中,Oracle客户端将处理同步。当然,您必须安装和配置移动服务器,并且需要配置每个新设备,但一旦完成,它就会起作用!&#34;

上面的链接中有一个下载标签,您可以下载并试用它。

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

此致

Eric,Oracle PM

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

您是否在AndroidManifest.xml中添加了

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

我要创建一个具有相同连接和数据库约束的应用程序。我已经完成了这个,我有很多异常(在连接到数据库期间的ArrayIndexOutOfBound。)

我使用ojdbc14.jar。所以,我“只需要”修复我所拥有的例外情况,这样就可以了......

有关详细信息,请参阅this topic

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

有一些免费软件使用这种技术。 只是Google“基于HTTP的Android JDBC驱动程序”。