Android:使用JDBC链接MySQL数据库

今天别人问怎么用android链接mysql的数据库,说到一般都是需要建一个web项目,然后用http访问服务器,通过服务器来查询数据库;突然想到可不可以直接用android访问数据库呢?在网上查到的确可以这样做,就是用jdbc链接本机的mysql数据库,于是自己写了一个小的demo写在这里供以后查看复习以及大家学习交流使用,错误不当之处还请指正。
首先总结一下几个要点:

  1. 要给android项目添加访问网络的权限;
  2. 数据库链接的url要用本机的ip不然没法访问;
  3. mysql要添加远程访问的权限;
  4. jdbc驱动要和mysql版本一致,不然一样不能访问;

接下来说项目的主要部分,这里只说主要部分:要实现的主要功能是实现判断用户的登录,并对不同种类的用户跳转不同的页面。
首先新建jdbcutils类,

    public class JDBCUtils {    private final String USERNAME = "admin";    private final String PASSWROD = "admin";    private final String DRIVER = "com.mysql.jdbc.Driver";    private final String URL = "jdbc:mysql://192.168.0.100:3306/usertest";    //192.168.0.100就是你的本机ip    private Connection conn;    private PreparedStatement ps;    private ResultSet res;    public JDBCUtils(){        try {            Class.forName(DRIVER);            conn = DriverManager.getConnection(URL, USERNAME, PASSWROD);        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (SQLException e) {            e.printStackTrace();        }    }     public List> query(String sql, List params)                  throws SQLException {              List> list = new ArrayList>();                ps = conn.prepareStatement(sql);              if (params != null && !params.isEmpty()) {                  for (int i = 0; i < params.size(); i++)                      ps.setObject(i + 1, params.get(i));              }              res = ps.executeQuery();               ResultSetMetaData metaData = res.getMetaData();              int col_len = metaData.getColumnCount();              while (res.next()) {                   Map map = new HashMap();                  for (int i = 0; i < col_len; i++) {                       String col_name = metaData.getColumnName(i + 1);                      Object col_value = res.getObject(col_name);                      map.put(col_name, col_value);                  }                  list.add(map);              }              return list;          }          //关闭连接     public void release() {              if (res != null)                  try {                      res.close();                  } catch (SQLException e) {                      e.printStackTrace();                  }              if (ps != null)                  try {                      ps.close();                  } catch (SQLException e) {                       e.printStackTrace();                  }              if (conn != null)                  try {                      conn.close();                  } catch (SQLException e) {                        e.printStackTrace();                  }          }  }   

写好布局如下:
Android:使用JDBC链接MySQL数据库_第1张图片
数据库设计如下:
users表
其中code值分别表示不同种类的用户;
在activity中添加如下代码:

//在登录按钮的点击事件中实现访问数据库btn_login.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                final String username = et_username.getText().toString();                final String password = et_password.getText().toString();                if (username.isEmpty() || password.isEmpty()) { //判断是否输入                    Toast.makeText(getApplicationContext(), "用户名密码不能为空!", 0)                            .show();                } else {                    final Message msg = new Message();                    new Thread(new Runnable() { //开启线程                        @Override                        public void run() {                            // TODO Auto-generated method stub                            JDBCUtils jdbc = new JDBCUtils();                            String sql = "select * from users where username = '"                                    + username                                    + "' and password ='"                                    + password                                    + "'";                            try {                                List> list = jdbc.query(                                        sql, null);                                mark = (Integer) list.get(0).get("code");                            } catch (SQLException e) {                                // TODO Auto-generated catch block                                e.printStackTrace();                            }                            if (mark == 1) { // mark == 1 用户已经加盟 跳转至用户中心                                msg.what = TO_USER_CENTER;                                myhandler.sendMessage(msg);  //发送handler消息                             } else if (mark == 2) { // mark == 2 用户没有加盟 申请加盟页面                                msg.what = TO_JOIN_UP;                                myhandler.sendMessage(msg);                            }                        }                                                  }).start();                }            }        });    }    private final static int TO_USER_CENTER = 101;    private final static int TO_JOIN_UP = 102;    Handler myhandler = new Handler() {        public void handleMessage(Message msg) {            switch (msg.what) {            case TO_USER_CENTER:                jump(TO_USER_CENTER);                break;            case TO_JOIN_UP:                jump(TO_JOIN_UP);                break;            }        };    };    //跳转的方法    public void jump(int i) {        Intent intent = new Intent();        if (i == TO_USER_CENTER) {            intent.setClass(getApplicationContext(), UserMain.class);            startActivity(intent);          }else if(i == TO_JOIN_UP){            intent.setClass(getApplicationContext(), JoinUP.class);            startActivity(intent);        }        finish();    }}

至此主要代码已经写完;其实这么做并没有什么实际意义,就权当复习使用了。

更多相关文章

  1. Android数据库组件Room
  2. Android 之 AlertDialog 用户登录
  3. Android数据库操作的两种方式
  4. Android studio 连接数据库小经历遇到的问题以及解决方法(java.sq
  5. TextView显示链接
  6. android点击邮箱链接跳转发送
  7. android复制数据库到SD卡(网上搜集,未经验证)
  8. Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库

随机推荐

  1. 意见反馈 页面布局的设计
  2. Android(安卓)开机自动启动应用
  3. 利用ContentProvider的添加数据
  4. Android(安卓)Material Design(7) 转场动
  5. android 背景设置
  6. android 监听视频播放完毕
  7. Android实现控件动画效果
  8. 如何获得android系统的读写权限
  9. Activity的使用(九): 读取联系人
  10. android中所有颜色代码