最开始我用的数据库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();
}
}
}
ajax请求报parsererror错误是很宽泛的概念,很多情况下都报这个错, 在很多时候,即...
GetRef 函数 返回一个指向一过程的引用,此过程可绑定某事件。 Set object.event...
1.蚊子都是神,你要不买点蚊香烧烧,它就一直叮你。 2.痛经如此多娇,疼得菇凉...
大家好我是帅地。 接下来的一段时间帅地会总结各种技术栈的学习路线例如 Java 开...
本文给出了两个密码强度的正则表达式方案,一个简单,一个更复杂和安全。并分别...
先给大家说下问题背景:最近在做一个项目,开发微信的某个功能,使用的是asp.net...
我们知道在JS中常用的事件有: 页面事件:load; 焦点事件:focus,blur; 鼠标...
服务器端的生成的页面数据,为了提高访问速度,往往需要生成静态的htm页面。 通...
本文实例讲述了ThinkPHP 框架实现的读取excel导入数据库操作。分享给大家供大家...
组件—导航菜单 顶栏 el-menu :default-active="activeIndex" class="el-menu-de...