在AS中使用mysql5.1.49驱动链接阿里云服务器上的mysql5.7.4数据库,显示上传成功,但数据库中却没有数据,想问一下大家这是因为什么:
jdbc连接工具类:
object JDBCUtil {
// 可以把几个字符串定义成常量:用户名,密码,URL,驱动类
private const val USER = "root"
private const val PWD = "123456Abc"
private const val URL = "jdbc:mysql://8.130.82.8:3306/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()
}
}
}
上传数据倒数据库中代码:
private fun uploadMySQL(name: String, path: String,date: String, time: String, weiDu: String, add: String, habit: String, person: String, remark: String
) {
Thread {
try {
val conn: Connection = JDBCUtil.connection
val sql = "insert into PlantInfo values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
val preStat: PreparedStatement = conn.prepareStatement(sql)
preStat.setString(1, "_id")
preStat.setString(2, name)
preStat.setString(3, path)
preStat.setString(4, date)
preStat.setString(5, time)
preStat.setString(6, weiDu)
preStat.setString(7, add)
preStat.setString(8, habit)
preStat.setString(9, person)
preStat.setString(10, remark)
// preStat.executeUpdate() 不注释掉该行代码会报错,注释掉之后可以打印出"mysql", "上传成功"
Log.e("mysql", "上传成功")
preStat.close()
conn.close()
} catch (e: ClassNotFoundException) {
e.printStackTrace()
} catch (e: SQLException) {
e.printStackTrace()
}
}.start()
}
会打印出"mysql", "上传成功"这句话,但在数据库中看不到新增的数据.PS:在另一个activity中上传信息,会报错:
private fun uploadLiuYanToMYSQL(userInfo: String, phoneInfo:String, message:String) {
try {
val conn: Connection = JDBCUtil.connection
val sql = "insert into LiuYanInfo values(?, ?, ?)"
val preStat: PreparedStatement = conn.prepareStatement(sql)
preStat.setString(1, userInfo)
preStat.setString(2, phoneInfo)
preStat.setString(3, message)
preStat.executeUpdate()
Log.e("mysql", "上传成功")
preStat.close()
conn.close()
} catch (e: ClassNotFoundException) {
e.printStackTrace()
} catch (e: SQLException) {
e.printStackTrace()
}
}
报错信息为:
W/System.err: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
W/System.err: 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 JDBCUtil.getConnection(JDBCUtil.kt:15)
at com.demo2.android.activity.FeedBackActivity.uploadLiuYanToMYSQL(FeedBackActivity.kt:69)
at com.demo2.android.activity.FeedBackActivity.access$uploadLiuYanToMYSQL(FeedBackActivity.kt:20)
at com.demo2.android.activity.FeedBackActivity$onCreate$2.onClick(FeedBackActivity.kt:54)
at android.view.View.performClick(View.java:7558)
at android.view.View.performClickInternal(View.java:7534)
at android.view.View.-$$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:29661)
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:8364)
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