2012-04-25 10 views
2

この純粋なJavaアプリケーションで実行OKコードで:JDBCは、純粋なJavaで実行されますが、ないアンドロイド

Connection conn = null; 
    Statement inst; 

    try { 

     Class.forName ("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); 

     conn = DriverManager.getConnection("jdbc:sqlserver://192.168.1.100\\MSSQLSERVER:1433;DatabaseName=Prueba", "sa", "sa1234"); 
     inst = conn.createStatement(); 

     inst.executeUpdate("INSERT INTO TIENDAS(NOMBRE) VALUES ('ZZZZZZZ') "); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

しかし、Androidのプロジェクトで、私は 'ソケットが閉じた' エラーが発生します。

私はEclipse Heliosを使用しています。

誰かが私を助けることができますか?

+0

あなたはエミュレータでそれをやっていますか?あなたは例えばデバイス/エミュレータからの192.168.1.100のWebページ? –

答えて

5

AndroidはJavaの完全実装ではないため、このドライバはタイプ4のドライバであれば、Androidに移植されていないJavaの機能を使用している可能性があります。 Androidでコードを使用することについての懸念事項の第一は、Android上で実際に実行されるかどうかを知らずにです。

あなたがしていることについてより一般的な懸念があります。あなたがアンドロイド用のSQLブラウザを開発していない限り、私はあなたがしていることを非常に心配しています。 AndroidクライアントがDBを参照できるようにするには、インターネット経由で公開する必要があります。それは真剣に悪い考えです。あなたのDBを世界の他の国に公開するには、あなたのアプリケーションを使ってDBに接続する必要はありません。古いSQLブラウザを起動して、パスワードを推測したり、ハッキングしたり、デフォルトアカウントを試したりすることができます。だからあなたのDBをロックしていない場合、それは誰かがそれをハックするかどうかの質問ではなく、いつです。

Tomcat、JettyなどのAPPサーバを経由せずに、Androidからリモートアクセス可能なDBに直接アクセスするべきではありません。経験則:ファイアウォールのDBポートを誰にでも開放するあなたの解決策を働かせる。あなたは間違ってそれを間違ってやっています。

+0

+1です。あなたは実際には、APIの型を介してDBにアクセスする必要があります – SeanPONeil

+0

返信いただきありがとうございます。あなたは絶対に正しいですが、あなたは私に答えません。 – TheVanix

+0

私はあなたのデータベースをファイアウォールの背後に置いておくべきだと思います。だから、ユーザーはまずVPN経由でネットワークに接続する必要があり、残りはあなたが提供する方法に依存しています:) – waqaslam

0

Androidマニフェストにインターネットアクセス権が定義されていますか?

+0

はい、私は.............. – TheVanix

関連する問題