可能安卓就是连不上mysql吧

本文介绍了一个在Android应用程序中实现MySQL数据库连接的具体示例。通过使用Java编写的应用活动,该示例展示了如何在按钮点击事件中加载并连接到远程MySQL数据库,包括异常处理。

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

等到日后再解决吧

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;

import com.mysql.jdbc.Connection;

import java.sql.DriverManager;
import java.sql.SQLException;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

     
        Button button = (Button) findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                connectSQL();
            }
        });

    }

    private Connection getCon(){
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        } catch (ClassNotFoundException e) {
            Toast.makeText(MainActivity.this,"驱动获取失败1",Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        } catch (InstantiationException e) {
            Toast.makeText(MainActivity.this,"驱动获取失败2",Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            Toast.makeText(MainActivity.this,"驱动获取失败3",Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
        Connection con = null;
        try {
            con = (Connection) DriverManager.getConnection("jdbc:mysql://***.***.***.***:3306/*****?user=*****&password=******&useUnicode=true&characterEncoding=UTF8");
        } catch (SQLException e) {
            Toast.makeText(MainActivity.this,"远程数据库请求失败",Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
        return con;

    }

    private void connectSQL(){

        Toast.makeText(MainActivity.this,"下面开始连接",Toast.LENGTH_SHORT).show();
        Connection conn = getCon();

        if(conn != null){
            Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_SHORT).show();
            try {
                conn.close();
            } catch (SQLException e) {
                Toast.makeText(MainActivity.this,"数据关闭失败",Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        }
        else{
            Toast.makeText(MainActivity.this,"数据库连接失败",Toast.LENGTH_SHORT).show();
        }
    }

}


### Android 连接 MySQL 5.7.46 数据库遇到的问题及解决方案 #### 使用 JDBC 驱动程序连接 MySQL 数据库 为了使 Android 应用能够访问远程 MySQL 数据库,通常会采用 Java Database Connectivity (JDBC) API 来建立连接。然而,在移动设备上直接通过 JDBC 访问数据库并不是最佳实践,因为这可能带来安全性和性能方面的问题。 ```java String url = "jdbc:mysql://hostname:port/database"; Connection conn = DriverManager.getConnection(url, username, password); ``` 由于网络延迟以及潜在的安全风险,建议创建一个中间层 Web Service 或 RESTful API 接口来处理来自客户端的应用请求并转发到服务器端的 MySQL 数据库[^1]。 #### 设置 PHP 脚本作为中介服务 考虑到安全性因素,推荐的做法是设置一台独立于 Android 设备之外的服务器,并在此服务器上部署 PHP 脚本来充当桥梁角色。这些脚本可以接收 HTTP 请求并将查询结果返回给调用者。这样做的好处是可以更好地控制谁有权访问敏感数据,同时也简化了应用程序本身的逻辑实现。 ```php <?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "test"; // 创建连接 $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; ?> ``` 对于 PHP 开发过程中可能出现的问题,如空白页面或无法加载 MySQL 扩展等问题,可以通过确保正确安装必要的模块和支持库来进行排查和修正[^5]。 #### 处理常见错误消息 当尝试从 Android 发送 POST/GET 请求至上述 PHP 文件时,如果收到异常响应,则可能是由以下几个原因造成的: - **权限不足**:确认已授予适当的操作权限。 - **SQL 注入攻击防护不当**:始终使用预编译语句防止 SQL 注入漏洞。 - **字符编码不匹配**:保证所有参与方都遵循相同的字符集标准。 - **超时设置不合理**:调整合理的等待时间以适应不同网速条件下的需求。 针对特定版本特性需要注意的是,在 MySQL 5.7 版本中 GTID 的持久化机制存在一定的局限性,即 `gtid_executed` 表仅会在 binlog 切换的时候被刷新,因此刚重启后的实例所读取的数据并非最新状态[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值