前言

最近在写的安卓项目,需要用到用户注册的功能,用户注册自然要用到远程数据库。我在自己的服务器上搭建了一个MySQL数据库(5.7版本),对于安卓连接远程数据库我也从来没操作过,在网上找了一些别人分享的教程,看了十几篇,才大概明白,然后操作成功!

代码实现

1.数据库相关配置
1.1下载连接MySQL的jar包文件
注意要对应数据库的版本,不然可能会出问题,我的是MySQL5.7版本,下面有我用的jar包文件,有需要的可以下载,解压密码:www.shiqifan.com:
点此下载MySQL的jar包文件
1.2在Android Studio中添加jar包文件,并且Rebuild Project
在Android Studio页面,在键盘按下快捷键Ctrl+Alt+Shift+S打开Project Structure页面,选择左侧的Dependencies(由于Android Studio的版本不同,页面可能不一样,但是操作的步骤都是一样的),在页面右侧我们可以看到这个项目所有的jar包文件。
Project Structure页面
点击加号,选择Jar Dependency,然后选择我们刚才下载的Jar包文件:
点击+号
选择jar包
出现下图,即表示添加jar包成功,我们点击ok关闭页面:
添加成功,关闭页面
点击菜单栏的Build,在下拉菜单里面选择Rebuild Project重新构建工程,构建成功,我们第一步就完成了:
TIM截图20191206211245.png

2.创建JdbcUtil类
创建一个JdbcUtil类,里面主要写了一个getConnection函数,使用了单例模式(只会有一个JdbcUtil实例,节省系统资源),调用JdbcUtil的getConnection函数可以获得一个和数据库的链接。通过这个链接,我们在后面就可以通过SQL语句对数据库进行操作。
代码如下:

package com.example.myapplication;
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;

public class JdbcUtil {
    private static JdbcUtil instance;

    public static JdbcUtil getInstance(){
        if (instance ==null){
            instance = new JdbcUtil();
        }
        return instance;
    }
    public Connection getConnection(String dbName, String name, String password) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            // 下面的"?autoReconnect=true&useSSL=false"必须要写,不然会报SSL验证的错误之类的。
            String url = "jdbc:mysql://这里填你的服务器IP:3306/"+dbName+"?autoReconnect=true&useSSL=false";
            return (Connection) DriverManager.getConnection(url,name,password);
        } catch (Exception e) {
            return null;
        }
    }
}

3.在AndroidManifest.xml添加网络权限
如果不在AndroidManifest.xml中添加网络权限,我们的安卓APP就无法使用网络。没有网络,谈何连接远程的MySQL数据库,所以我们要记得这一步骤,将下面的声明加入对应文件中:

<uses-permission android:name="android.permission.INTERNET"/>

具体操作如下图:
声明网络权限

4.对数据库进行操作
经过前两步,数据库的基本配置就已经弄好了,接下面我们就可以在Dao或者其他的地方对远程的MySQL数据库进行操作,在这里我只简单地展示怎么样对数据库进行操作:


在这一步,有一个很关键的要点。
安卓的主线程中是不允许使用网络的,一般耗时操作都不允许在主线程中执行。所以如果我们直接连接数据执行SQL语句系统会报NetWork之类的错误,所以我们在连接数据库执行SQL语句的时候要新建一个线程,重写他的run方法,在run方法中执行数据库的相关操作。

我简单的写了一个插入操作,函数代码如下:

public void login(View view){
    new Thread(new Runnable() {
        @Override
        public void run() {
            // 获得JdbcUtil实例
            JdbcUtil jdbcUtil = JdbcUtil.getInstance();
            // 获取对数据库的链接
            Connection conn = jdbcUtil.getConnection("bohe", "bohe", "bohejizhang");
            String sql = "insert into user(username, password) values(?, ?)";
            try{
                // PreparedStatement可以对SQL语句进行预编译,执行效率也会加快
                PreparedStatement pre = conn.prepareStatement(sql);
                // 设置SQL语句中的参数,即上面用?占位的username, password
                pre.setString(1, "test1");
                pre.setString(2, "password");
                pre.execute();
            }catch (SQLException e){
                e.printStackTrace();
                System.out.println("数据库连接出错");
            }finally {
                System.out.println("数据库插入操作执行完毕");
                try{
                    conn.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
        }
    }).start();
}

运行结果

插入成功截图

小结

安卓开发中连接远程数据库感觉和Web中的差别并不大,只是在安卓开发中需要注意一些东西,就比如上面要添加的网络权限,以及主线程中的一些限制,其他的基本都和Web中连接数据库一样。

最后修改:2019 年 12 月 06 日
如果觉得我的文章对你有用,请随意赞赏