Android连接MySQL数据库实现登陆功能详细步骤

1. 加入依赖

在bulid.gradle中的 dependencies项 加入

  implementation 'mysql:mysql-connector-java:5.1.49'

2.开启联网权限

在 manifests/AndroidManifest.xml 文件中 加入

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

3.  JdbcUtil.java 工具类编写

public class JdbcUtils {
    private static JdbcUtils instance;

    public static JdbcUtils getInstance() {
        if(instance == null){
            instance = new JdbcUtils();
        }
        return instance;
    }


    public static Connection getConnection(){
        try{
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql://10.0.2.2:3306/数据库名?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true",
                    "root",
                    "12345678");
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }

    public static void close(Connection conn){
        try{
            conn.close();
        }catch(SQLException throwables){
            throwables.printStackTrace();
        }
    }
}

注意:

        1. url部分不能使用localhost或者127.0.0.1,安卓模拟器会把其当作手机本身的地址,应该为手机wifi网关地址10.0.2.2或者电脑局域网地址。 

        2.由于使用的5.1.49版本连接器 所以需要使用以下语句。 

Class.forName("com.mysql.jdbc.Driver"); 

4. UserDao.java

public class UserDao {
    JdbcUtils jdbcUtil = JdbcUtils.getInstance();
    Connection conn = JdbcUtils.getConnection();

    public boolean login(String username, String password) throws SQLException{
        String sql = "SELECT * from userInfo where username= ? and password= ?";
           if(conn == null){
               Log.i("error", "无数据链接");
               return false;
           }else {
               try {
                   PreparedStatement ps = conn.prepareStatement(sql);
                   ps.setString(1, username);
                   ps.setString(2, password);
                   ResultSet rs = ps.executeQuery();
                   Log.i("rs", "result:"+rs.toString());
                   return rs.next();
               } catch (SQLException e) {
                   e.printStackTrace();
                   return false;
               }

           }
    }
}

其中sql语句 请根据你的实际情况编写。 

5.User.java 

public class User {
    private String username;
    private String password;

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

实体类 请根据自身数据库设置编写

6. 在MainActivity中调用

public void onClick(View v) {
            new Thread(new Runnable() {

                @Override
                public void run() {
                    String id = et_id.getText().toString().trim();
                    String pwd = et_pwd.getText().toString().trim();
                    if (id.equals("") || pwd.equals("")) {
                        Looper.prepare();
                        Toast toast = Toast.makeText(MainActivity.this, "输入不能为空!", Toast.LENGTH_SHORT);
                        toast.show();
                        Looper.loop();
                    }
                    UserDao ud = new UserDao();
                    Boolean result;
                    try {
                        result = ud.login(id, pwd);

                    } catch (SQLException e) {
                        throw new RuntimeException(e);
                    }
                    Looper.prepare();
                    Toast toast;
                    if (!result) {
                        toast = Toast.makeText(MainActivity.this, "用户名不存在或密码错误!", Toast.LENGTH_SHORT);
                    } else {
                        toast = Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT);
                    }
                    toast.show();
                    Looper.loop();
                }
            }).start();
}

注意:需要新开一个线程访问数据库,否则可能主线程超时杀死连接导致 conn = null

其他布局文件 或者 变量名请根据实际情况更改。 

可能出现的问题:

/**
 * @author Kevin Wang
 * 使用5.1.49版本连接器,用com.mysql.jdbc.Driver作为ClassName
 * MySQL Server : 8.0.30
 * 一直出现conn  null 的原因是:
 *  1. 连接器版本问题  -> 在build.gradle中加入
 *                       implementation 'mysql:mysql-connector-java:5.1.49' 依赖项
 *  2. 数据库访问需要新开一个线程使用否则会网络超时,主线程杀死连接,返回null
 *  3. 联网权限未开启 -> 需要在manifests/AndroidManifest.xml加入
 *                     <uses-permission android:name="android.permission.INTERNET"/>
 *  4. 数据库url问题,如果使用localhost或者127.0.01 安卓模拟器会默认把手机地址当作前面两个地址
 *                -> 将ip改为模拟器连接wifi的网关10.0.2.2 或者 局域网中电脑的ip地址即可
 *
 * */

文章为作者本人学习过程中总结的内容,内容或逻辑质量不高。 若有问题,还请各位读者斧正。  

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值