通过 Android 应用程序连接到 OracleDB
Posted
技术标签:
【中文标题】通过 Android 应用程序连接到 OracleDB【英文标题】:Connecting to an OracleDB via an Android app 【发布时间】:2011-04-20 08:59:34 【问题描述】:感谢您的寻找,希望您能帮助我。
目前,我想从我的 android 应用程序中的 OracleDB 服务器(在 LAN 上)获取一些数据。我将 JDBC 与 ojdbc14.jar 和我的 Android 应用程序中的以下代码以及我与 logcat 一起使用的 stackTrace 一起使用:
http://pastebin.archlinux.fr/432118
如您所见,有一个很大的异常,我无法修复它...
是否有人已经成功地与他的 Android 应用程序建立了 OracleDB 连接并且没有 Web 服务? 有人可以帮我解决这个异常吗?
有关信息:我尝试更改 ojdbc 驱动程序(我做过的最糟糕的事情 >.>),并检查了 URL 的有效性。
感谢您的帮助...
编辑:应用程序必须从 OracleDB 获取数据,并将其存储在 Android 的本地 SQLite DB 中,因为 Android 设备将与 LAN 断开连接(我不想让数据从网络 [3G])。断开连接后,该应用程序将使用 SQLite 上的本地数据。当用户的活动完成后,设备将重新连接到 LAN,并且应用程序将编辑的 SQLite 本地数据与主 Oracle DB 服务器同步。 SQLite App OracleDB
【问题讨论】:
Pastebin 的 Stacktrace 不再可用 - 请不要使用外部服务 - 在您的问题中包含所有内容。 【参考方案1】:Oracle 实际上有一款专门用于将 Oracle 数据库与移动设备同步的产品。它被称为移动服务器。
但是使用模型与您所描述的略有不同;您可以使用本地 Berkeley DB 或 SQLite 数据库,而不是直接连接到 Oracle 数据库,然后移动服务器会将其与 Oracle 数据库同步。
它可以作为自动处理同步的单独进程运行,或者您可以使用 API 调用从您的程序中控制同步。如果这听起来对你有用,check it out here。
您可以从下载选项卡下载并试用。
祝你好运解决您的问题。
问候
埃里克, 甲骨文产品经理
【讨论】:
我会试试这个。感谢您的回答。我将详细说明我的答案,因为我想用我的应用程序做你的产品:) 你的产品可以在应用程序中,还是必须在 Android 应用程序之外,由客户单独安装? 它可以一次安装。您可以在这里了解更多信息:bit.ly/dNmSKK您想要“SQLite 移动客户端指南”,第 4 章是关于 Android 的 嗨。我已经阅读了很多文档,但我认为文档很糟糕。太多单独的章节,你失去了读者。而且,更重要的是,在所有文档中,我从未找到 Oracle Database Lite 移动开发工具包下载页面的 URL。 O_o 所有文档都是基于我们已经下载了一些东西的事实,但我没有找到 Android 的链接。你能帮我吗? 你可以从我上面贴的链接下载,但不是很直观。对于那个很抱歉!您可以在此处下载移动服务器:bit.ly/fMDWMP,它是 Database Lite 软件包的一部分。【参考方案2】:我找到了答案! Oracle Database Lite 产品就是解决方案。我解释...
Oracle Database Lite 是一个大产品,具有不可读的文档。我无法理解它是如何工作的。但是,我已经尝试安装它。并且,在安装文件夹中,有一个 jdbc 文件夹。
在那里,您会找到一个 ojdbc14.jar。在您的项目中使用它,而不是在经典 Oracle 网页上找到的 ojdbc14.jar。它有效!
您将能够使用 JDBC 通过您的 Android 应用程序连接 Oracle DB。
谢谢大家, 最好的问候,
埃里亚托克
【讨论】:
我不建议使用 jdbc 从 Android 手机直接连接到您的 Oracle 数据库 嗨。谢谢回答。你不是唯一一个警告我的人。但是,我再说一遍,这个应用程序的使用环境非常非常特殊。这是最好的解决方案。此外,网络架构是安全的,Oracle DB 没有连接到互联网,仅在 LAN 上,并且 LAN 上的连接非常有限。感谢您的帮助。 好的,如果它对你有用,那就太好了。对于本地 LAN,它可能会正常工作。但对于其他阅读本文的人,我想指出这样的解决方案有局限性,通常不应使用,例如,通过 Internet 将 Android 手机连接到 Oracle 数据库。在这种情况下,如果您尝试传输大量数据,则会产生非常严重的安全隐患,更不用说稳定性和电池寿命问题了。无论如何,我很高兴能够帮助您找到适合您的东西! 这正是我需要的!直接连接到 LAN 中的 Oracle 数据库,电池效率不是问题。 +1【参考方案3】:通过 LAN 与 Android 的 ORACLE 数据库连接
授予一些清单权限
<permission
android:name="info.android.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="info.android.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
MainActivity 类
package example.com.myapplication;
import java.sql.Connection;
import java.sql.DriverManager;
import android.os.StrictMode;
public class MainActivity extends AppCompatActivity
private static final String DEFAULT_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DEFAULT_URL = "jdbc:oracle:thin:@192.168.0.1:1521:xe";
private static final String DEFAULT_USERNAME = "system";
private static final String DEFAULT_PASSWORD = "oracle";
private Connection connection;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (android.os.Build.VERSION.SDK_INT > 9)
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
TextView tv = (TextView) findViewById(R.id.hello);
try
this.connection = createConnection();
e.Log("Connected");
Statement stmt=connection.createStatement();
ResultSet rs=stmt.executeQuery("select * from cat");
while(rs.next())
System.out.println("hello : " + rs.getString(1));
connection.close();
catch (Exception e)
e.Log(""+e);
e.printStackTrace();
public static Connection createConnection(String driver, String url, String username, String password) throws ClassNotFoundException, SQLException
Class.forName(driver);
return DriverManager.getConnection(url, username, password);
public static Connection createConnection() throws ClassNotFoundException, SQLException
return createConnection(DEFAULT_DRIVER, DEFAULT_URL, DEFAULT_USERNAME, DEFAULT_PASSWORD);
先决条件是: 请注意,无需添加依赖库 ojdbc14.jar 只需将 ojdbc14.jar 复制到您的 JAVA_HOME jre -> lib -> ext 并在此处粘贴 ojdbc14.jar 然后首先通过 cmd/terminal 手动检查 jdbc 连接 制作任何简单的java程序 http://www.javatpoint.com/example-to-connect-to-the-oracle-database
【讨论】:
以上是关于通过 Android 应用程序连接到 OracleDB的主要内容,如果未能解决你的问题,请参考以下文章
无法通过 BLE 将 Android 应用程序连接到 Raspberry Pi 3
无法通过 Pentaho 连接到 oracle。找不到“oracle.jdbc.driver.OracleDriver”
我可以在没有 Oracle JDBC 驱动程序的情况下连接到 Oracle 数据库吗?
通过 Hortonworks Sandbox 上的 sqoop 连接到 Oracle