赞
踩
最开始我用的数据库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 确保驱动位置正确
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(); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。