目录

一、数据库连接

二、新增

三、删除

四、修改

五、查询

六、小结


在正式使用仓颉编程语言和mariadb-driver驱动操作数据库时,声明一下,本系列文章,操作的数据库是MySQL 8.0.46版本,为避免后续操作因为数据库版本不同所带来的不必要麻烦,建议小白或者基础较弱的友友们保持与我统一的版本,该数据库的下载连接:MySQL,MySQL数据库的安装,这里就不作过多赘述,接下来看看仓颉项目里是如何使用驱动连接数据库的。

一、数据库连接

创建数据库

create database web_study;

use web_study;

创建数据表

CREATE TABLE `student` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` int DEFAULT NULL,
`sex` int DEFAULT NULL,
`grade` int DEFAULT NULL,
PRIMARY KEY (`id`)
);

核心代码

package Web

import std.database.sql.*
import mariadb.cdbc.*

main(): Unit {
    // 创建驱动
    let driver = DriverManager.getDriver('mariadb').getOrThrow()
    // 数据库的链接
    let url = 'mariadb://127.0.0.1:3306'
    // 数据库用户
    let username = ('username', 'root')
    // 数据库密码
    let password = ('password', 'YGBG372S1')
    // 需要连接数据库
    let database = ('database', 'web_study')
    // 启动驱动获取数据资源
    let dataSource = driver.open(url, [username, password, database])
    // 创建连接
    let connection = dataSource.connect()
    println("数据库连接成功!")
    // 注意释放顺序
    // 释放连接资源
    connection.close()
    // 释放数据资源
    dataSource.close()
}

运行结果

注意:虽然“import mariadb.cdbc.*”在我们自己的项目里为未使用状态,但是在驱动内部,该引用被使用了,所以这个导包不能删除。

二、新增

核心代码

package Web

import std.database.sql.*
import mariadb.cdbc.*

main(): Unit {
    // 创建驱动
    let driver = DriverManager.getDriver('mariadb').getOrThrow()
    // 数据库的链接
    let url = 'mariadb://127.0.0.1:3306'
    // 数据库用户
    let username = ('username', 'root')
    // 数据库密码
    let password = ('password', 'YGBG372S1')
    // 需要连接数据库
    let database = ('database', 'web_study')
    // 启动驱动获取数据资源
    let dataSource = driver.open(url, [username, password, database])
    // 创建连接
    let connection = dataSource.connect()
    println('数据库连接成功!')

    // 新增数据
    let statemnt = connection.prepareStatement('insert into student (id, name, age, sex, grade) values (?, ?, ?, ?, ?)')
    // 注意类型需要和数据库里面的类型保持一致
    statemnt.set(1, 1)
    statemnt.set(2, '小白')
    statemnt.set(3, 20)
    statemnt.set(4, 1)
    statemnt.set(5, 1)
    // 更新数据库,返回数据库的影响行数
    let row = statemnt.update()
    println('影响行数: ${row.rowCount}')
    // 注意释放顺序
    // 释放新增
    statemnt.close()
    // 释放连接资源
    connection.close()
    // 释放数据资源
    dataSource.close()
}

运行结果

数据库结果

注意:因为学生表的主键我们设置了自增,因此,在后面添加数据时,代码里不写主键也是可以的。

运行结果

数据库结果

三、删除

核心代码

package Web

import std.database.sql.*
import mariadb.cdbc.*

main(): Unit {
    // 创建驱动
    let driver = DriverManager.getDriver('mariadb').getOrThrow()
    // 数据库的链接
    let url = 'mariadb://127.0.0.1:3306'
    // 数据库用户
    let username = ('username', 'root')
    // 数据库密码
    let password = ('password', 'YGBG372S1')
    // 需要连接数据库
    let database = ('database', 'web_study')
    // 启动驱动获取数据资源
    let dataSource = driver.open(url, [username, password, database])
    // 创建连接
    let connection = dataSource.connect()
    println('数据库连接成功!')

    // 删除数据 
    let name = '小黑'
    let statemnt = connection.prepareStatement('delete from student where name=?')
    statemnt.set(1, name)
    // 更新数据库,返回数据库的影响行数
    let row = statemnt.update()
    println('影响行数: ${row.rowCount}')

    // 注意释放顺序
    // 释放新增
    statemnt.close()
    // 释放连接资源
    connection.close()
    // 释放数据资源
    dataSource.close()
}

运行结果

数据库结果

四、修改

核心代码

package Web

import std.database.sql.*
import mariadb.cdbc.*

main(): Unit {
    // 创建驱动
    let driver = DriverManager.getDriver('mariadb').getOrThrow()
    // 数据库的链接
    let url = 'mariadb://127.0.0.1:3306'
    // 数据库用户
    let username = ('username', 'root')
    // 数据库密码
    let password = ('password', 'YGBG372S1')
    // 需要连接数据库
    let database = ('database', 'web_study')
    // 启动驱动获取数据资源
    let dataSource = driver.open(url, [username, password, database])
    // 创建连接
    let connection = dataSource.connect()
    println('数据库连接成功!')

    // 修改数据 
    let name = '白小黑'
    let age = 18
    let id = 1
    let statemnt = connection.prepareStatement('update student set name=?, age=? where id=?')
    statemnt.set(1, name)
    statemnt.set(2, age)
    statemnt.set(3, id)
    // 更新数据库,返回数据库的影响行数
    let row = statemnt.update()
    println('影响行数: ${row.rowCount}')

    // 注意释放顺序
    // 释放新增
    statemnt.close()
    // 释放连接资源
    connection.close()
    // 释放数据资源
    dataSource.close()
}

运行结果

数据库结果

五、查询

核心代码

package Web

import std.database.sql.*
import mariadb.cdbc.*

main(): Unit {
    // 创建驱动
    let driver = DriverManager.getDriver('mariadb').getOrThrow()
    // 数据库的链接
    let url = 'mariadb://127.0.0.1:3306'
    // 数据库用户
    let username = ('username', 'root')
    // 数据库密码
    let password = ('password', 'YGBG372S1')
    // 需要连接数据库
    let database = ('database', 'web_study')
    // 启动驱动获取数据资源
    let dataSource = driver.open(url, [username, password, database])
    // 创建连接
    let connection = dataSource.connect()
    println('数据库连接成功!')

    // 查询数据
    let statemnt = connection.prepareStatement("select * from student")
    // 获取结果集
    let resultSet = statemnt.query()
    while (resultSet.next()) {
        let id = resultSet.get<Int64>(1)
        let name = resultSet.get<String>(2)
        let age = match (resultSet.getOrNull<Int64>(3)) {
            case Some(v) => v
            case None => 0
        }
        let sex = if (resultSet.getOrNull<Int64>(4) == 1) {'男'} else {'女'}
        let grade = match (resultSet.getOrNull<Int64>(5)) {
            case Some(1) => '大一'
            case Some(2) => '大二'
            case Some(3) => '大三'
            case Some(4) => '大四'
            case _ => '无'
        }
        println('编号: ${id}, 姓名:${name}, 年龄: ${age}, 性别: ${sex}, 年级: ${grade}')
    }

    // 注意释放顺序
    // 释放结果集
    resultSet.close()
    // 释放新增
    statemnt.close()
    // 释放连接资源
    connection.close()
    // 释放数据资源
    dataSource.close()
}

运行结果

六、小结

本章为大家详细的介绍了单表增删改查的内容,下一章为大家介绍多表查询和事务的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉Web基础编程有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