踩了安卓诸多坑终于能使用Mysql数据库了
避免踩坑,便捷通往安卓连接mysql数据库的道路!
·
1. 日常吐槽
起初,以为安卓连接mysql数据库像普通java程序一样,没想到中间磕磕碰碰花了几个小时才成功。只能说我玩安卓的这段时间吃的坑比吃的饭还多。
首先说明,我对安卓开发也不是很了解,只是需要用才迫不得已地去用。因此,可能会有一些错误的观点。经过我的所见所闻,连接数据库有如下的坑:
①不能在主线程创建数据库连接对象(Connection);
②换句话说,安卓涉及到网络连接的似乎都不能在主线程中执行;
③要配置网络权限等
废话不多说,接下来就信息说一下我的做法:
引入mysql的驱动包就不多说了,应该都会。
①添加权限:
配置文件相关的到此结束。
② 代码配置:
在Activity的onCreate()方法添加如下代码:
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
添加原因我也不懂,这样做最终可行就对了。
③另开线程获取数据库连接:
我的具体想法就是:利用FutureTask类(因为可以等待结果的返回)的对象作为线程的执行任务。
具体代码如下:
private FutureTask futureTask = new FutureTask(()->{
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(FinalPro.DB_URL,FinalPro.DB_USER,FinalPro.DB_PASSWORD);
System.out.println(connection + "-------");
}catch (ClassNotFoundException | SQLException e) {
System.out.println("获取连接失败!!!" + Thread.currentThread() );
e.printStackTrace();
}
return true;
});
线程开始执行的代码如下:
@Override
public Connection getConnection() {
if (connection != null){
return connection;
}else{
new Thread(futureTask).start();
try {
futureTask.get();
return connection;
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return connection;
}
总结:原生连接数据库的步骤虽然繁琐但是不是很难,因此我把没必要的代码省略了,但是应该没什么影响。最后,以上是我个人解决数据库连接问题的流程与做法。可能有不对或者误导的地方,在此请大家见谅!谢谢你们!!!
更多推荐
已为社区贡献1条内容
所有评论(0)