如何在Kotlin中设置SQLite?

时间:2019-01-02 22:18:10

标签: sqlite kotlin

我目前正在用Kotlin编写一个聊天应用程序,并希望通过将散列的密码存储在数据库中的服务器上来实现身份验证。

我对数据库没有任何经验,因此我选择了在Google搜索大约30分钟后发现的最简单的数据库。 SQLite。

不幸的是,在Kotlin中没有任何有关SQLite的实际设置指南。

有人可以写一个逐步的小指南:

  • 安装SQLite
  • 连接到它
  • 在源代码中使用它(例如,创建具有一个或两个值的表)
  • 如果可能的话,全部在科特林

感谢您的帮助!

4 个答案:

答案 0 :(得分:0)

一旦您提到服务器,那么您可能正在寻找错误的方向。 SQLite旨在用作嵌入式数据库,每个设备都有其唯一的数据库。服务器和客户端之间的同步必须编写,并且可能会出现问题,而有许多RDBMS可以更好地满足客户端-服务器解决方案的需求。

看看Appropriate Uses For SQLite

答案 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