cat_dog_orange 2023-06-28 19:57 采纳率: 36.4%
浏览 18
已结题

android studio 连接阿里云服务器mysql数据库报错:无法创建到数据库服务器的连接

android studio 连接阿里云服务器mysql数据库报错:W/System.err: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server。连接数据库时的url连接没有改变,在别的连接数据库请求中可以正常连接,在获取数据库不同表格中的同一列的内容时报错。求大佬指导。
报错内容:

W/System.err: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
        at com.mysql.jdbc.Util.getInstance(Util.java:386)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861)
        at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2266)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015)
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768)
        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
        at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
        at java.sql.DriverManager.getConnection(DriverManager.java:580)
        at java.sql.DriverManager.getConnection(DriverManager.java:218)
        at com.demo2.android.database.JDBCUtil.getConnection(JDBCUtil.kt:17)
        at com.demo2.android.database.MySQLExample.getPlantNames(MySQLExample.kt:18)
        at com.demo2.android.activity.Camera.judgePlant(Camera.kt:375)
        at com.demo2.android.activity.Camera.showResult(Camera.kt:269)
        at com.demo2.android.activity.Camera.access$showResult(Camera.kt:52)
        at com.demo2.android.activity.Camera$imageDiscern$1.onSuccess(Camera.kt:246)
        at com.demo2.android.network.NetCallBack.onResponse(NetCallBack.kt:14)
        at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall$1$1.run(DefaultCallAdapterFactory.java:83)
        at android.os.Handler.handleCallback(Handler.java:942)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:240)
        at android.os.Looper.loop(Looper.java:351)
        at android.app.ActivityThread.main(ActivityThread.java:8399)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
    Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1667)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:389)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
        at java.net.Socket.connect(Socket.java:646)
        at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:299)
        at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2187)
        at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2220)
        ... 26 more


``
设计报错的单例:JDBCUtil 
```kotlin
object JDBCUtil {
    // 可以把几个字符串定义成常量:用户名,密码,URL,驱动类
    private const val USER = "xxx"
    private const val PWD = "xxx"
    private const val URL = "jdbc:mysql://xxxxxxx/InformationCollection?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false"
    private const val DRIVER = "com.mysql.jdbc.Driver"
    @get:Throws(SQLException::class)
    val connection: Connection
        get() = DriverManager.getConnection(URL, USER, PWD)


    /**
     * 注册驱动(可以省略)
     */
    init {
        try {
            Class.forName(DRIVER)
        } catch (e: ClassNotFoundException) {
            e.printStackTrace()
        }
    }
}

设计报错的类


class MySQLExample {
    fun getPlantNames():ArrayList<String> {
        val plantNames = ArrayList<String>()
        var conn: Connection? = null
        var stat: PreparedStatement? = null
        var rs: ResultSet? = null
        try {
            //遍历表名列表
            val tableNames = listOf("AsianExoticPlantInCHN", "EuropeanExoticPlantInCHN", "AmericanExoticPlantInCHN", "AfricanExoticPlantInCHN",
            "OceanianExoticPlantInCHN", "OtherExoticPlantInCHN")
            conn = JDBCUtil.connection
            for (tableName in tableNames) {
                //执行查询语句
                val sql = "SELECT plantName FROM $tableName"
                stat = conn.prepareStatement(sql)
                rs = stat.executeQuery()
                //提取plantName列的值并添加到ArrayList
                while (rs.next()) {
                    val plantName = rs.getString("plantName")
                    plantNames.add(plantName)
                }
            }
        } catch (e:SQLException) {
            e.printStackTrace()
        }finally {
            //关闭结果集和语句
            rs?.close()
            stat?.close()
            conn?.close()
        }
        return plantNames
    }
}

在activity中的调用:


 val example = MySQLExample()
val mainExoticPlantsNameList = example.getPlantNames()
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-06-28 22:24
    关注
    • 这篇博客: 关于mysql 8.0连接JDBC中各种错误的汇总中的 首先第一种错误:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 这个错误是由驱动和数据库版本不一致造成的。
      我的数据库是mysql8.0但是使用了mysql-connector-java-5.1.38.jar这个驱动。所以会报这个错误。
      解决方法:
      将驱动替换为相应mysql8.0版本的驱动。
      我的驱动是mysql-connector-java-8.0.13.jar 将它替换掉原来的驱动即可。
      这个驱动是在官网下载的,我当时在安装mysql时就已经下载了全家桶可以在自己的文件夹中找到我的路径仅供参考。
      在这里插入图片描述
      然后还需修改第二个地方:
      将com.mysql.jdbc.Driver改为com.mysql.cj.jdbc.Driver即可

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月3日
  • 创建了问题 6月28日

悬赏问题

  • ¥50 python批量提取发票的信息
  • ¥15 mysql安装,初始化数据库失败
  • ¥15 虚幻五引擎内容如何上传至网盘?
  • ¥15 使用mmpose库时出现了问题
  • ¥15 IRI2016模型matlab运行报错
  • ¥50 bat怎么设置电脑后台自动点击网页指定词运行脚本,输入指定网页链接,指定点击词,指定间隔时间,指定网页出现的词,指定网页出现词出现后后点击锁定,放在后台运行不影响前台鼠标工作
  • ¥20 20CrMnMo的高温变形抗力
  • ¥15 RTX3.6 5565驱动中断报错
  • ¥50 带防重放token(Antireplay-Token)的网站怎么用Python发送请求
  • ¥15 visa版本没问题,串口调试助手调试串口正常使用,但是labview刷新不出来