通过 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

通过USB连接到Xamarin.Android应用程序与网站进行通信

通过电子邮件/密码使用 Firebase 身份验证将 Firebase 连接到 Android 应用程序