Android连接MySQL

介绍了在Android studio中引入mysql-connector-java-5.1.30-bin.jar的情况,其使用方法与SQL server类似,都需开独立线程连接数据库,但连接驱动方式不同。

Android studio  引入   mysql-connector-java-5.1.30-bin.jar

 

package com.example.util;

import android.util.Log;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class DBUtil {
    private static String driver = "com.mysql.jdbc.Driver";//MySQL 驱动
    private static String url = "jdbc:mysql://10.0.2.2/ry";//MYSQL数据库连接Url
    private static String user = "root";//用户名
    private static String password = "root";//密码

    private static Connection getConn(){

        Connection connection = null;
        try{
            Class.forName(driver);// 动态加载类
            // 尝试建立到给定数据库URL的连接
            connection = DriverManager.getConnection(url ,user, password);

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

        return connection;
    }

    public static List getInfoByName(){

        HashMap<String, Object> map = new HashMap<>();
        List list=new ArrayList<>();
        // 根据数据库名称,建立连接
        Connection connection = getConn();

        try {
            // mysql简单的查询语句。这里是根据MD_CHARGER表的NAME字段来查询某条记录
            String sql = "select * from qrtz_locks";
            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()){
                            System.out.println("sched_name:"+rs.getString("sched_name"));
                            System.out.println("lock_name:"+rs.getString("lock_name"));
                            list.add(rs.getString("sched_name")+"   " + rs.getString("lock_name"));
                            // 注意:下标是从1开始的
                            for (int i = 1;i <= count;i++){
                                String field = rs.getMetaData().getColumnName(i);
                                map.put(field, field);
                            }
                        }
                        connection.close();
                        ps.close();
                        return  list;
                    }else {
                        return null;
                    }
                }else {
                    return  null;
                }
            }else {
                return  null;
            }
        }catch (Exception e){
            e.printStackTrace();
            Log.e("DBUtils","异常:" + e.getMessage());
            return null;
        }

    }


    /**
     * 使用
     */
    /*public void test(){
        //线程
         TextView tv_data;//显示查询出来的数据
        @SuppressLint("HandlerLeak")
         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;
                }

            }
        };

        // 创建一个线程来连接数据库并获取数据库中对应表的数据
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 调用数据库工具类DBUtils的getInfoByName方法获取数据库表中数据
                List list=DBUtil.getInfoByName();
                Message message = handler.obtainMessage();
                if(list != null){
                    String s = "";
                    for(int i =0;i<list.size();i++){
                        s=list.get(i).toString();
                    }
                    message.what = 0x12;
                    message.obj = s;
                }else {
                    message.what = 0x11;
                    message.obj = "查询结果为空";
                }
                // 发消息通知主线程更新UI
                handler.sendMessage(message);
            }
        }).start();
    }*/
}

使用方法同SQL server一样(需要开一个线程独立连接数据库),只是连接驱动方式不一样    

 

### 如何在Android应用程序中实现与MySQL数据库的连接 #### 创建数据库连接池 `DBUtils` 类 为了建立稳定高效的数据库连接,在Java包下创建一个名为`DBUtils`的工具类,该类负责管理到MySQL服务器的连接。此类内部封装了获取连接的方法以及关闭资源的操作[^1]。 ```java public class DBUtils { private static final String URL = "jdbc:mysql://your_server_ip:port/db_name"; private static final String USER = "username"; private static final String PASSWORD = "password"; public Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASSWORD); } // Close resources... } ``` 由于直接通过JDBC驱动程序从移动设备访问远程SQL服务存在安全隐患,并不是最佳实践;因此推荐采用中间层架构模式来间接完成这项工作。一种常见的方式是利用Web API作为桥梁,比如RESTful接口或者SOAP web service等。客户端发送HTTP请求给API端点,后者再转发至实际的数据存储位置并返回处理后的响应消息给前端展示[^2]。 对于上述提到的技术栈组合——即Android Studio搭配Spring Boot框架构建后端微服务,则可以很好地满足这一需求。开发者可以在云端部署基于Spring Boot的应用程序实例,它充当着介于安卓客户机和关系型数据库管理系统之间的中介角色。当接收到由终端发起的信息查询指令之后,会执行相应的业务逻辑并将最终结果集反馈回去供界面渲染使用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值