zoukankan      html  css  js  c++  java
  • 2020/2/6学习总结

    今天学习了安卓连接Mysql的方法:

    与java—web连接数据库的方法类似:

    xml文件进行布局,java代码获取布局控件,实现与数据库的连接,进行增删改查的操作。

    1.xml布局文件显示的是一个按钮和一个textView控件。
    点击按钮实现连接MySql数据库并获取表中的数据;textView用来显示获取的数据。xml布局显示如下:
    在这里插入图片描述

    2.导入jar包

    3.数据库连接

    MainActivity.java代码如下:

    package com.example.administrator.mysqldemo;
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    import java.util.HashMap;
    
    public class MainActivity extends Activity {
    
    private Button btn_get_data;
    private TextView tv_data;
    
    @SuppressLint("HandlerLeak")
    private Handler handler = new Handler(){
    @Override
    public void handleMessage(Message msg) {
    
    switch (msg.what){
    case 0x11:
    String s = (String) msg.obj;
    tv_data.setText(s);
    break;
    case 0x12:
    String ss = (String) msg.obj;
    tv_data.setText(ss);
    break;
    }
    
    }
    };
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    // 控件的初始化
    btn_get_data = findViewById(R.id.btn_get_data);
    tv_data = findViewById(R.id.tv_data);
    
    setListener();
    }
    
    /**
    * 设置监听
    */
    private void setListener() {
    
    // 按钮点击事件
    btn_get_data.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    
    // 创建一个线程来连接数据库并获取数据库中对应表的数据
    new Thread(new Runnable() {
    @Override
    public void run() {
    // 调用数据库工具类DBUtils的getInfoByName方法获取数据库表中数据
    HashMap<String, Object> map = DBUtils.getInfoByName("Charger9527");
    Message message = handler.obtainMessage();
    if(map != null){
    String s = "";
    for (String key : map.keySet()){
    s += key + ":" + map.get(key) + "\n";
    }
    message.what = 0x12;
    message.obj = s;
    }else {
    message.what = 0x11;
    message.obj = "查询结果为空";
    }
    // 发消息通知主线程更新UI
    handler.sendMessage(message);
    }
    }).start();
    
    }
    });
    
    }
    }

    4.DBUtils.java类:

    package com.example.administrator.mysqldemo;
    
    import android.content.Context;
    import android.util.Log;
    import android.widget.Toast;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.HashMap;
    
    /**
     * 数据库工具类:连接数据库用、获取数据库数据用
     * 相关操作数据库的方法均可写在该类
     */
    public class DBUtils {
    
        private static String driver = "com.mysql.jdbc.Driver";// MySql驱动
    
    //    private static String url = "jdbc:mysql://localhost:3306/map_designer_test_db";
    
        private static String user = "root";// 用户名
    
        private static String password = "123456";// 密码
    
        private static Connection getConn(String dbName){
    
            Connection connection = null;
            try{
                Class.forName(driver);// 动态加载类
                String ip = "192.168.3.61";// 写成本机地址,不能写成localhost,同时手机和电脑连接的网络必须是同一个
    
                // 尝试建立到给定数据库URL的连接
                connection = DriverManager.getConnection("jdbc:mysql://" + ip + ":3306/" + dbName,
                        user, password);
    
            }catch (Exception e){
                e.printStackTrace();
            }
    
            return connection;
        }
    
        public static HashMap<String, Object> getInfoByName(String name){
    
            HashMap<String, Object> map = new HashMap<>();
            // 根据数据库名称,建立连接
            Connection connection = getConn("map_designer_test_db");
    
            try {
                // mysql简单的查询语句。这里是根据MD_CHARGER表的NAME字段来查询某条记录
                String sql = "select * from MD_CHARGER where NAME = ?";
    //            String sql = "select * from MD_CHARGER";
                if (connection != null){// connection不为null表示与数据库建立了连接
                    PreparedStatement ps = connection.prepareStatement(sql);
                    if (ps != null){
                        // 设置上面的sql语句中的?的值为name
                        ps.setString(1, name);
                        // 执行sql查询语句并返回结果集
                        ResultSet rs = ps.executeQuery();
                        if (rs != null){
                            int count = rs.getMetaData().getColumnCount();
                            Log.e("DBUtils","列总数:" + count);
                            while (rs.next()){
                                // 注意:下标是从1开始的
                                for (int i = 1;i <= count;i++){
                                    String field = rs.getMetaData().getColumnName(i);
                                    map.put(field, rs.getString(field));
                                }
                            }
                            connection.close();
                            ps.close();
                            return  map;
                        }else {
                            return null;
                        }
                    }else {
                        return  null;
                    }
                }else {
                    return  null;
                }
            }catch (Exception e){
                e.printStackTrace();
                Log.e("DBUtils","异常:" + e.getMessage());
                return null;
            }
    
        }
    
    }
  • 相关阅读:
    后台写js 并跳转
    visual studio 2010 js 调试
    网页搜索功能 多表搜索sql
    c# 取得扩展名
    ajaxFileUpload 注意!
    ajaxFileUpload js判断类型
    sortable items不让他拖,也不让他放。cancel不然他拖动
    json 多重嵌套反序列化和序列化
    C#串口操作类,包括串口读写操作
    C#操作Word的超详细总结
  • 原文地址:https://www.cnblogs.com/wangzhaojun1670/p/12273490.html
Copyright © 2011-2022 走看看