在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同步。
我认为这是最好的方法(也是为了用户体验)。