簡體   English   中英

如何在 Kotlin 中設置 SQLite?

[英]How to setup SQLite in Kotlin?

我目前正在用 Kotlin 編寫一個聊天應用程序,並希望通過將散列密碼存儲在我的服務器上的數據庫中來實現身份驗證。

我對數據庫沒有任何經驗,所以我選擇了我在谷歌搜索大約 30 分鍾后找到的最簡單的一個。 SQLite。

不幸的是,Kotlin 中沒有任何真正的 SQLite 設置指南。

有人可以寫一個關於如何的小分步指南:

  • 安裝 SQLite
  • 連接到它
  • 在源代碼中使用它(例如創建一個具有一兩個值的表)
  • 如果可能,全部使用 Kotlin

我很感激任何幫助!

一旦您提到服務器,那么您可能正在尋找錯誤的方向。 SQLite 旨在作為嵌入式數據庫,每個設備都有其唯一的數據庫。 必須編寫服務器和客戶端之間的同步,並且可能會出現問題,而有許多 RDBMS 可以更好地滿足客戶端-服務器解決方案。

看看SQLite 的適當用途

Sqlite 不適用於客戶端-服務器模型。 數據存儲在您選擇的文件中,因此無需安裝。

也許你可以看看Exposed 它是一個用於 sql 數據庫(包括 sqlite)的 kotlin 庫。 有一個文檔here 您只需要將 'org.jetbrains.exposed:exposed' 依賴添加到 gradle 或 maven(+ jdbc 庫依賴,對於 SQLlite,它是 'org.xerial:sqlite-jdbc')。

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上的完整文檔。

這是在 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM