Android 直连MySQL数据库实现增删改查

发布时间:2022-07-01 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android 直连MySQL数据库实现增删改查脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

最近在重构老项目 在原来的基础上加了MySQL数据库的使用 主要是为了记录一些重要数据! 第一次使用记得还是三四年前 现在很久没操作了 先写个demo练习一下 这里记录一下流程和使用方法!

效果图

Android 直连MySQL数据库实现增删改查

导入mySQL-connector-java-5.1.30-bin.jar包

mysql-connector-java-5.1.30-bin.jar包 CSDN下载地址

将jar下载后,在新建的demo项目app/src/main 目录下 创建libs文件夹,将jar包复制到该文件夹下,然后右键选择 Add As Library 进行导入即可

Android 直连MySQL数据库实现增删改查

等待gradle同步jar包后,打开gradle文件依赖内容如下说明导入成功 如下图所示

Android 直连MySQL数据库实现增删改查

XMl文件

<?xML version="1.0" encoding="utf-8"?>
<andROIdx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.COM/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width=";match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivITy">

    <Button
        android:id="@+id/BTn_select_for_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="2dp"
        android:text="根据字段查询"
        android:textSize="16sp"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_select_table"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="2dp"
        android:text="整表查询"
        android:textSize="16sp"
        app:layout_constraintTop_toBottomOf="@id/btn_select_for_id" />

    <Button
        android:id="@+id/btn_insert"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="10dp"
        android:text="插入数据"
        android:textSize="16sp"
        app:layout_constraintTop_toBottomOf="@id/btn_select_table" />

    <Button
        android:id="@+id/btn_delete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="10dp"
        android:text="删除表数据"
        android:textSize="16sp"
        app:layout_constraintTop_toBottomOf="@id/btn_insert" />

    <TextView
        android:id="@+id/tv_data_for_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:padding="10dp"
        android:text="显示单个查询的数据"
        android:textSize="16sp"
        app:layout_constraintTop_toBottomOf="@id/btn_delete" />

    <TextView
        android:id="@+id/tv_data_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="10dp"
        android:text="显示整个表的数据"
        android:textSize="16sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

MySQL 数据库

代码层面 就是 先连接到mysql数据库 然后对其操作 增删改查 一起来看下demo的实现吧

public class MainActivity extends AppCompatActivity {

    PRivate static final String TAG = "MainActivity";

    private Button btnSelectForId, btnSelectTable, btnInsert, btnDelete;
    private TextView tvShowId, tvShowTable;

    @SupPressLint("HandlerLeak")
    private Handler handler = new Handler() {
        @override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0x11:
                case 0x12:
                    String s = (String) msg.obj;
                    tvShowId.setText(s);
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        suPEr.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //initView
        btnSelectForId = findViewById(R.id.btn_select_for_id);
        btnSelectTable = findViewById(R.id.btn_select_table);
        btnInsert = findViewById(R.id.btn_insert);
        btnDelete = findViewById(R.id.btn_delete);
        tvShowId = findViewById(R.id.tv_data_for_id);
        tvShowTable = findViewById(R.id.tv_data_show);
        //设置监听事件
        initListener();
    }

