java出身,近期想做一些Android项目,就想先做个简单的crud小试牛刀,结果第一jio就踩坑了。

mysql用的8.0.27,jar包是官网Community配套下载的从Connector J 8.0.27,

安卓部署环境,工具用的AS,导入jar包正常,gradle正常

gradle添加java8依赖

compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}

AndroidManifest添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

接下来就是测试链接了

mysql高版本Driver目录移动至"com.mysql.cj.jdbc.Driver"

private static final String TAG = "testsql----->";public static void mymysql(){String url = "jdbc:mysql://192.168.0.142:3306/test" +"?useUnicode=true" +"&characterEncoding=utf8" +"&useSSL=false" +"&serverTimezone=GMT" +"&rewriteBatchedStatements=true";String user = "root";String password = "123456";try{Class.forName("com.mysql.cj.jdbc.Driver");}catch(Exception e){Log.e(TAG, e.toString());}try {DriverManager.getConnection(url,user, password);Log.e(TAG, "已过");}catch(Exception e){Log.e(TAG, e.toString());}

测试链接写好之后直接开冲。结果直接给了当头一棒

2022-01-11 10:42:10.197 22381-22381/com.example.test E/testsql----->: java.sql.SQLNonTransientConnectionException: Could not create connection to database server.

然后开始各种百度方案,像检查防火墙,检查驱动和数据库版本是否匹配,检查驱动地址正确,增加ssl配置,增加时区参数,各种重启服务等,均无果。今天早上就想,为什么不能问问神奇的Java呢?说干就干,直接在eclipse开了一个java的test工程,导入同样的版本mysql-connector-java-8.0.27,写了同样的代码。

public Connection getConnection() throws SQLException {String driver = "com.mysql.cj.jdbc.Driver";String url = "jdbc:mysql://192.168.0.142:3306/test" +"?useUnicode=true" +"&characterEncoding=utf8" +"&useSSL=false" +"&serverTimezone=GMT" +"&rewriteBatchedStatements=true";String user = "root";String password = "123456";try {Class.forName(driver);} catch (ClassNotFoundException e) {e.printStackTrace();}return DriverManager.getConnection(url, user, password);}

结果更是当头一棒。

public static void main(String[] args) {try {System.out.println(DbUtil.getInstance().getConnection());} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

显示的结果竟然是

com.mysql.cj.jdbc.ConnectionImpl@59e84876

惊呆了,同样的jar包,同样的数据库,同样的url,nusername,password,在java工程就能连,在android工程就连不上,头发快掉光了也没查到有效的解决方案,希望大家帮帮小弟在编程的道路上能茁壮成长~

该问题已解决!

解决方案其实是java思路向Android思路的转变,在Android程序中有一条规则,就是任何拖慢主程序的程序都会被干掉。重新梳理了一遍丢出来的Exception,里面有一条

W/System.err: Caused by: java.net.SocketException: android.os.NetworkOnMainThreadException

如果大家也有相关问题可以仔细查看下是否也出现了这个异常,如果也有,则可以参考本文解决方案。

所以有关连接数据库的部分需要单开一个线程,修改后代码如下

public static void mymysql() {String url = "jdbc:mysql://192.168.0.142:3306/test"+ "?useUnicode=true"+ "&characterEncoding=utf8"+ "&autoReconnect=true"+ "&useSSL=false"+ "&serverTimezone=GMT";String user = "root";String password = "123456";new Thread(new Runnable() {@Overridepublic void run() {try {Class.forName("com.mysql.cj.jdbc.Driver");dbCon.conn = DriverManager.getConnection(url,user, password);String sql = "select * from testdb where 1=1 ";stmt = conn.prepareStatement(sql);rs = stmt.executeQuery();ResultSetMetaData rsmd = rs.getMetaData();int columnCount = rsmd.getColumnCount();while (rs.next()) {for (int i = 1; i <= columnCount; i++) {Log.e(rsmd.getColumnLabel(i)+"------------>", rs.getObject(i).toString());}}} catch (Exception e) {e.printStackTrace();}finally {dbCon.disconnect();}}}).start();}

效果显示

至此,mysql的连接查询已无问题,crud也就迎刃而解了,下一篇将会记录查询后的结果显示至Activity的TextView中。

刚踩一个大坑,求个高人指点(已解决)相关推荐

  1. netty报错:远程主机强迫关闭了一个现有的连接。(已解决)

    昨天,java 集成netty服务的项目,在测试服务器上,发现了一个问题: 1.项目netty包版本:netty-all-5.0.0.Alpha1.jar. 2.问题的描述:服务器启动,各种通信正常, ...

  2. error: passing ‘const xxx’ as ‘this’ argument discards qualifiers c++primer 5th文本查询程序一个错误请各位指教(已解决)

    文件main.cc 文件main.cc #include <string> #include <iostream> #include <memory> #inclu ...

  3. 引用了一个不可用的位置?已解决

    windows下遇到不能删除的文件或目录,例如目录d:/abc,处理方法: dos提示符下, RMDIR D:/abc /S /Q 就可以删除(在命令窗口)

  4. java注解接收上传文件,前台:Input type=file 后台获取文件内容用的是spring注解,当地环境上传图片是好的,发布到服务器上图片读取不到,求大神指点...

    当前位置:我的异常网» Java Web开发 » 前台:Input type="file" 后台获取文件内 前台:Input type="file" 后台获取文 ...

  5. 大学计算机高数如何学,计算机科学系如何学好大学数学,即高数,老师上课听不太懂,急啊,数列的极限就不怎么懂,跪求高人指点...

    计算机科学系如何学好大学数学,即高数,老师上课听不太懂,急啊,数列的极限就不怎么懂,跪求高人指点以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我 ...

  6. c语言求近似值程序,c语言求pi的近似值_C语言求PI的近似值 求高人指点

    问题补充: 题目只这样的: 本题要求编写程序,根据下式求\piπ的近似值,直到最后一项小于给定精度eps. PI/2=1+1/(1*3)+2!/(1*3*5)+3!/(1*3*5*7)+...+n!/ ...

  7. hive中insert插入一条记录报错,跪求高人指点!!!

    问题描述: 在hive中创建数据库和数据表之后,进行insert操作报错. hive (myhive)> insert into stu values (1,"zhangsan&quo ...

  8. 计算机能辅修经济学吗,现在大二本科在读,计算机系,想考西安交大经济学研究生,但不知如何着手…请高人指点指点...

    现在大二本科在读,计算机系,想考西安交大经济学研究生,但不知如何着手-请高人指点指点以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来 ...

  9. OMG!Semaphore里面居然有这么一个大坑!

    作者 | why技术 来源 | why技术(ID:hello_hi_why) 荒腔走板 上周写了一篇文章,一不小心戳到了大家的爽点,其中一个转载我文章的大号,阅读量居然突破了 10w+,我也是受宠若惊 ...

最新文章

  1. R语言可视化包ggplot2绘制排序条形图实战:按照分类因子排序、按照数值排序
  2. Windows中报错:Fatal error in launcher: Unable to create process using ‘“‘ 的解决方案
  3. boost::describe模块宏BOOST_DESCRIBE_PP_NAME的测试程序
  4. Tomcat使用shutdown.bat关闭会将其他Tomcat关掉的问题
  5. 数据挖掘-贝叶斯定理
  6. java正确的代码_对文件名为Test.java的java代码描述正确的是()
  7. ruby array_在Ruby中使用Array.delete()和Array.delete_at()从Array中移除元素
  8. c++ 程序在内存中的分布
  9. Java中的时间和日期(下)
  10. 利用国内镜像加快pip下载速度和成功率
  11. Python 面向对象 —— 静态方法和类方法
  12. SQL中的树型编号处理
  13. 流计算技术实战 - CEP
  14. Mysql官网下载教程
  15. python饼状图显示其比例_Python学习笔记(matplotlib篇)--使用matplotlib绘制饼状图
  16. 龙芯电脑上配置LAMP环境
  17. 农历php,php 阴历-农历-转换类代码
  18. 以计算机作为类 触摸板作为接口,怎样用Arduinopromicro将电脑触控板转换为USB设备...
  19. 【原版教材•中英对照】电化学阻抗谱及其应用——一本专门针对研究生和电化学研究人员的书籍
  20. sqlite3设置密码 password

热门文章

  1. Quartus与ModelSim联合仿真启动ModelSim失败(已解决)
  2. 【已解决】Cause: jva.sql.SQLSyntaxErrorException:You have an error in your SQL sytax;check the nua that..
  3. 人脸识别的安全门禁系统设计
  4. 计算机服务怎么打开flash,windows无法启动flash helper service怎么办?
  5. Python神经网络编程(一)之神经网络如何工作
  6. android 人脸 sdk,Android 基于人脸识别 SDK使用总结
  7. Python语句判断能否构成三角形的完整语句
  8. Docker知识五:服务编排(Docker Compose概念)
  9. Ubuntu16 虚拟机全屏自适应
  10. 视频文件格式和视频编码方式的区别