使用jdbc操作SQLite数据库(Kotlin版)
服务端可以使用Sqlite数据库吗?
当然是可以的。SQLite在小、中型流量的网站上还是可以用的。通常情况下,每天点击量在100K(10万)以下是完全没有问题的。
首先要添加依赖包:dependencies { ... implementation "org.xerial:sqlite-jdbc:3.36.0.2" ... }//数据库操作 object DBUtil { private const val url = "jdbc:sqlite:dbs/hy_users.db" /** * 支持drop table、create table、insert into、update…… * @param sql 数据库查询语句 * @param params PreparedStatement使用的参数 * @param timeout 超时时间 * @param block 接收返回的每一行数据 */ fun update(sql: String, params: Array? = null, timeout: Int = 30): Boolean { var state = 0 dose { if (params != null) { val statement = getPreparedStatement(it, sql, timeout, params) state = statement.executeUpdate() } else { val statement = it.createStatement() statement.queryTimeout = timeout state = statement.executeUpdate(sql) } } return state > 0 } /** * 查询操作 * @param sql 数据库查询语句 * @param params PreparedStatement使用的参数 * @param timeout 超时时间 * @param block 接收返回的每一行数据 */ fun query(sql: String, params: Array = arrayOf(), timeout: Int = 30, block: (ResultSet) -> Unit) { dose { if (params.isNotEmpty()) { //使用PreparedStatement val statement = getPreparedStatement(it, sql, timeout, params) val rs = statement.executeQuery() while (rs.next()) { block(rs) } } else { //使用Statement val statement = it.createStatement() statement.queryTimeout = timeout val rs = statement.executeQuery(sql) while (rs.next()) { block(rs) } } } } /** * 获取PreparedStatement */ private fun getPreparedStatement( it: Connection, sql: String, timeout: Int, params: Array ): PreparedStatement { val statement = it.prepareStatement(sql) statement.queryTimeout = timeout for (i in 1..params.size) { when (val a = params[i - 1]) { null -> statement.setNull(i, Types.NULL) is String -> { when { RegexUtil.isTimestamp(a) -> { statement.setTimestamp(i, Timestamp.valueOf(a)) } RegexUtil.isShortDate(a) -> { statement.setDate(i, Date.valueOf(a)) } RegexUtil.isShortTime(a) -> { statement.setTime(i, Time.valueOf(a)) } else -> { statement.setString(i, a) } } } is Boolean -> statement.setBoolean(i, a) is Byte -> statement.setByte(i, a) is Short -> statement.setShort(i, a) is Int -> statement.setInt(i, a) is Long -> statement.setLong(i, a) is Float -> statement.setFloat(i, a) is Double -> statement.setDouble(i, a) is BigDecimal -> statement.setBigDecimal(i, a) is ByteArray -> statement.setBytes(i, a) is Date -> statement.setDate(i, a) is Time -> statement.setTime(i, a) is Timestamp -> statement.setTimestamp(i, a) } } return statement } /** * 获取数据库连接并执行数据库操作 */ private fun dose(block: (Connection) -> Unit) { try { DriverManager.getConnection(url).use { block(it) } } catch (e: SQLException) { System.err.println(e.message) } } }
再上个Dao的代码:object UserDao { /** * 创建用户 */ fun createUser(user: User): String { var str = HyCode.dbError val sql = "insert into User(name,password) values(?,?)" val flag = DBUtil.update(sql, arrayOf(user.name, user.password)) if (flag) { str = HyCode.dbSuccess } return str } /** * 通过用户名查询用户 */ fun findUserByName(name: String): User? { var user: User? = null val sql = "select * from User where name=?" DBUtil.query(sql, arrayOf(name)) { user = User(it.getString("name"), it.getString("password"), it.getInt("id")) } return user } /** * 通过用户名查询用户Id */ fun findUserIdByName(name: String): Int? { var userId: Int? = null val sql = "select id from User where name=?" DBUtil.query(sql, arrayOf(name)) { userId = it.getInt("id") } return userId } }
比特币矿商IrisEnergy计划在纳斯达克上市前融资2亿美元比特币矿商IrisEnergy计划在寻求在纳斯达克直接上市之前,立即进行一轮融资,筹集2亿美元。IrisEnergy可能决定放弃上市计划,据报道,有几家SPAC与它接触,商讨在美国
PayPal将把每周加密货币购买限额上调至10万美元据报道,美国支付服务平台PayPal将用户的加密货币购买限额上调至原先的5倍。PayPal用户现在每周可以购买价值10万美元的比特币和其他数字货币资产,而之前的上限仅为2万美元。该
中国比特币矿工正准备涌入巴拉圭据报道,中国的比特币矿工正准备成群结队地涌入巴拉圭,报道称,如果监管机构不阻止矿工,未来三年该国可能有50万台在线钻机,一些工业企业已经在这个南美国家建立了商店。根据巴拉圭矿业公司
自5月以来,比特币首次突破50,000美元周日晚上,比特币回到50,000美元大关,这是一个重要的价格里程碑,上一次比特币价值5万美元是在5月中旬,特斯拉首席执行官埃隆马斯克表示,由于环境问题,他的公司将不再接受比特币作为
凯利泰冯柳只是个过客?AAAA代表基本面非常优秀,BBBB代表基本面比较优秀,CCCC代表概念性比较强。评级仅为个人观点,仅供参考,不作为投资建议。数据截止日期2019年6月30日单位亿元证券代码300
科博达新股跌停,机会还是大坑?证券简称科博达评级AAAAAA代表基本面非常优秀,BBBB代表基本面比较优秀,CCCC代表概念性比较强,评级仅为个人观点,仅供参考,不作为投资建议。数据截止日期2019年6月30日
利安隆历史新高唾手可得?证券简称利安隆评级BBBAAAA代表基本面非常优秀,BBBB代表基本面比较优秀,CCCC代表概念性比较强,评级仅为个人观点,仅供参考,不作为投资建议。数据截止日期2019年9月30
安井食品百亿市值只是刚起步?证券简称安井食品评级AAAAAA代表基本面非常优秀,BBBB代表基本面比较优秀,CCCC代表概念性比较强,评级仅针对公司基本面,为个人观点,仅供参考,不作为投资建议。数据截止日期2
iPhone12抢先爆料无刘海全面屏A14芯片,网友价格一定暴涨!由于疫情爆发,苹果取消了春季发布会,改为网上直销。iPadPro几天前突然在官方网站上更新,据透露iPhone9和苹果第一代5Giphone12将一起发布。就iPadpro而言,这
不笑你打我精选内涵段子1。带破洞的牛仔裤刚流行那年,邻村有个青年因打架伤人坐了两年牢出狱了,他老婆给他带来了一身新衣裤。当他换上了当时最流行的破洞牛仔裤后百感交集,抱着他老婆放声大哭,连声追
佩蒂股份全球宠物咬胶龙头,出口转内销增长空间巨大独立客观第三方研究,为您筛选优质上市公司证券代码300673综合评级A一主营业务评分751业务分析公司是我国较早从事宠物食品产业的企业之一,主要产品有畜皮咬胶植物咬胶宠物营养肉质零