    private void initListener() {
        // 查询单个字段
        btnSelectForId.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.getInfoById();
                        Message message = handler.obtainMessage();
                        if (map != null) {
                            StringBuilder s = new StringBuilder();
                            for (String key : map.keySet()) {
                                s.append(key).append(":").append(map.get(key)).append("n");
                            }
                            message.what = 0x12;
                            message.obj = s.toString();
                        } else {
                            message.what = 0x11;
                            message.obj = "查询结果为空";
                        }
                        // 发消息通知主线程更新UI
                        handler.sendMessage(message);
                    }
                }).start();

            }
        });

        //查询整个表
        btnSelectTable.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        //查询整表数据
                        final List<LOGBean> logBeanData = DBUtils.getLogBeanData();
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                //展示整个表数据
                                tvShowTable.setText(logBeanData.toString());
                                Log.e(TAG, "table data ---" + logBeanData.toString());
                            }
                        });
                    }
                }).start();
            }
        });

        //插入
        btnInsert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        int status = 0;
                        try {
                            status = DBUtils.insertData("身份证识别模块",
                                    "正常", "0", "{姓名F1a;小明,性别:男,出生日期:20180219}");
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                        Log.e(TAG, "insert data status ------" + status);
                        if (status == 1) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this, "插入成功", Toast.LENGTH_SHORT).show();
                                }
                            });
                        } else {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this, "插入失败", Toast.LENGTH_SHORT).show();
                                }
                            });
                        }
                    }
                }).start();
            }
        });


        //删除表数据
        btnDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        int code = DBUtils.deleteDataForTable("身份证识别模块");
                        Log.e(TAG, "code ---" + code);
                        if (code == 1) {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show();
                                }
                            });
                        } else {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Toast.makeText(MainActivity.this, "删除失败", Toast.LENGTH_SHORT).show();
                                }
                            });
                        }
                    }
                }).start();
            }
        });

    }
}

MySQL封装工具类 DBUtils

该工具类主要是链接mysql数据库 还有增删改查的方法 如果要借用 记得改掉表名和ip地址 还有数据库名字

/**
 * Author by Lyu
 * Date on 2021/10/27-10:58
 * Description: 数据库的ip地址记得写本机ipv4地址,然后手机与脑连接同一个网络,只有这样条件下,手机才能成功的连接上本机的mysql数据库。
 */
public class DBUtils {

    private static final String DATA_BASE_TABLE_NAME = "xwc_android_log";

    private static Connection getConn() {
        Connection connection = null;
        try {
            // MySql驱动
            String driver = "com.mysql.jdbc.Driver";
            Class.forName(driver);// 动态加载类
            String ip = "192.168.31.7";// 写成本机地址,不能写成localhost,同时手机和电脑连接的网络必须是同一个

            // 尝试建立到给定数据库URL的连接
            // 用户名
            String LogBean = "root";
            // 密码
            String password = "****";
            connection = DriverManager.getConnection("jdbc:mysql://" + ip + ":3306/" + "xwc-client",
                    LogBean, password);

        } catch (Exception e) {
            e.printStackTrace();
        }

        return connection;
    }

