Android:使用JDBC链接MySQL数据库

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<Map<String, Object>> query(String sql, List<Object> params)  
                throws SQLException {  
            List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();    
            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<String, Object> map = new HashMap<String, Object>();  
                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();  
                }  
        }  
}

写好布局如下:
登陆页面
数据库设计如下:
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<Map<String, Object>> 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();
    }
}

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

猜你喜欢

转载自blog.csdn.net/u011494285/article/details/46584215