所以人们可能会告诉我这是一个坏主意,但我想至少试一试。
编辑此应用程序的目的是它只能在设备是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应用程序中创建此类的实例,则连接有效。有什么想法吗?
答案 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驱动程序”。