使用Kotlin连接到MariaDB 10.4
最近我尝试使用最受欢迎的 Kotlin 语言与 MariaDB Connector/J (JDBC 驱动程序) 连接到 MariaDB 10.4 数据库。
我使用Java转Kotlin的方法,将之前写的文章中的Java示例代码转换为Kotlin,并进行了一些手动修正。
使用MariaDB Connector/J连接到MariaDB 10.4
样本代码
import java.sql.*
import org.mariadb.jdbc.internal.util.constant.Version
object jdbc_sample {
@JvmStatic fun main(args:Array<String>) {
var conn: Connection? = null
var stmt: Statement? = null
var resultSet: ResultSet
try {
Class.forName("org.mariadb.jdbc.Driver")
println("MariaDB Connector/J: " + Version.version + "\n")
print("Connecting to DB...")
conn = DriverManager.getConnection(
"jdbc:mariadb://192.168.2.104/mysql",
"db_user", "db_passwd")
println("done.")
stmt = conn.createStatement()
resultSet = stmt.executeQuery("SELECT user, host FROM mysql.user")
println("\nList of MariaDB users:")
while (resultSet.next()) {
var user = resultSet.getString(1)
var host = resultSet.getString(2)
println(user + "@'" + host + "'")
}
}
catch (ex: SQLException) {
ex.printStackTrace()
}
catch (ex: Exception) {
ex.printStackTrace()
}
finally {
try {
if (stmt != null) {
conn?.close()
}
}
catch (ex:SQLException) {}
try {
if (conn != null) {
conn.close()
}
}
catch (ex: SQLException) {
ex.printStackTrace()
}
}
}
}
build.gradle.kts 可以用以下方式翻译成中文:构建.gradle.kts
这次通过使用Gradle进行构建和执行。
首先执行以下命令。
gradle init --type kotlin-application
我已经根据以下的 build.gradle.kts 进行了以下的修正。
plugins {
id("org.jetbrains.kotlin.jvm").version("1.3.21")
application
}
repositories {
jcenter()
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.mariadb.jdbc:mariadb-java-client:2.4.4")
}
application {
mainClassName = "jdbc_sample"
}
MariaDB Connector/J 在2019年10月06日时使用的是最新版本的2.4.4。
建造
首先,尝试只进行 gradle build 构建。
C:\Users\foo\kotlin\jdbc_sample>gradle build
BUILD SUCCESSFUL in 1s
6 actionable tasks: 5 executed, 1 up-to-date
执行结果
使用Gradle运行示例程序。
C:\Users\foo\kotlin\jdbc_sample>gradle run
> Task :run
MariaDB Connector/J: 2.4.4
Connecting to DB... done.
List of MariaDB users:
db_user@'%'
mysql@'localhost'
root@'localhost'
BUILD SUCCESSFUL in 2s
2 actionable tasks: 1 executed, 1 up-to-date
似乎没有问题。