当前位置:   article > 正文

Android Studio 连接mysql踩坑经历_android studio mysql

android studio mysql
  1. 数据库 :mysql 5.1.7
  2. JDBC: 同数据库版本

最开始我用的数据库mysql8.0.22+mysql-connector-java-8.0.22,什么方法都试过,就是Android连不上,但Navicat连接都是好好的。
怀疑是以前网站、微信小程序数据都是放在这个数据库上,改了太多东西估计自己也不记得了。。然后我又装了一个mysql,于是就OK了
在这里插入图片描述

一、配置mysql驱动(mysql-connector-java-5.1.7.jar)

把jar包放到libs下面,将其作为dependence
可以直接右键 ->add as lib
或者file->project structure->dependence,
ok以后as会自动进行同步,当然,如果要把jar包删除,记得要移除dependence
在这里插入图片描述

二、

首先确保:
1 应用层端口号是打开的(mysql是3306,但也可能配置时用的是3307、3308)
2 确保远程连接是允许的
3 确保驱动位置正确
5.x的版本都是在com.mysql.jdbc.Driver路径下的,8.x版本在com.mysql.cj.jdbc.Driver路劲下
4 url确保要和服务器同步时区 serverTimezone=UTC
5 确保数据库是开着的: net start 数据库名
6 连接mysql要调用中断,连接数据库的逻辑最好不要写在主线程里面,不然会影响主线程中其他代码的执行效率。Android studio的架构上估计是强制连接数据库要开辟另外一个线程,所以DriverManager.getConnection(url, user, password) 要写在另一个线程里。

具体代码:


import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class MainActivity extends AppCompatActivity {
    private static String driver = "com.mysql.jdbc.Driver";// MySql驱动
    private static String url = "jdbc:mysql://1.116.78.161/库名?useSSL=false&serverTimezone=UTC&characterEncoding=utf8";
    private static String user = "**";// 数据库用户名
    private static String password = "****";// 数据库密码

    private TextView textView;
    private TextView Contents;

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

    /**
     * 初始化组件
     */
    private void Init(){
        Contents=(TextView)findViewById(R.id.content);
        textView=(TextView)findViewById(R.id.TextView);

        ButtonClick buttonClick=new ButtonClick();
        textView.setOnClickListener(buttonClick);
    }

    /**
     * 向数据库追加数据
     * @param link
     * @throws SQLException
     */
    private  void setData(Connection link) throws SQLException {
        String sql = "insert into artical(id,articalName,artical) values(?,?,?)";
        PreparedStatement pst=link.prepareStatement(sql);
        pst.setObject(1,222);
        pst.setObject(2,"aaa");
        pst.setObject(3,"ffaaaf");
        pst.execute();
    }
    /**
     * 获取数据库中的数据
     * @param link
     * @return
     * @throws SQLException
     */
    private  String  getData(Connection link) throws SQLException{
        String Aritical = null;
        String commond = "select * from artical where id=2"; //找到id=2的行
        PreparedStatement pst = link.prepareStatement(commond);
        ResultSet rs = pst.executeQuery();

        if (rs != null){
            int column = rs.getMetaData().getColumnCount();
            while (rs.next()){
                String name = rs.getMetaData().getColumnName(3); 
                Aritical = rs.getString(name);
            }
            pst.close();
            return  Aritical;

        }else {
            return null;
        }

    }

    private class ButtonClick implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            //   Android的数据库连接不能在主线程进行
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try{
                        Class.forName(driver);// 动态加载类
                        Connection link = DriverManager.getConnection(url, user, password);
                        Log.i("","SUCCESS");
                        
                        //TO DO
                        //.............操作数据库.............
                        String articals = getData(link);
                        Contents.setText(articals);
                        //The end
                        
                        link.close();

                    } catch (Exception  e) {
                        Log.e("","ERROR");
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/279746
推荐阅读
相关标签
  

闽ICP备14008679号