Android学习之链接mysql数据库

本文介绍如何在安卓应用中使用mysql-connector-java连接MySQL数据库,并通过线程和Handler实现数据读取及UI更新,避免主线程阻塞。

和java连接数据库一样,需要mysql-connector-java-版本号-bin.jar包导入到工程libs文件夹里面去

安卓里面连接数据库要放到一个线程里面去,因为主线程不能进行耗时操作

//数据库地址密码
    String url = "jdbc:mysql://ip地址:3306/数据库名";
    String username = "root";
    String password = "***";

    private void Connect() {
        //initVideos();
        currIndex = 0;
        //连接数据库线程
        new Thread(new Runnable() {
            private Connection con = null;
            @Override
            public void run() {
                // TODO Auto-generated method stub
                try {
                    Class.forName("com.mysql.jdbc.Driver");
                    con = DriverManager.getConnection(url, username, password);

                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                try {
                    testConnection(con);    //测试数据库连接
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            public void testConnection(Connection con1) throws SQLException {
                try {
                    String sql = "sql语句";
                    Statement stmt = con1.createStatement();        //创建Statement
                    ResultSet rs = stmt.executeQuery(sql);          //ResultSet类似Cursor

                    //<code>ResultSet</code>最初指向第一行
                    Bundle bundle = new Bundle();
                    while (rs.next()) {
                        //System.out.println("db:"+rs.getString("name"));
                        //System.out.println("db:"+rs.getString("address"));
                        bundle.clear();
                        bundle.putString("name", rs.getString("name"));
                        bundle.putString("address", rs.getString("address"));
                        bundle.putString("date",rs.getString("time"));
                        bundle.putInt("v_or_m",rs.getInt("v_or_m"));
                        Message msg = new Message();
                        msg.what = UPDATE_list;
                        msg.setData(bundle);
                        myHandler.sendMessage(msg);
                        try{
                            Thread.sleep(150);//防止sendMessage传送速度过慢,稍微延时
                        }catch (Exception e){
                            e.printStackTrace();
                        }
                    }

                    rs.close();
                    stmt.close();

                } catch (SQLException e) {

                } finally {
                    if (con1 != null)
                        try {
                            con1.close();
                        } catch (SQLException e) {
                        }
                }
            }
        }).start();
    }
另外,如果想让读出来的数据显示在界面上,要用到Handler这个类,因为线程里面不能够更改UI

Handler myHandler = new Handler(){
        @Override
        public void handleMessage(Message msg){
            super.handleMessage(msg);
            // TODO Auto-generated method stub
            switch(msg.what) {
                case UPDATE_list: {
                    Bundle data = new Bundle();
                    data = msg.getData();
                    ...
                }break;
            }
        }
    };



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值