Android学习 ① Android连接不上Mysql数据库的多种原因以及解决方式
① 连接数据库的时候不能使用localhost,必须使用当前IP地址String URL="jdbc:mysql://192.168.1.108:3306/db1?serverTimezone = GMT&characterEncoding=UTF-8";IP地址可通过WIN键+R,输入CMD,在黑框中通过ipconfig获得...
·
① 连接数据库的时候不能使用localhost,必须使用当前IP地址
String URL="jdbc:mysql://192.168.1.108:3306/db1?serverTimezone = GMT&characterEncoding=UTF-8";
IP地址可通过WIN键+R,输入CMD,在黑框中输入ipconfig指令获得IPV4地址
② 用IP地址连接的时候需要注意,通过IP地址连接MySql数据库需要处理两点,Android加入访问权限和MYSQL允许用户远程访问
一、在AndroidManifest.xml中加入相关的权限
<uses-permission android:name="android.permission.INTERNET" />
二、mysql数据库需要能允许远程用户访问
允许root使用rootpassword从任何主机连接到MySQL服务器,root为用户名,rootpassword为用户密码
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'rootpassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
可以通过navicat测试连接,如果成功,则代表能够远程访问。
③ Mysql Jar包问题导致
如果上述两种都没问题,关闭防火墙之后,依然不能正常连接,就需要注意MySQL的jar包问题。
我的问题解决方式就是更换JAR包版本来解决的,建议把JAR包换成5.1.49版本就能正常连接数据库。
mysql-connector-java-5.1.49 百度网盘下载地址分享_嘉 诚的博客-CSDN博客_mysql-connector-java-5.1.48
我的MYSQL是8.0版本,如果用同样是8.0版本的jar包,就会报错:java.lang.NoClassDefFoundError Failed resolution of LjavasqlSQLType
④ 必须新开一个线程处理MySQL的连接过程,给出整体的能运行的代码
注意,连接MySQL数据库,需要新开一个线程运行,不然也会出错。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 连接数据库
initLogin();
}
private void initLogin() {
// 必须新开线程才能连接MySQL数据库
new Thread(new Runnable() {
@Override
public void run() {
// 数据库驱动
String CLS="com.mysql.jdbc.Driver";
//这里的ip地址要改为自己的,db1为自己的数据库名字
String URL="jdbc:mysql://192.168.1.108:3306/db1?serverTimezone = GMT&characterEncoding=UTF-8";
String USER="root";
//这里输入自己的数据库密码
String PWD="";
// 用test做一个简单的测试
String test="";
try {
// 加载数据库驱动
Class.forName(CLS).newInstance();
// 连接数据库
Connection conn=(Connection) DriverManager.getConnection(URL,USER,PWD);
// sql 语句:从video表中获取全部数据
String sql="select * from video";
Statement stmt=conn.createStatement();
// 执行sql
ResultSet rs=stmt.executeQuery(sql);
// 循环读取
while (rs.next()){
// 读取videoTitle字段,记载在test中
test+=rs.getString("VideoTitle");
// 打印test
Log.v("debug",test);
}
} catch (ClassNotFoundException | SQLException | IllegalAccessException | InstantiationException e) {
e.printStackTrace();
}
}
}).start();
}
}
更多推荐
已为社区贡献2条内容
所有评论(0)