问题最终还是没能解决,引用其他博客中的一段话
如果想要用云端数据库,一般不建议android设备直接连数据,并不是一个简单的导入jar就可以成功的,因为很多手机他的底层并没有数据库的链接驱动,就算这台手机可以,那台手机也可能是不可以的。
而且安全性是个很大的问题,android直连云端数据库,就算是毕业设计,验收也不会给你过吧。建议实现服务器端,搭建app——服务器——数据库 这样的一种结构系统,这才是正理。
原文链接:https://blog.csdn.net/qq_40651609/article/details/86756331
昨天晚上到今天一上午一直在解决Android 连接数据库连接不上的问题(virtual device :Google pixel 2 ,ide :android studio),期间使用过以下几个解决办法:
-
导入mysql-connection jar包注意导入方法
- 将jar包放入项目文件夹下
- project structure中找到依赖包添加处(也就是dependence)
- ➕ => jar
- 选中mysql-connection jar
- 检验是否导入方法:在项目build.gradle文件下可以看到添加了配置该导入的jar包的语法。
implementation files('mysql-connector-java-5.1.0-bin.jar')
-
在项目xml配置文件中添加virtual device 的权限配置语句(该问题在配置android 通信的过程中有碰到过,需要在项目的配置文件中添加virtual device的权限语句,添加网络配置语句等)
- 在项目配置文件中添加配置可以连接数据库的语句
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-
mysql jdbc 驱动的时候未能加载:
- virtual device 是系统跑的一个虚拟机器,有自己的驱动,IP等等,运行程序是想到与将该apk包导入到virtual device中并安装,从而进行运行的。因此如果导入的程序中连接数据库的IP为localhost 的话相当于访问的virtual device的IP
- 通过
$ ifconfig
来获取本机的IP - 将localhost 改为本机IP
-
mysql 数据库中有用户列表,在默认的自带的mysql数据库中,如果在navicat中打开这个数据库之后是无法看到这个表的。而这个表内存的是使用数据库的用户列表,一般本地都是root,但是此情况是virtual device 远程访问本机的mysql,而root用户无法访问,因此要添加一个其他的用户来供virtual device 去使用
- navicat由于不太会使用,不知道在哪里该用户访问权限,直接在terminal中跑。
$ mysql
-> show datebases;
-> use mysql;
-> create user 'androidlocal'@'%' identified by '123456';
提示用户权限不足,因此要更改权限
-> flush privileges;
然后再重新添加用户,并给添加的用户添加权限
-> create user 'androidlocal'@'%' identified by '123456';
-> grant all privileges on *.* to 'androidlocal'@'%' identified by '123456';
然而上面的四种方法都没有解决问题,后来有搜索了一些方法,发现了开始的那段话,觉得很有道理。(可能Google pixel 2真就没法连……