Подключение к оракулу в Android - PullRequest
1 голос
/ 16 февраля 2011

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

РЕДАКТИРОВАТЬ Цель этого приложения состоит в том, что оно может работать только в том случае, если устройство является частью той же сети, в которой включена база данных oracle или подключена к сети через VPN.Информация в базе данных не станет общедоступной, поэтому мне понадобится прямое подключение к базе данных oracle.

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

Подключение оракула в приложении для 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 с методом main, соединение работает.Есть идеи?

Ответы [ 5 ]

2 голосов
/ 20 апреля 2011

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

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

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

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

Привет

Эрик, Oracle PM

1 голос
/ 20 апреля 2011

Вы добавили в AndroidManifest.xml

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

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

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

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

1 голос
/ 16 февраля 2011

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

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

0 голосов
/ 20 января 2016

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

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

0 голосов
/ 20 января 2012

Извините, что возродил старую ветку, но у меня была эта проблема в течение долгого времени, и я, наконец, исправил ее.Просто запустите eclipse или что-то еще, что вы разрабатываете в «от имени администратора», и ошибка исчезнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...