最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android連接MySQL數(shù)據(jù)庫實現(xiàn)方法詳解

 更新時間:2024年02月11日 12:16:38   作者:在下嗷嗚  
這篇文章主要介紹了Android連接MySQL數(shù)據(jù)庫實現(xiàn)方法,在Android應(yīng)用程序中連接MySQL數(shù)據(jù)庫可以幫助開發(fā)人員實現(xiàn)更豐富的數(shù)據(jù)管理功能,而且在Android中操作數(shù)據(jù)庫真的太智能了,需要的朋友可以參考下

前言

  • 要為MySQL添加 非root用戶 并設(shè)置權(quán)限。一定要設(shè)置權(quán)限!!!默認是沒有權(quán)限的!!!

請注意為用戶設(shè)置主機時,主機設(shè)置為%時表示通配符,即任何主機均可使用本用戶連接,但不能使用localhost(但可以使用本機ipv4地址連接),想使用localhost連接需將用戶主機設(shè)置為localhost。

Android連MySQL因為不確定連接地址,所以用戶主機要設(shè)置為%

  • 在Android中連接MySQL的目標ip不能用//localhost//127.0.0.1,應(yīng)使用真實的ip地址

(可用cmd查詢本機ip,cmd->ipconfig)

  • Android連接的MySQL版本應(yīng)為5.X版本(8.X版本無法使用)驅(qū)動程序通用
  • 請注意?。?!Android中連接/對數(shù)據(jù)庫操作 只能在子線程進行!!!!(單開一個線程)

因為是耗時操作!!!

如果url、賬號、密碼正確還報錯大概率是沒有在子線程操作數(shù)據(jù)庫。

  • 應(yīng)為程序添加網(wǎng)絡(luò)及WIFI權(quán)限(通過網(wǎng)絡(luò)連接數(shù)據(jù)庫)
//必須加
<uses-permission android:name="android.permission.INTERNET"/>
//可不加
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  • 添加MySQL驅(qū)動程序

將JAR程序放入Project視圖模式下 app/libs中,并右鍵->Add As Library

  • 在url后加入如下語句能避免許多麻煩

"?useUnicode=true&characterEncoding=utf-8&useSSL=false"

  • 打開電腦的telnet服務(wù),使其他人可以訪問
  • 打開電腦防火墻的MySQL端口,使其他人可以訪問
  • 建議以如下格式寫連接代碼

(1)ConnectionUtils 連接工具類,用于連接數(shù)據(jù)庫

(2)User 存儲內(nèi)容類,用于存儲MySQL回傳數(shù)據(jù)

(3)UserDao 數(shù)據(jù)訪問對象,執(zhí)行SQL操作返回存儲內(nèi)容類

  • 連接關(guān)閉后ResultSet中內(nèi)容會消失(將其內(nèi)容在連接關(guān)閉前存在其他地方)
  • 讀ResultSet內(nèi)容前先移動指針 .next();如果ResultSet中無搜索結(jié)果,.next()方法返回false,有搜索結(jié)果返回true。
  • 設(shè)置連接MySQL超時 DriverManager.setLoginTimeout(2000);
  • 盡量復(fù)用通道,避免反復(fù)連接造成延遲!!!
  • ip地址問題

個人電腦一般在局域網(wǎng)內(nèi),其ip為NAT局域網(wǎng)ip,只能被同局域網(wǎng)設(shè)備訪問,無法直接被其他網(wǎng)絡(luò)訪問,可使用內(nèi)網(wǎng)穿透軟件(如花生殼)進行處理。

  • MySQL其實就是服務(wù)器,可以直接進行遠程連接,不用再做服務(wù)器
  • MySQL自帶的4個數(shù)據(jù)庫不能刪?。?!

information_schema、mysql、performation_schema、test

  • 可以多人同時使用同個用戶名及密碼登錄,但不建議
  • MySQL中建議使用PreparedStatement而不是使用Statement,PreparedStatement的執(zhí)行速度比Statement快并且可以防止SQL注入攻擊。在使用PreparedStatement時可以用?代替值,然后使用.setString(int index , String value)方法設(shè)置?的值,但請注意,PreparedStatement的index起始是1而不是0。要復(fù)用PreparedStatement!!

實例

  • ConnectionUtils 連接工具類,用于連接數(shù)據(jù)庫
  • User 存儲內(nèi)容類,用于存儲MySQL回傳數(shù)據(jù)
  • UserDao 數(shù)據(jù)訪問對象,執(zhí)行SQL操作返回存儲內(nèi)容類
