在android中连接到oracle

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

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

现在根据这个post

在android应用程序中连接oracle

他成功地查询了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:@xxxx: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 list = new ArrayList(); while(rs.next()) { list.add(rs.getString(1)); } setListAdapter(new ArrayAdapter(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"); 

我收到以下exception

“Io例外:网络适配器无法建立连接”

但是,如果我使用main方法在标准Java应用程序内创建此类的实例,则连接可以正常工作。 有任何想法吗?

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

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

Oracle的产品既提供与Oracle DB的数据同步,也提供离线function; 它叫做Mobile Server

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

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

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

问候

Eric,Oracle PM

你在AndroidManifest.xml中添加了吗?

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

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

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

有关更多信息,请参阅此主题

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

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

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