在上文Android入门案例(一)——简单登录中,我们只是简单接触Android,所以实现的是单机登录,这章我们接着完善登录的小案例,选择连接mysql云端数据库

一、准备

1.加载外部jar包

在Android工程中要使用jdbc的话,要导入jdbc的外部jar包,可去官网下载,也可以百度自行下载

2.导入jar包

方式一:可以在项目的build.gradle文件中直接添加如下语句导入:compile files('libs/mysql-connector-java-5.1.18-bin.jar')
方式二:下载jar包复制到项目的libs目录下,然后右键复制过来的jar包Add as libs 

3.连接数据库是需要网络的,在权限列表AndroidMainfest.xml中添加请求访问网络的权限

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

二、建立连接

采用JDBC建立数据库连接,网上有很多封装好的DB工具类,连接增删改查应有尽有,可自行百度参考,在这里我们只是进行简单的数据库连接实现登录。对于数据库ip地址有疑问请参考数据库访问超时

public class DBUtils {
    private static String driver = "com.mysql.jdbc.Driver";//MySQL 驱动
    private static String url = "jdbc:mysql://10.0.2.2/android";//MYSQL数据库连接Url
    private static String user = "local";//用户名
    private static String password = "123456";//密码
 
    private static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName(driver); //
            conn = DriverManager.getConnection(url,user, password);
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
        return conn;
    }
    public static Map<String, String> login(User user) {
        HashMap<String, String> map = new HashMap<>();
        Connection conn = getConnection();
        try {
            Statement st = conn.createStatement();
            String sql= "select * from user1 where username ='" + user.getUsername()
                    + "' and pwd ='" + user.getPassword() + "'";
            ResultSet res = st.executeQuery(sql);
            if (res == null) {
                return null;
            } else {
                int cnt = res.getMetaData().getColumnCount();
                res.next();
                for (int i = 1; i <= cnt; ++i) {
                    String field = res.getMetaData().getColumnName(i);
                    map.put(field, res.getString(field));
                }
                conn.close();
                st.close();
                res.close();
                return map;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

Android4.0以后不支持在主线程进行耗时操作,因此,如果设备是4.0版本以上的,要新开一条线程操作数据库,

所以在Android入门案例(一)——简单登录代码的基础上,在MainActivity.java中添加一个线程类:

class DBThread implements Runnable {
    private User user;
    private Context context;
 
    public void setUser(User user) {
        this.user = user;
    }
 
    public void setContext(Context context) {
        this.context = context;
    }
 
    @Override
    public void run() {
        Map<String,String> result= DBUtils.login(user));
        if (result != null && result.size > 0) {
            Intent intent=new Intent(this,infoActivity.class);
            intent.putExtra("user",u);
            context.startActivity(intent);
        }
    }
}
private void checkLogin(User u) {
        DBThread dt = new DBThread();
        dt.setUser(u);
        dt.setContext(this);
        Thread thread = new Thread(dt);
        thread.start();
    }

注意:这里因为必须要开子线程,可以run()方法中又要user和MAinActivity这两个参数,所以有涉及到线程传参,详情可参考向线程传递参数的方法

1.png

三、结束

1.bug点

  • 导入的jar包一定要正确
  • 在AndroidMainfest.xml中添加请求访问网络的权限
  • 数据库所在的服务器是否开了防火墙,阻止了访问
  • 数据库ip一定要正确,如果填写localhost或者127.0.0.1会提示报错。详情见数据库访问超时
  • Android4.0访问网络要新开一条线程操作数据库

2.见解

由于是刚接触Android,所以最先从连接数据库入手,以为和java中用jdbc方式连接一样就可以了,所以百度了很多案例,结果大都不能完整运行,踩了很多坑。

1.android连接数据库的方式有两种

       a.通过连接服务器,再由服务器读取数据库来实现数据的增删改查,这也是我们常用的方式。

       b.android直接连接数据库,这种方式非常耗手机内存,而且容易被反编译造成安全隐患,所以在实际项目中不推荐使用。(本文通过jdbc直连数据库,实际中不推荐)

还需要继续学习,关于Android用过HTTP连接数据库应该会在后续的文章中展现

Last modification:December 25th, 2019 at 01:51 pm
如果觉得我的文章对你有用,请随意赞赏
评论打卡也可以哦,您的鼓励是我最大的动力!