    static HashMap<String, Object> getInfoById() {
        HashMap<String, Object> map = new HashMap<>();
        // 根据数据库名称,建立连接
        Connection connection = getConn();
        try {
            // mysql简单的查询语句。这里是根据MD_CHARGER表的NAME字段来查询某条记录
            String sql = "select * From " + DATA_BASE_TABLE_NAME + " where content = ?";
            // connection不为null表示与数据库建立了连接
            if (connection != null) {
                Preparedstatement ps = connection.prepareStatement(sql);
                if (ps != null) {
                    // 设置上面的sql语句中的?的值为id
                    ps.setString(1, "id");
                    // 执行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));
                            }
                        }
                        closeAll(connection, ps);
                        return map;
                    } else {
                        return null;
                    }
                } else {
                    return null;
                }
            } else {
                return null;
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.e("DBUtils", "异常:" + e.getMessage());
            return null;
        }

    }

    public static int insertData(String name, String type, String status, String content) throws SQLException {
        // 根据数据库名称,建立连接
        Connection connection = getConn();
        //向course表插入数据,其中id字段插入的值对应第一个问号,type字段插入的值对应第二个问号
        String sql = "insert into " + DATA_BASE_TABLE_NAME + " (type,name,status,content,create_time) values (?,?,?,?,?);";
        PreparedStatement ps = connection.prepareStatement(sql);
        //通过setString赋值
        ps.setString(1, type);
        ps.setString(2, name);
        ps.setString(3, status);
        ps.setString(4, content);
        ps.setTimestamp(5, new Timestamp(System.currentTimeMillis()));
        //执行更新数据库 返回一个状态码 可以根据这个码 判断是否插入成功
        int insertCode = ps.executeUpdate();
        closeAll(connection, ps);//关闭相关操作
        return insertCode;
    }

    /**
     * 查整个表的数据
     *
     * @return
     */
    public static List<LogBean> getLogBeanData() {
        //结果存放集合
        List<LogBean> list = new ArrayList<>();
        PreparedStatement ps = null;
        ResultSet rs = null;
        //MySQL 语句
        String sql = "select * from " + DATA_BASE_TABLE_NAME;
        //获取链接数据库对象
        Connection conn = getConn();
        try {
            if (conn != null && (!conn.isClosed())) {
                ps = conn.prepareStatement(sql);
                if (ps != null) {
                    rs = ps.executeQuery();
                    if (rs != null) {
                        while (rs.next()) {
                            LogBean log = new LogBean();
                            log.setId(rs.getString("id"));
                            log.setName(rs.getString("name"));
                            log.setType(rs.getString("type"));
                            log.setContent(rs.getString("status"));
                            log.setStatus(rs.getString("content"));
                            log.setCreate_time(rs.getTimestamp(6));
                            list.add(log);
                        }
                    }
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        closeAll(conn, ps, rs);//关闭相关操作
        return list;
    }

    /**
     * 修改数据库中某个对象的状态  改
     */

    public int updateUserData(String name) {
        int result = -1;
        PreparedStatement ps = null;
        //获取链接数据库对象
        Connection conn = getConn();
        if (!TextUtils.iSEMpty(name)) {
            //获取链接数据库对象
            //MySQL 语句
            String sql = "update " + DATA_BASE_TABLE_NAME + " set status=? where name=?";
            try {
                boolean closed = conn.isClosed();
                if (!closed) {
                    ps = conn.prepareStatement(sql);
                    ps.setString(1, "1");//第一个参数status 一定要和上面SQL语句字段顺序一致
                    ps.setString(2, name);//第二个参数name 一定要和上面SQL语句字段顺序一致
                    result = ps.executeUpdate();//返回1 执行成功
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        closeAll(conn, ps);//关闭相关操作
        return result;
    }


    /**
     * 根据字段删除
     *
     * @return
     */
    public static int deleteDataForTable(String name) {
        int result = -1;
        PreparedStatement ps = null;
        //获取链接数据库对象
        Connection conn = getConn();
        if (!TextUtils.isEmpty(name)) {
            //MySQL 语句
            String sql = "delete from " + DATA_BASE_TABLE_NAME + " where name=?";
            try {
                boolean closed = conn.isClosed();
                if (!closed) {
                    ps = conn.prepareStatement(sql);
                    ps.setString(1, name);
                    result = ps.executeUpdate();//返回1 执行成功
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        closeAll(conn, ps);//关闭相关操作
        return result;
    }


    /**
     * 关闭数据库 三参
     *
     * @param conn
     * @param ps
     * @param rs
     */
    public static void closeAll(Connection conn, PreparedStatement ps, ResultSet rs) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }

    /**
     * 关闭数据库 两参
     *
     * @param conn
     * @param ps
     */

    public static void closeAll(Connection conn, PreparedStatement ps) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }

}

网络权限

mysql数据库 就是实现客户端向服务器发送 所以网络权限一定要的

Android 直连MySQL数据库实现增删改查

总结

很早以前学习过mysql数据库的操作方法 那时候还是用jdbc的原始方法 好多年没用了 今天复习了一下 感觉记忆有加深了不少! 又多了一项技能 哈哈哈 温故而知新,可以为师矣。

脚本宝典总结

以上是脚本宝典为你收集整理的Android 直连MySQL数据库实现增删改查全部内容,希望文章能够帮你解决Android 直连MySQL数据库实现增删改查所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。