Android通过druid连接池访问MySQL
一.我所遇到的问题
他说无妨访问到ObjectFactory,找不到javax.naming.sql.ObjectFactory的类文件,我就奇了怪了,我用的jdk1.8怎么可能没有javax包,我一查果然有。
这个问题困扰了我很久,因为学过MySQL的都知道,用原生的jdbc和用数据连接池是两个概念,用原生的jdbc你不仅浪费资源,而且要不停的向操作系统申请资源,不停的用完资源之后释放资源。这个是一个耗时操作,那么响应时间慢,用户体验就肯定不好,所以我就是想用数据连接池druid,还有JdbcTemplate来简化我的代码
二.解决问题
那么我首先他说无法访问javax.naming.sql.ObjectFactory这个东西,我把Jdk提供的类库全部当作第三方库给他导入进去,结果就真的报错报别的了,接下来我只能叙述,因为我就想着解决问题,我觉得这点是真的坑,可能就是AS中jdk部分有删减,所以就无法访问ObjectFactory,所以我把jdk中的导入试试,结果真的好了,这个真的是太坑了
接下来还有些小问题
就是你Android中访问数据库一定要放在线程中,因为访问数据库是一个耗时操作嘛,那还是放在线程中会比较好,如果你不用线程,那么可能会报错
具体可参考:Android和线程和MySQL
https://blog.csdn.net/baisedeqingting/article/details/78625078#commentsedit
还有就是访问MySQL数据库是需要网络的,你需要添加权限
具体可查:https://blog.csdn.net/itluochen/article/details/52181560?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158928001419725211905089%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=158928001419725211905089&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-2-52181560.nonecase&utm_term=Android%E8%BF%9E%E6%8E%A5MySQL
还有就是你实体类最好变量还是用基本类型的包装类来定义,因为他传进来的是对象,是引用类型。
还有就是你需要把配置给改了
pro.setProperty(“url”,“jdbc:mysql://192.168.0.104:3306/bigwork_android?autoReconnect=true&failOverReadOnly=false”);
autoReconnect=true&failOverReadOnly=false
这里是采用doGet方法通过url加参数和参数的属性
如果你不加可能包的就是报Communications link failure 连接错误了这个连接错误了
具体可参考:https://blog.csdn.net/qq_27471405/article/details/80921846
https://www.cnblogs.com/jianzhixuan/p/6923216.html
还有一个问题是你得让你电脑上得服务器MySQL服务允许远程访问
也就是两条命令就行了
首先打开你的MySQL Command Line Client
然后输入GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;
FLUSH PRIVILEGES;
这两条指令就可以了
不过我的电脑没有遇到过这个问题
三.代码和运行结果
接下来我放一下我做的这个教务管理系统的基础代码
定义一个实体类Student用来接收List集合中的对象
package com.example.bigwork.Activities.JavaBean;
public class Student {
private Integer id;
private String name;
private Integer username;
private String password;
public Student() {
}
public Student(Integer id, String name, Integer username, String password) {
this.id = id;
this.name = name;
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", username=" + username +
", password='" + password + '\'' +
'}';
}
public Integer