我目前正在用Kotlin编写一个聊天应用程序,并希望通过将散列的密码存储在数据库中的服务器上来实现身份验证。
我对数据库没有任何经验,因此我选择了在Google搜索大约30分钟后发现的最简单的数据库。 SQLite。
不幸的是,在Kotlin中没有任何有关SQLite的实际设置指南。
有人可以写一个逐步的小指南:
感谢您的帮助!
答案 0 :(得分:0)
一旦您提到服务器,那么您可能正在寻找错误的方向。 SQLite旨在用作嵌入式数据库,每个设备都有其唯一的数据库。服务器和客户端之间的同步必须编写,并且可能会出现问题,而有许多RDBMS可以更好地满足客户端-服务器解决方案的需求。
答案 1 :(得分:0)
Sqlite不适用于客户端-服务器模型。数据存储在您选择的文件中,因此无需进行安装。
也许您可以看看Exposed。它是用于sql数据库(包括sqlite)的kotlin库。 有一个文档here。 您只需要在gradle或maven中添加“ org.jetbrains.exposed:exposed”功能即可(+ jdbc库功能,对于SQLlite,它是“ org.xerial:sqlite-jdbc”)。
答案 2 :(得分:0)
import com.sun.net.httpserver.HttpServer
import java.io.PrintWriter
import java.net.InetSocketAddress
import java.sql.* // Connection, DriverManager, SQLException
import java.util.Properties
/**
https://www.tutorialkart.com/kotlin/connect-to-mysql-database-from-kotlin-using-jdbc/
$ wget https://repo1.maven.org/maven2/org/xerial/sqlite-jdbc/3.27.2.1/sqlite-jdbc-3.27.2.1.jar
$ kotlinc sqws.kt; kotlin -cp ".:./sqlite-jdbc-3.27.2.1.jar" SqwsKt
Minimal embedded HTTP server in Kotlin using Java built in HttpServer
**/
fun main(args: Array<String>) {
val conn = DriverManager.getConnection( "jdbc:sqlite:./sampledb.db")
var stmt: Statement? = null
var resultset: ResultSet? = null
try {
stmt = conn.createStatement()
resultset = stmt!!.executeQuery("SELECT * FROM items;")
if (stmt.execute("SELECT * FROM items;")) {
resultset = stmt.resultSet
}
} catch (ex: SQLException) {
// handle any errors
ex.printStackTrace()
}
HttpServer.create(InetSocketAddress(8080), 0).apply {
println("browse http://localhost:8080/hello")
createContext("/hello") { http ->
http.responseHeaders.add("Content-type", "text/plain")
http.sendResponseHeaders(200, 0);
PrintWriter(http.responseBody).use { out ->
out.println( "ok")
while (resultset!!.next()) {
out.println(resultset.getString("name"))
}
}
}
start()
}
}
请查看Github上的完整文档。
答案 3 :(得分:0)
这是在 Ubuntu 20.04 上使用 JDBC API 的 MWE:
sudo apt install sqlite3
SQLITE_VERSION=`sqlite3 --version | cut -d ' ' -f 1` # 3.31.1 on Ubuntu 20.04
curl -s https://get.sdkman.io | bash
sdk i java # for JDBC
sdk i maven # for JDBC interface to SQLite (see later)
sdk i kotlin 1.4.10 # later versions are currently affected by:
# https://youtrack.jetbrains.com/issue/KT-43520
cat > demo.main.kts <<EOF
#!/usr/bin/env kotlin
# uses maven to install the dependency from maven central:
# reference: https://github.com/Kotlin/KEEP/blob/master/proposals/scripting-support.md#kotlin-main-kts
@file:DependsOn("org.xerial:sqlite-jdbc:$SQLITE_VERSION")
import java.sql.DriverManager
import java.sql.Connection
import java.sql.Statement
import java.sql.ResultSet
# creates or connects to database.sqlite3 file in the current directory:
var connection = DriverManager.getConnection("jdbc:sqlite:database.sqlite3")
var statement = connection.createStatement()
statement.executeUpdate("drop table if exists people")
statement.executeUpdate("create table people (id integer, name string)")
statement.executeUpdate("insert into people values(1, 'leo')")
statement.executeUpdate("insert into people values(2, 'yui')")
var resultSet = statement.executeQuery("select * from people")
while ( resultSet.next() ) {
println( "id = " + resultSet.getInt("id") )
println( "name = " + resultSet.getString("name") )
println()
}
connection.close()
EOF
chmod +x demo.main.kts
./demo.main.kts