在上文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中添加请求访问网络的权限

二、建立连接

采用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 login(User user) {        HashMap 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 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.bug点

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

2.见解

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

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

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

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

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

更多相关文章

  1. Android开发中Message, MessageQueue, looper, handler, Handler
  2. Android之数据存储-刘志远-专题视频课程
  3. 打造android ORM框架opendroid(一)——ORM框架的使用
  4. Android(安卓)深入了解 Handler 和 Looper
  5. Android——进程与线程
  6. 字节跳动正式启动2021届秋季校招!这份字节跳动历年校招Android面
  7. Android通讯录数据库介绍与基本操作(增删改查)
  8. 曼妙琳珑心 Android(安卓)面试题(2)
  9. Android通讯录数据库介绍与基本操作(增删改查)

随机推荐

  1. Android仿微信二维码和条形码
  2. 添加接口节点
  3. android 简单实现沉浸式状态栏效果
  4. cordova生成android的app项目目录后运行c
  5. Android Mac下反编译apk
  6. Bytecode for the Dalvik VM
  7. android https之三
  8. android中系统日期时间的获取
  9. Android中用SP(SharedPreferences)保存数据
  10. android RecyclerView获得单个Item的View