Подключение к оракулу в Android

1

Таким образом, люди, вероятно, скажут мне, что это плохая идея, но я бы хотел хотя бы отдать ей это.

EDIT. Цель этого приложения состоит в том, что он может работать только тогда, когда устройство является частью той же сети, на которой находится oracle db или подключен к сети через VPN. Информация в базе данных не будет доступна на глобальном уровне, поэтому мне потребуется прямое подключение к Oracle db.

Теперь согласно этой теме

Подключение оракула в приложении Android

Ему удалось запросить оракула 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: Сетевой адаптер не удалось установить соединение"

Если я создаю экземпляр этого класса внутри стандартного приложения Java с основным методом, соединение работает. Любые идеи?

  • 0
    Обратите внимание, что многие компании отделяют свою корпоративную сеть от Wi-Fi и требуют дополнительного уровня безопасности, который также требует использования корпоративной VPN.
Теги:
jdbc

5 ответов

1
Лучший ответ

:) Да, я один, который скажет, что это "плохая" идея. IMHO, учитывая, что приложения для Android предназначены для работы на мобильных телефонах, где подключение может быть проблемой или временно потеряться, я утверждаю, что каждое хорошее приложение должно обладать некоторыми автономными возможностями. Таким образом, вы бы реализовали какой-то очень простой механизм синхронизации, например, с помощью SampleSyncAdapter - который синхронизируется с локальным SQLite db приложений.

Я думаю, что это лучший способ пойти (также для пользователей).

  • 0
    Спасибо, так что этот адаптер основан на облаке. Хорошо, намерение этого приложения состоит в том, что оно может работать только тогда, когда устройство является частью той же сети, в которой включена база данных Oracle или подключена к сети через VPN. Информация в базе данных не станет общедоступной, поэтому мне понадобится прямое подключение к базе данных oracle.
  • 0
    относительно исключения, которое вы получили: добавили ли вы разрешение на доступ к Wi-Fi в вашем приложении?
Показать ещё 3 комментария
2

Oracle имеет продукт, который обеспечивает синхронизацию данных с Oracle DB, а также автономные возможности; он называется Мобильный сервер

Как он работает, вы просто сохраняете свои данные в SQLite, а клиент Oracle обрабатывает синхронизацию. Конечно, вам нужно установить и настроить мобильный сервер, и каждое новое устройство необходимо будет подготовить, но как только это будет сделано, оно "просто работает!"

В приведенной выше ссылке есть вкладка загрузки, вы можете скачать и попробовать ее из себя.

Надеюсь, это поможет. Удачи с вашей проблемой.

Привет

Эрик, Oracle PM

1

Добавили ли вы в AndroidManifest.xml

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

Мне нужно создать приложение с тем же ограничением возможностей подключения и базы данных. Я сделал это, и у меня много исключений (ArrayIndexOutOfBound во время соединения с базой данных.)

Я использую для этого ojdbc14.jar. Итак, мне просто нужно "исправить Исключение, которое у меня есть, и все будет хорошо...

Для получения дополнительной информации см. этот раздел

0

Другим и гораздо более простым подходом является использование виртуального драйвера JDBC, который опирается на безопасную трехуровневую архитектуру: ваш JDBC-код отправляется через HTTP на удаленный сервлет, который фильтрует код JDBC (конфигурация и безопасность), прежде чем передавать его на Драйвер Oracle JDBC. Результат отправляется обратно через HTTP.

Есть несколько бесплатных программ, которые используют эту технику. Просто Google "Android JDBC Драйвер через HTTP".

0

Извините, что возродил старый поток, но у меня была эта проблема в течение длительного времени и, наконец, исправлена. Просто запустите затмение или все, что вы разрабатываете в "как администратор", и ошибка исчезнет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню