当前位置:主页 > 查看内容

Android Studio 连接mysql踩坑经历

发布时间:2021-06-14 00:00| 位朋友查看

简介:数据库 mysql 5.1.7 JDBC: 同数据库版本 最开始我用的数据库mysql8.0.22mysql-connector-java-8.0.22,什么方法都试过就是Android连不上但Navicat连接都是好好的。 怀疑是以前网站、微信小程序数据都是放在这个数据库上改了太多东西估计自己也不记得了。。然……
  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();
        }
    }

}
;原文链接:https://blog.csdn.net/weixin_43256167/article/details/115600264
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:鸿蒙WebView 下一篇:没有了

推荐图文


随机推荐