近期,用户使用 Kotlin语言的 ORM 框架JetBrains/Exposed框架进行开发需要适配达梦数据库,查看Exposed官网发现原生支持的数据库不包含达梦数据库,随后进行适配操作并进行记录。
官网:https://www.github.com/JetBrains/Exposed
文档地址:https://www.github.com/JetBrains/Exposed/wiki
官网地址: https://gradle.org/
Gradle 是一款 Google 推出的基于 JVM、通用灵活的项目构建工具,支持 Maven,JCenter 多种第三方仓库;支持传递性
依赖管理、废弃了繁杂的 xml 文件,转而使用简洁的、支持多种语言(例如:java、groovy 等)的 build 脚本文件。
软件名称 | 版本号 |
---|---|
Gradle | 7.4.2 |
kotlin | 1.7.20 |
JDK | 1.8 |
JetBrains/Exposed | 0.40.1 |
DM8 | 1-2-114-22.03.04-158322-10045-ENT |
jdbc驱动 | V8.1.2.138-Build(2022.09.27-13061) |
import java.sql.Connection
import java.sql.DriverManager
import java.sql.SQLException
/*
CREATE TABLE "SYSDBA"."TEST"
(
"ID" VARCHAR(50),
"NAME" VARCHAR(50),
"SEX" VARCHAR(50))
insert into "TEST"("ID", "NAME", "SEX") VALUES(1, '小伙', '男');
* */
fun main(args: Array<String>) {
// 连接数据库
val connection = getConnection()
// 预编译 sql 语句
val sql = connection!!.prepareStatement("select * from TEST")
// 执行查询
val res = sql.executeQuery()
// 遍历结果集并输出数据
while (res.next()) {
println("ID -> ${res.getString(1)}")
println("姓名 -> ${res.getString(2)}")
println("性别 -> ${res.getString(3)}")
}
}
//数据库连接对象
fun getConnection(): Connection? {
val driver = "dm.jdbc.driver.DmDriver"
val url = "jdbc:dm://127.0.0.1:5236"
val username = "SYSDBA"
val password = "SYSDBA"
try {
Class.forName(driver)
} catch (e: ClassNotFoundException) {
// TODO Auto-generated catch block
e.printStackTrace()
}
var conn: Connection? = null
try {
conn = DriverManager.getConnection(url, username, password)
} catch (e: SQLException) {
e.printStackTrace()
}
return conn
}
执行截图
dependencies {
testImplementation(kotlin("test"))
implementation("org.jetbrains.exposed", "exposed-core", "0.40.1")
implementation("org.jetbrains.exposed", "exposed-dao", "0.40.1")
implementation("org.jetbrains.exposed", "exposed-jdbc", "0.40.1")
// implementation("mysql", "mysql-connector-java", "8.0.11")
// implementation("com.oracle.database.jdbc:ojdbc6:11.2.0.4")
}
import org.jetbrains.exposed.dao.*
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction
import org.jetbrains.exposed.sql.vendors.DatabaseDialect
import org.jetbrains.exposed.sql.vendors.OracleDialect
object Users : IntIdTable() {
val name = varchar("name", 50).index()
val city = reference("city", Cities)
val age = integer("age")
}
object Cities: IntIdTable() {
val name = varchar("name", 50)
}
class User(id: EntityID<Int>) : IntEntity(id) {
companion object : IntEntityClass<User>(Users)
var name by Users.name
var city by City referencedOn Users.city
var age by Users.age
}
class City(id: EntityID<Int>) : IntEntity(id) {
companion object : IntEntityClass<City>(Cities)
var name by Cities.name
val users by User referrersOn Users.city
}
fun main() {
Database.connect(
"jdbc:dm://127.0.0.1:5236?compatibleMode=oracle",
driver = "dm.jdbc.driver.DmDriver",
user = "SYSDBA",
password = "SYSDBA"
)
transaction {
addLogger(StdOutSqlLogger)
SchemaUtils.create (Cities, Users)
val stPete = City.new {
name = "St. Petersburg"
}
val munich = City.new {
name = "Munich"
}
User.new {
name = "a"
city = stPete
age = 5
}
User.new {
name = "b"
city = stPete
age = 27
}
User.new {
name = "c"
city = munich
age = 42
}
println("Cities: ${City.all().joinToString {it.name}}")
println("Users in ${stPete.name}: ${stPete.users.joinToString {it.name}}")
println("Adults: ${User.find { Users.age greaterEq 18 }.joinToString {it.name}}")
}
}
执行报错Can’t resolve dialect for connection: jdbc:dm://127.0.0.1:5236
根据官方的F&A的其他的数据库可实现DatabaseDialect接口并Database.registerDialect()注册进去。
https://www.github.com/JetBrains/Exposed/wiki/FAQ
/* 解决方案 推荐 注册到Database中*/
Database.registerJdbcDriver("jdbc:dm","dm.jdbc.driver.DmDriver", OracleDialect.dialectName);
Database.connect(
"jdbc:dm://127.0.0.1:5236?compatibleMode=oracle",
driver = "dm.jdbc.driver.DmDriver",
user = "SYSDBA",
password = "SYSDBA"
)
dependencies {
testImplementation(kotlin("test"))
implementation("org.jetbrains.exposed", "exposed-core", "0.40.1")
implementation("org.jetbrains.exposed", "exposed-dao", "0.40.1")
implementation("org.jetbrains.exposed", "exposed-jdbc", "0.40.1")
implementation("mysql", "mysql-connector-java", "8.0.11")
}
import org.jetbrains.exposed.dao.*
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction
object Users : IntIdTable() {
val name = varchar("name", 50).index()
val city = reference("city", Cities)
val age = integer("age")
}
object Cities: IntIdTable() {
val name = varchar("name", 50)
}
class User(id: EntityID<Int>) : IntEntity(id) {
companion object : IntEntityClass<User>(Users)
var name by Users.name
var city by City referencedOn Users.city
var age by Users.age
}
class City(id: EntityID<Int>) : IntEntity(id) {
companion object : IntEntityClass<City>(Cities)
var name by Cities.name
val users by User referrersOn Users.city
}
fun main() {
// Database.connect("jdbc:h2:mem:test", driver = "org.h2.Driver", user = "root", password = "")
val connect = Database.connect(
"jdbc:mysql://127.0.0.1:3306/dmtest?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false",
driver = "com.mysql.cj.jdbc.Driver",
user = "root",
password = "Gas123."
)
transaction {
addLogger(StdOutSqlLogger)
SchemaUtils.create (Cities, Users)
val stPete = City.new {
name = "St. Petersburg"
}
val munich = City.new {
name = "Munich"
}
User.new {
name = "a"
city = stPete
age = 5
}
User.new {
name = "b"
city = stPete
age = 27
}
User.new {
name = "c"
city = munich
age = 42
}
println("Cities: ${City.all().joinToString {it.name}}")
println("Users in ${stPete.name}: ${stPete.users.joinToString {it.name}}")
println("Adults: ${User.find { Users.age greaterEq 18 }.joinToString {it.name}}")
}
}
dependencies {
testImplementation(kotlin("test"))
implementation("org.jetbrains.exposed", "exposed-core", "0.40.1")
implementation("org.jetbrains.exposed", "exposed-dao", "0.40.1")
implementation("org.jetbrains.exposed", "exposed-jdbc", "0.40.1")
implementation("com.oracle.database.jdbc:ojdbc6:11.2.0.4")
}
import org.jetbrains.exposed.dao.*
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction
object Users : IntIdTable() {
val name = varchar("name", 50).index()
val city = reference("city", Cities)
val age = integer("age")
}
object Cities: IntIdTable() {
val name = varchar("name", 50)
}
class User(id: EntityID<Int>) : IntEntity(id) {
companion object : IntEntityClass<User>(Users)
var name by Users.name
var city by City referencedOn Users.city
var age by Users.age
}
class City(id: EntityID<Int>) : IntEntity(id) {
companion object : IntEntityClass<City>(Cities)
var name by Cities.name
val users by User referrersOn Users.city
}
fun main() {
val connect = Database.connect(
"jdbc:oracle:thin:@127.0.0.1:1521:oracle",
driver = "oracle.jdbc.driver.OracleDriver",
user = "scott",
password = "oracle"
)
transaction {
addLogger(StdOutSqlLogger)
SchemaUtils.create (Cities, Users)
val stPete = City.new {
name = "St. Petersburg"
}
val munich = City.new {
name = "Munich"
}
User.new {
name = "a"
city = stPete
age = 5
}
User.new {
name = "b"
city = stPete
age = 27
}
User.new {
name = "c"
city = munich
age = 42
}
println("Cities: ${City.all().joinToString {it.name}}")
println("Users in ${stPete.name}: ${stPete.users.joinToString {it.name}}")
println("Adults: ${User.find { Users.age greaterEq 18 }.joinToString {it.name}}")
}
}
链接:https://pan.baidu.com/s/1j9fFXnFnH6_R-C79h6-zSw?pwd=cw01
提取码:cw01
文章
阅读量
获赞