sql >> データベース >  >> RDS >> Mysql

JDBCを使用してAndroidのリモートMySQLデータベースに接続できますか?

    基本的に:MySQL(または使用するもの)サーバーに接続できますが、すべきではありません これはAndroidアプリケーションから直接実行してください。

    理由:

    1. Androidアプリケーションは逆コンパイルでき、クライアントはデータベースにアクセスするための資格情報を持ちます。 バックトラック などの適切なハッキングツールを使用している場合 、この悪意のあるクライアントは、データベース内のデータにアクセス、接続、および悪用する可能性があります。

    2. アプリケーションが世界中のクライアント向けである場合、クライアントは、操作または操作のセットごとにデータベースへの接続を開いて維持する必要があります。 PCクライアントがデータベースエンジンサーバーの隣のLANにある場合でも、物理データベース接続を開くには多くの時間がかかります。ここで、世界の反対側の国からの接続を開くことを想像してみてください。中国または日本、あるいはブラジルやペルー(私が住んでいる場所)のような南アメリカの国から。

    私が思いつくことができるこれらの2つの理由のために、MySQLまたは他のデータベースエンジンに電話デバイスから直接接続しようとしても悪い考えです。

    この問題を解決する方法は?少なくとも2つのアプリケーションがあるサービス指向アーキテクチャを使用します。

    1. サービスプロバイダーアプリケーション。このアプリケーションは、Webサービス(できればRESTful)を作成して公開し、ユーザー認証や承認などのWebサービスを利用するためのポリシーを確立する場合があります。このアプリケーションはデータベースにも接続し、データベースに対してCRUD操作を実行します。

    2. サービスコンシューマーアプリケーション。これはAndroid(またはその他のモバイル)アプリケーションになります。

    あなたの質問から、あなたはポイント1に焦点を当てています。私のコメントで述べたように、JavaでWebアプリケーションを作成し、そこでRESTfulサービスを作成できます。これは、POJO(プレーンオールドJavaオブジェクト)に要約されます。サービスごとのメソッドがあります。この方法では、結局のところプレーンJavaなので、JDBCの使用法などの他の機能を追加できます。

    ジャージー、ジャクソン(JSONライブラリ)、JDBCを使用したキックオフの例を次に示します。

    @Path("/product")
    public class ProductRestService {
    
        @GET
        @Path("/list")
        @Produces(MediaType.APPLICATION_JSON)
        public List<Product> getProducts() {
            List<Product> productList = new ArrayList<>();
            Connection con = ...; //retrieve your database connection
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT id, name FROM product");
            while (rs.next()) {
                Product product = new Product();
                product.setId(rs.getInt("id"));
                product.setName(rs.getString("name"));
                productList.add(product);
            }
            //ALWAYS close the resources
            rs.close();
            stmt.close();
            conn.close();
            return productList;
        }
    }
    

    mkyong's または Vogella's または他の好きなもの(この回答に入れるには情報が多すぎます)。

    この場合、このアプリケーションは階層化されたアプリケーションに進化する可能性があり、JDBCコードはDAOクラスに入れられ、次にProductRestServiceに入れられることに注意してください。 クラスは、このDAOクラスを介してデータベースにアクセスします。別のキックオフの例を次に示します。

    public class ProductDao {
        public List<Product> getProducts() {
            List<Product> productList = new ArrayList<>();
            Connection con = ...; //retrieve your database connection
            //the rest of the code explained above...
            return productList;
        }
    }
    
    @Path("/product")
    public class ProductRestService {
        @GET
        @Path("/list")
        @Produces(MediaType.APPLICATION_JSON)
        public List<Product> getProducts() {
            ProductDao productDao = new ProductDao();
            return productDao.getProducts();
        }
    }
    

    また、このプロジェクトに他の変更を適用したり、進化させたりすることもできます。

    ここでPHPが何をしているのか教えていただけますか? (PHPで開発する場合)

    (上記のように)Javaでサービスプロバイダーアプリケーションを作成する代わりに、PHPで作成できます。または、Python、Ruby、C#、Scala、またはこのテクノロジーを提供するその他のプログラミング言語。繰り返しになりますが、どのようなチュートリアルを読んでいるかはわかりませんが、これはどこかで説明し、そのチュートリアルの目的のためにPHPを使用してサービスを作成することを説明する必要があります。 PHPやその他の言語ではなく、Javaでこれらのサービスを作成する方が快適な場合は、問題ありません。 Androidアプリは、Webサービスの生成にどのテクノロジーが使用されているかを実際には気にせず、サービスの消費と、サービスからのデータを消費できることだけを気にします。



    1. Postgresqlの累積合計をカウントします

    2. テーブルまたはビューの依存オブジェクトを検索する

    3. SQLで数値を最も近い整数に切り上げる方法

    4. PostgreSQLを垂直方向にスケーリング