Android连接MySQL数据库实现方法详解

 更新时间:2024年02月11日 12:16:38   作者:在下嗷呜  
这篇文章主要介绍了Android连接MySQL数据库实现方法,在Android应用程序中连接MySQL数据库可以帮助开发人员实现更丰富的数据管理功能,而且在Android中操作数据库真的太智能了,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

前言

  • 要为MySQL添加 非root用户 并设置权限。一定要设置权限!!!默认是没有权限的!!!

请注意为用户设置主机时,主机设置为%时表示通配符,即任何主机均可使用本用户连接,但不能使用localhost(但可以使用本机ipv4地址连接),想使用localhost连接需将用户主机设置为localhost。

Android连MySQL因为不确定连接地址,所以用户主机要设置为%

  • 在Android中连接MySQL的目标ip不能用//localhost//127.0.0.1,应使用真实的ip地址

(可用cmd查询本机ip,cmd->ipconfig)

  • Android连接的MySQL版本应为5.X版本(8.X版本无法使用)驱动程序通用
  • 请注意!!!Android中连接/对数据库操作 只能在子线程进行!!!!(单开一个线程)

因为是耗时操作!!!

如果url、账号、密码正确还报错大概率是没有在子线程操作数据库。

  • 应为程序添加网络及WIFI权限(通过网络连接数据库)
//必须加
<uses-permission android:name="android.permission.INTERNET"/>
//可不加
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  • 添加MySQL驱动程序

将JAR程序放入Project视图模式下 app/libs中,并右键->Add As Library

  • 在url后加入如下语句能避免许多麻烦

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

  • 打开电脑的telnet服务,使其他人可以访问
  • 打开电脑防火墙的MySQL端口,使其他人可以访问
  • 建议以如下格式写连接代码

(1)ConnectionUtils 连接工具类,用于连接数据库

(2)User 存储内容类,用于存储MySQL回传数据

(3)UserDao 数据访问对象,执行SQL操作返回存储内容类

  • 连接关闭后ResultSet中内容会消失(将其内容在连接关闭前存在其他地方)
  • 读ResultSet内容前先移动指针 .next();如果ResultSet中无搜索结果,.next()方法返回false,有搜索结果返回true。
  • 设置连接MySQL超时 DriverManager.setLoginTimeout(2000);
  • 尽量复用通道,避免反复连接造成延迟!!!
  • ip地址问题

个人电脑一般在局域网内,其ip为NAT局域网ip,只能被同局域网设备访问,无法直接被其他网络访问,可使用内网穿透软件(如花生壳)进行处理。

  • MySQL其实就是服务器,可以直接进行远程连接,不用再做服务器
  • MySQL自带的4个数据库不能删!!!

information_schema、mysql、performation_schema、test

  • 可以多人同时使用同个用户名及密码登录,但不建议
  • MySQL中建议使用PreparedStatement而不是使用Statement,PreparedStatement的执行速度比Statement快并且可以防止SQL注入攻击。在使用PreparedStatement时可以用?代替值,然后使用.setString(int index , String value)方法设置?的值,但请注意,PreparedStatement的index起始是1而不是0。要复用PreparedStatement!!

实例

  • ConnectionUtils 连接工具类,用于连接数据库
  • User 存储内容类,用于存储MySQL回传数据
  • UserDao 数据访问对象,执行SQL操作返回存储内容类
//主线程  以监听为例
Thread thread=null;
public void onClick(View view){
      if(thread==null){
          //连接数据库不能在主线程,单开一个线程
          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);
            }
        }
    }
}
//存储内容类
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;
    }
}
//数据访问对象类
public class Dao {
    private Connection conn;
    public static User findUser(int id){
        //尽量复用通道,避免反复连接造成延迟
        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无结果,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);
        }
        //确定不使用再关闭通道
        //ConnectionUtils.close(conn);
    }
}

常见报错原因

  • 程序 对/连接 数据库操作 是否在子线程
  • mysql用户主机是否设置%(任意主机)或其他
  • mysql用户权限是否设置
  • 程序连接时的用户名与密码是否正确

连接缓慢原因

  • 程序是否复用通道connection,反复连接数据库会导致缓慢
  • prepareStatement代替statement,减少命令的创建(要复用PreparedStatement)

tag: java ,远程连接 ,mysql ,Android ,安卓,MySQL

到此这篇关于Android连接MySQL数据库实现方法详解的文章就介绍到这了,更多相关Android连接MySQL内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • 详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅

    详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅

    这篇文章主要介绍了详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 解决Android屏幕四周闪现红框的问题

    解决Android屏幕四周闪现红框的问题

    这篇文章主要介绍了解决Android屏幕四周闪现红框的问题,需要的朋友可以参考下
    2017-06-06
  • Android异步更新UI的四种方式

    Android异步更新UI的四种方式

    这篇文章主要为大家详细介绍了Android异步更新UI的四种方式,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android 系统实现多种开机动画和logo切换功能

    Android 系统实现多种开机动画和logo切换功能

    这篇文章主要介绍了android 系统实现多种开机动画和logo切换功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • Android基础开发之手势识别

    Android基础开发之手势识别

    这篇文章主要为大家详细介绍了Android基础开发之手势识别的相关资料,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Android开发X Y轴Board的绘制教程示例

    Android开发X Y轴Board的绘制教程示例

    这篇文章主要为大家介绍了Android开发X Y轴Board的绘制教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android四大组件之广播BroadcastReceiver详解

    Android四大组件之广播BroadcastReceiver详解

    Android开发的四大组件分别是:活动(activity),用于表现功能;服务(service),后台运行服务,不提供界面呈现;广播接受者(Broadcast Receive),勇于接收广播;内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库,本篇着重介绍广播组件
    2021-11-11
  • Android开发之针对联系人的封装

    Android开发之针对联系人的封装

    本文给大家分享的是如何在Android开发中封装联系人模块以及封装后的使用及总结,最后奉上代码,有需要的小伙伴可以参考下。
    2016-02-02
  • Android-屏幕适配需要注意的地方总结

    Android-屏幕适配需要注意的地方总结

    需要注意一下几个地方:尽量使用线性布局/尽量使用dip和sp,不要使用px/为不同的分辨率提供不同的布局文件和图片,接下来为你详细介绍下,感兴趣的你可以参考下哈,希望可以帮助到你
    2013-03-03
  • Android 中RxPermissions 的使用方法详解

    Android 中RxPermissions 的使用方法详解

    这篇文章主要介绍了Android 中RxPermissions 的使用方法详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-10-10

最新评论

?


http://www.vxiaotou.com