//主線程  以監(jiān)聽為例
Thread thread=null;
public void onClick(View view){
      if(thread==null){
          //連接數(shù)據(jù)庫不能在主線程,單開一個線程
          thread=new Thread(new Runnable(){
              User user=UserDao.findUser(1);
          });
      }
}
//連接工具類
public class ConnectionUtils {
    public static Connection getConn(){
        String url="jdbc:mysql://255.255.255.1:3306/databaseName"+"?useUnicode=true&characterEncoding=utf-8&useSSL=false";
        String username="firstUser";
        String password="123456";
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
        Connection connection_jdbc = null;
        try {
            DriverManager.setLoginTimer(2000);
            connection_jdbc= DriverManager.getConnection(url,username,password);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return connection_jdbc;
    }
    public static boolean close(Connection connection){
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
//存儲內(nèi)容類
public class User {
    private int id;
    private String username;
    private String password;
    private int storyid;
    public int getId() {
        return id;
    }
    public String getUsername() {
        return username;
    }
    public String getPassword() {
        return password;
    }
    public int getStoryid() {
        return storyid;
    }
    public User(int id,String username,String password,int storyid){
        this.id=id;
        this.username=username;
        this.password=password;
        this.storyid=storyid;
    }
    public String toString(){
        String str="id:"+id+" username:"+username+" password:"+password+" storyid:"+storyid;
        return str;
    }
}
//數(shù)據(jù)訪問對象類
public class Dao {
    private Connection conn;
    public static User findUser(int id){
        //盡量復(fù)用通道,避免反復(fù)連接造成延遲
        if(conn==null){
            conn=ConnectionUtils.getConn();
        }
        try {
            Statement statement=conn.createStatement();
            String sql="select * from mysql where id ='"+id+"'";
            ResultSet resultSet=statement.executeQuery(sql);
            Boolean bool = resultSet.next();//先移動指針再獲取值
            //如果ResultSet無結(jié)果,next()返回false
            if(bool){
               int resultSetId=resultSet.getInt("id");
               String resultSetSex=resultSet.getString("sex");
               String resultSetName=resultSet.getString("name");
               User user=new User(resultSetId,resultSetSex,resultSetName);
               return user;
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        //確定不使用再關(guān)閉通道
        //ConnectionUtils.close(conn);
    }
}

常見報錯原因

  • 程序 對/連接 數(shù)據(jù)庫操作 是否在子線程
  • mysql用戶主機是否設(shè)置%(任意主機)或其他
  • mysql用戶權(quán)限是否設(shè)置
  • 程序連接時的用戶名與密碼是否正確

連接緩慢原因

  • 程序是否復(fù)用通道connection,反復(fù)連接數(shù)據(jù)庫會導(dǎo)致緩慢
  • prepareStatement代替statement,減少命令的創(chuàng)建(要復(fù)用PreparedStatement)

tag: java ,遠程連接 ,mysql ,Android ,安卓,MySQL

到此這篇關(guān)于Android連接MySQL數(shù)據(jù)庫實現(xiàn)方法詳解的文章就介紹到這了,更多相關(guān)Android連接MySQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android實現(xiàn)加載廣告圖片和倒計時的開屏布局

    Android實現(xiàn)加載廣告圖片和倒計時的開屏布局

    這篇文章主要介紹了Android實現(xiàn)加載廣告圖片和倒計時的開屏布局,需要的朋友可以參考下
    2014-07-07
  • Android上下文菜單用法實例分析

    Android上下文菜單用法實例分析

    這篇文章主要介紹了Android上下文菜單用法,以完整實例形式分析了Android上下文菜單的定義、布局及功能實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • Android自定義view實現(xiàn)輸入框效果

    Android自定義view實現(xiàn)輸入框效果

    這篇文章主要為大家詳細介紹了Android自定義view實現(xiàn)輸入框效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Android仿知乎懸浮功能按鈕FloatingActionButton效果

    Android仿知乎懸浮功能按鈕FloatingActionButton效果

    前段時間在看屬性動畫,恰巧這個按鈕的效果可以用屬性動畫實現(xiàn),下面通過本文給大家分享adroid仿知乎懸浮功能按鈕FloatingActionButton效果,需要的朋友參考下吧
    2017-04-04
  • 詳解Flutter掃碼識別二維碼內(nèi)容

    詳解Flutter掃碼識別二維碼內(nèi)容

    這篇文章主要介紹了Flutter掃碼識別二維碼內(nèi)容的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Android Studio 實現(xiàn)文檔注釋的快捷鍵

    Android Studio 實現(xiàn)文檔注釋的快捷鍵

    這篇文章主要介紹了Android Studio 實現(xiàn)文檔注釋的快捷鍵,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android圓角頭像工具類詳解

    Android圓角頭像工具類詳解

    這篇文章主要為大家詳細介紹了Android圓角頭像工具類,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Android使用AsyncTask實現(xiàn)多線程下載的方法

    Android使用AsyncTask實現(xiàn)多線程下載的方法

    這篇文章主要介紹了Android使用AsyncTask實現(xiàn)多線程下載的方法,以完整實例形式詳細分析了Android使用AsyncTask實現(xiàn)多線程下載的功能代碼,界面布局及權(quán)限控制的具體方法,需要的朋友可以參考下
    2016-03-03
  • Android實現(xiàn)隨意拖動View效果的實例代碼

    Android實現(xiàn)隨意拖動View效果的實例代碼

    這篇文章主要介紹了Android實現(xiàn)隨意拖動View效果,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • Android實現(xiàn)緩存大圖到SD卡

    Android實現(xiàn)緩存大圖到SD卡

    這篇文章主要為大家詳細介紹了Android實現(xiàn)緩存大圖到SD卡,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

台湾省| 琼海市| 镶黄旗| 阿拉尔市| 丰原市| 灵武市| 克东县| 吴忠市| 霍城县| 淅川县| 汤阴县| 西峡县| 溆浦县| 龙江县| 遵化市| 樟树市| 乳山市| 庄河市| 麻阳| 岳阳县| 苍山县| 庆云县| 三台县| 丰都县| 兴文县| 日照市| 建阳市| 台东县| 乐都县| 南川市| 筠连县| 新绛县| 如东县| 平泉县| 福鼎市| 仙居县| 佛教| 伊金霍洛旗| 当涂县| 乌恰县| 英吉沙县|