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()