Android中连接MySql数据库获取数据的简单实现

本文介绍如何在Android应用中直接连接MySQL数据库并获取数据,包括布局设计、jar包导入、代码实现及权限设置等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

一般情况下,Android与数据库中的数据进行交互都是通过调用api接口来实现的。但是今天我们就来尝试实现直接连接到MySql数据库获取数据的功能。


demo布局

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

xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_get_data"
        android:layout_margin="2dp"
        android:textSize="16sp"
        android:text="获取数据测试"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tv_data"
        android:padding="10dp"
        android:textSize="16sp"
        android:gravity="center"
        android:text="imxiaoqi"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

导入jar包

实现直连MySql数据库需要导入mysql-connector-java-5.1.30-binjar包(百度网盘提取码为:ctxa)。

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

在这里插入图片描述

在这里插入图片描述

等待gradle同步成功后,打开gradle文件依赖内容如下说明导入成功:

在这里插入图片描述


demo代码实现

jar包导入成功后,对应的api就可以使用了,下面我们来看代码的实现。
代码实现思路:首先需要连接至MySql数据库,连接成功后,就可以做对应的数据库操作了。

代码中我会给出详细的注释,就不详细的说每个变量的意思了。

  • 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();

            }
        });

    }
}

  • 上面的代码比较简单,不过涉及到一个数据库工具类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;
        }

    }

}

这个类,有点需要注意的是:数据库的ip地址记得写本机IPV4地址,然后手机与电脑连接同一个网络,只有这样条件下,手机才能成功的连接上本机的mysql数据库。

上面的代码我给出了关键的注释,这里就不展开说明了,大家自己慢慢捋一捋。


权限设置

这里需要网络权限,大家别忘记了哦!在清单配置文件中添加

<uses-permission android:name="android.permission.INTERNET"/>

即可。

在这里插入图片描述


应用运行的结果

上面的所有操作完成后,我们来安装到手机上运行看看结果吧!

在这里插入图片描述
在这里插入图片描述

从上面两幅图可以看到,从mysql数据库表中获取数据成功了。
该文分享关键的信息就是怎么样能成功连接上mysql数据库
一旦成功连接了,那么操作数据库就不难了。我这里只给出了一个查询操作,其他的增删改的操作就都大同小异,大家自己去实践吧!加油哦!


A little bit of progress every day!Come on!

连接数据库的代码需要在 Android 应用程序的后服务器上运行。常用的数据库包括 MySQL, SQLite, PostgreSQL 等。以下是一个使用 SQLite 数据库的示例代码,供参考: 1. 添加依赖库 在 app 的 build.gradle 文件中添加以下依赖库: ``` dependencies { implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.8.0' implementation 'com.squareup.okhttp3:okhttp:3.8.0' } ``` 2. 创建数据库和表 ``` public class DBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "mydatabase.db"; private static final int DATABASE_VERSION = 1; private static final String TABLE_NAME = "mytable"; private static final String COLUMN_ID = "id"; private static final String COLUMN_NAME = "name"; private static final String COLUMN_AGE = "age"; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String query = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT, " + COLUMN_AGE + " INTEGER)"; db.execSQL(query); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); onCreate(db); } } ``` 3. 连接数据库 ``` public class DBManager { private DBHelper dbHelper; private Context context; private SQLiteDatabase database; public DBManager(Context c) { context = c; } public DBManager open() throws SQLException { dbHelper = new DBHelper(context); database = dbHelper.getWritableDatabase(); return this; } public void close() { dbHelper.close(); } public void insert(String name, int age) { ContentValues contentValue = new ContentValues(); contentValue.put(DBHelper.COLUMN_NAME, name); contentValue.put(DBHelper.COLUMN_AGE, age); database.insert(DBHelper.TABLE_NAME, null, contentValue); } public Cursor fetch() { String[] columns = new String[] { DBHelper.COLUMN_ID, DBHelper.COLUMN_NAME, DBHelper.COLUMN_AGE }; Cursor cursor = database.query(DBHelper.TABLE_NAME, columns, null, null, null, null, null); if (cursor != null) { cursor.moveToFirst(); } return cursor; } } ``` 4. 在 Activity 中使用 ``` public class MainActivity extends AppCompatActivity { private DBManager dbManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbManager = new DBManager(this); dbManager.open(); dbManager.insert("John", 30); Cursor cursor = dbManager.fetch(); if (cursor.moveToFirst()) { do { String name = cursor.getString(cursor.getColumnIndex(DBHelper.COLUMN_NAME)); int age = cursor.getInt(cursor.getColumnIndex(DBHelper.COLUMN_AGE)); Log.d("TAG", "Name: " + name + ", Age: " + age); } while (cursor.moveToNext()); } dbManager.close(); } } ``` 注意,以上代码仅供参考,需要根据自己的实际需求进行修改和适配。同时,在实际开发中,为了保证数据安全和隐私,需要对数据库连接进行加密和权限控制。
评论 169
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值