Androidプログラムから(Webサーバー上の)リモートSQLデータベースに直接アクセスできますか?つまり、必要なすべてのパラメータを使用して接続を開き、SQLクエリを実行するだけですか?
これは特定の携帯電話でのみ利用できるプライベートプログラム(一般には公開されていません)なので、サードパーティがデータベースにアクセスする心配はありません。
もしそうなら-Javaでどのライブラリが必要ですか?
ありがとう。
Androidプログラムから(Webサーバー上の)リモートSQLデータベースに直接アクセスできますか?つまり、必要なすべてのパラメータを使用して接続を開き、SQLクエリを実行するだけですか?
これは特定の携帯電話でのみ利用できるプライベートプログラム(一般には公開されていません)なので、サードパーティがデータベースにアクセスする心配はありません。
もしそうなら-Javaでどのライブラリが必要ですか?
ありがとう。
この質問は何度か出てきました。MSSQL JDBCドライバーをAndroidデバイスに展開し、SQLサーバーをインターネットに直接公開した場合、おそらくAndroidデバイスをSQLサーバーに直接接続できます。MSSQLドライバーがAndroidで正しく動作するかどうかは、まったく別の問題です。
それはあなたがそれをすることができるかもしれない方法です。しかし、これが悪い考えである理由です。
SQLサーバーをインターネットに直接公開しています。MSSQLサーバーとAndroidデバイスの間でデータを暗号化しない限り、意欲的なハッカーがデバイスとMSSQLの間でTDSデータストリームをスニッフィングし、リバースエンジニアリングしてデータを盗むのは比較的簡単です。暗号化により、攻撃者がデータを盗むことはほとんど不可能になります。ただし、攻撃者はデータベースに対して直接DOS/DDOS攻撃を仕掛ける可能性があります。良い考えではありません!
他のモバイルデバイス(iPhone、Symbian、BlackBerryなど)を接続することを計画している場合は、それらのデバイスからもSQL接続を作成できる必要があります。たとえば、iPhoneは(私のメモリから)Javaをネイティブにサポートしていないため、iPhoneをSQLサーバーに接続する方法を見つける必要があります。BlackBerryの方が簡単かもしれませんが、Symbianは運が悪いでしょう。したがって、データベースに接続するデバイスごとに、ほぼカスタムソリューションを作成する必要があります。悪いアイデアメンテナンスの負荷
データベースを操作できるWebサービスまたはカスタムTCP/IPサーバーを作成します。デバイスからこのWebサービス/サービスに接続します。Webサービスはその方法です。最近のデバイスの90%以上は、ネイティブにWebサービス呼び出しを行うことができます。
SQLデータベースと通信するにはWebサービスを使用する必要があると思います。そのWebサービスでrunSomeScalarQueryやrunOneTabularQueryなどの一般的なメソッドを定義し、自己定義オブジェクトなどの自己定義プロトコルを介してデータベース応答を送信できます。
これは非常に悪い習慣ですが、テスト目的で必要な場合、または他のオプションがないため、外部データベースに接続することは可能です。また、データアクセスがそれほど重くない場合は、ほとんどの場合正常に機能します。
これが準備できたら、プログラミングを進めることができます。ご存知のように、Androidは別のスレッドでネットワークアクセスを強制するため、スレッドを作成する方法を選択する必要があります。たとえば、を使用 して、メソッドAsynkTask
にコードを追加できます。doInBackground
private static final String url = "jdbc:mysql://{URL_SERVER}/{BASE_DATOS}";
private static final String user = "usuario";
private static final String password = "contraseña";
int count=0;
try {
// The newInstance() call is a work around for some broken Java implementations
//this creates some static objects that we need.
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection(url, user, password);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("QUERY");
while (rs.next()) {
//in every iteration we have a result
//if query is a Select, for instance
//"select one_column, another_column from ..."
//remember that rs has functions such as
//rs.getString(0)
//rs.getDouble(1)
//etc, that get the index of the columns in the select
//and cast it to the specific type
//here we do whatever we need with the results,
//and probably keep track of the progress with something like
// publishProgress(++count);
// end early if asynctask was cancel()
if (isCancelled())
break;
}
}
catch (Exception e) {
e.printStackTrace();
}