第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

我們可以使用JDBC在Android中連接遠(yuǎn)程MySQL數(shù)據(jù)庫嗎?

我們可以使用JDBC在Android中連接遠(yuǎn)程MySQL數(shù)據(jù)庫嗎?

慕碼人8056858 2019-10-11 13:58:10
我正在開發(fā)需要遠(yuǎn)程數(shù)據(jù)庫連接的客戶端服務(wù)器應(yīng)用程序。我知道網(wǎng)絡(luò)上的教程以及越來越多的人正在使用PHP與MySQL進(jìn)行交互。但是,我不太擅長PHP,以前的經(jīng)驗(yàn)是使用Core Java,Swing和JDBC。如果可以在Android應(yīng)用程序中使用JAVA JDBC API連接遠(yuǎn)程MySQL數(shù)據(jù)庫,誰能指導(dǎo)我?
查看完整描述

3 回答

?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

基本上:您可以連接到MySQL(或您使用的任何服務(wù)器)服務(wù)器,但不應(yīng)直接從Android應(yīng)用程序執(zhí)行此操作。


原因:


可以對(duì)Android應(yīng)用程序進(jìn)行反編譯,并且客戶端將具有訪問數(shù)據(jù)庫的憑據(jù)。如果使用正確的黑客工具(如Backtrack),則此惡意客戶端可以訪問,連接和利用數(shù)據(jù)庫中的數(shù)據(jù)。


如果您的應(yīng)用程序適用于世界各地的客戶端,則客戶端應(yīng)按一個(gè)操作或一組操作打開并維護(hù)與數(shù)據(jù)庫的連接。即使您的PC客戶端位于數(shù)據(jù)庫引擎服務(wù)器旁邊的LAN中,打開物理數(shù)據(jù)庫連接也要花費(fèi)很多時(shí)間。現(xiàn)在,想象一下從世界另一端的一個(gè)國家(例如中國或日本)或從南美的一個(gè)國家(例如巴西或秘魯)(我居住的國家)建立連接。


由于上述兩個(gè)原因,即使嘗試直接從您的電話設(shè)備連接到MySQL或任何其他數(shù)據(jù)庫引擎,這也是一個(gè)壞主意。


如何解決這個(gè)問題呢?使用面向服務(wù)的體系結(jié)構(gòu),其中至少要有兩個(gè)應(yīng)用程序:


服務(wù)提供商應(yīng)用程序。該應(yīng)用程序?qū)?chuàng)建和發(fā)布Web服務(wù)(最好是RESTful),并可以建立使用Web服務(wù)的策略,例如用戶身份驗(yàn)證和授權(quán)。該應(yīng)用程序還將連接到數(shù)據(jù)庫并對(duì)數(shù)據(jù)庫執(zhí)行CRUD操作。


服務(wù)使用者應(yīng)用程序。這將是您的Android(或任何其他移動(dòng)設(shè)備)應(yīng)用程序。


從您的問題出發(fā),您將重點(diǎn)放在第1點(diǎn)上。正如我在評(píng)論中所說,您可以使用Java創(chuàng)建一個(gè)Web應(yīng)用程序,在其中創(chuàng)建一個(gè)RESTful服務(wù),該服務(wù)可以歸結(jié)為一個(gè)POJO(普通的舊Java對(duì)象),每個(gè)服務(wù)都有一個(gè)方法。在這種方法中,由于畢竟是純Java,因此您可以添加其他功能,例如JDBC使用。


這是一個(gè)使用Jersey,Jackson(JSON庫)和JDBC的啟動(dòng)示例:


@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或Vogella或其他類似的教程中檢查Java Web應(yīng)用程序的進(jìn)一步配置(此答案中沒有太多信息)。


請(qǐng)注意,然后此應(yīng)用程序可以演變?yōu)榉謱討?yīng)用程序,并且JDBC代碼將進(jìn)入DAO類,然后ProductRestService該類將通過此DAO類訪問數(shù)據(jù)庫。這是另一個(gè)啟動(dòng)示例:


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();

    }

}

您可以將其他更改應(yīng)用于此項(xiàng)目,也可以進(jìn)行更改。


您能說一下PHP在這里做什么嗎?(如果我使用PHP開發(fā))


不用用Java編寫服務(wù)提供程序應(yīng)用程序(如上所示),而可以用PHP進(jìn)行。或使用Python,Ruby,C#,Scala或向您提供此技術(shù)的任何其他編程語言。同樣,我不確定您正在閱讀哪種類型的教程,但這應(yīng)該在某處進(jìn)行解釋,并說明出于該教程的目的,您將使用PHP創(chuàng)建服務(wù)。如果您覺得用Java而不是PHP或任何其他語言編寫這些服務(wù)感到更舒服,那沒有問題。您的android應(yīng)用并不真正在乎使用哪種技術(shù)來生產(chǎn)Web服務(wù),它只會(huì)在乎使用服務(wù)以及可以使用其中的數(shù)據(jù)。


查看完整回答
反對(duì) 回復(fù) 2019-10-11
  • 3 回答
  • 0 關(guān)注
  • 1057 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)