Таким образом, люди, вероятно, скажут мне, что это плохая идея, но я бы хотел хотя бы отдать ей это.
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 с основным методом, соединение работает. Любые идеи?
:) Да, я один, который скажет, что это "плохая" идея. IMHO, учитывая, что приложения для Android предназначены для работы на мобильных телефонах, где подключение может быть проблемой или временно потеряться, я утверждаю, что каждое хорошее приложение должно обладать некоторыми автономными возможностями. Таким образом, вы бы реализовали какой-то очень простой механизм синхронизации, например, с помощью SampleSyncAdapter - который синхронизируется с локальным SQLite db приложений.
Я думаю, что это лучший способ пойти (также для пользователей).
Oracle имеет продукт, который обеспечивает синхронизацию данных с Oracle DB, а также автономные возможности; он называется Мобильный сервер
Как он работает, вы просто сохраняете свои данные в SQLite, а клиент Oracle обрабатывает синхронизацию. Конечно, вам нужно установить и настроить мобильный сервер, и каждое новое устройство необходимо будет подготовить, но как только это будет сделано, оно "просто работает!"
В приведенной выше ссылке есть вкладка загрузки, вы можете скачать и попробовать ее из себя.
Надеюсь, это поможет. Удачи с вашей проблемой.
Привет
Эрик, Oracle PM
Добавили ли вы в AndroidManifest.xml
uses-permission android:name="android.permission.INTERNET"
Мне нужно создать приложение с тем же ограничением возможностей подключения и базы данных. Я сделал это, и у меня много исключений (ArrayIndexOutOfBound во время соединения с базой данных.)
Я использую для этого ojdbc14.jar. Итак, мне просто нужно "исправить Исключение, которое у меня есть, и все будет хорошо...
Для получения дополнительной информации см. этот раздел
Другим и гораздо более простым подходом является использование виртуального драйвера JDBC, который опирается на безопасную трехуровневую архитектуру: ваш JDBC-код отправляется через HTTP на удаленный сервлет, который фильтрует код JDBC (конфигурация и безопасность), прежде чем передавать его на Драйвер Oracle JDBC. Результат отправляется обратно через HTTP.
Есть несколько бесплатных программ, которые используют эту технику. Просто Google "Android JDBC Драйвер через HTTP".
Извините, что возродил старый поток, но у меня была эта проблема в течение длительного времени и, наконец, исправлена. Просто запустите затмение или все, что вы разрабатываете в "как администратор", и ошибка исчезнет.