SQLite 安装和 Java 使用教程

news2024/9/24 13:22:12

SQLite是一个C语言库,它实现了一个小型、快速、自包含、高可靠性、功能齐全的SQL数据库引擎。SQLite是世界上使用最多的数据库引擎。SQLite内置于所有手机和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。

SQLite文件格式稳定、跨平台、向后兼容,开发人员承诺在2050年保持这种格式。SQLite数据库文件通常用作在系统之间传输丰富内容的容器,以及数据的长期存档格式。目前有超过1万亿个SQLite数据库在积极使用

SQLite 官网:https://www.sqlite.org/index.html

目录

1、安装 SQLite

2、新建数据库

3、新建表

4、Java 操作 SQLite

4.1、普通类型存储

4.2、二进制类型存储


1、安装 SQLite

官网下载 SQLite

下载地址:https://www.sqlite.org/download.html

 根据自己的电脑系统选择

下载后将其解压

解压

2、新建数据库

双击打开 sqlite3.exe

弹出命令行窗体

新建数据库命令

.open test.db

新建名称是 test 的数据库

新建完成后,会在当前目录下生成 test.db 的文件,数据库创建完成

3、新建表

新建表可以使用命令

CREATE TABLE user (
  id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  name TEXT
);

 新建 user 表,有 id 和 name 字段,id是主键自增,name是 TEXT 字符串文本类型

SQLite 的类型有

类型说明
NULL空值
INTEGER带符号的整型
REAL浮点数字
TEXT字符串
BLOB二进制对象

 除此之外可以使用 Navicat 连接建表

选择 SQLite

连接名随意

选择数据库文件,点击确定即可

新建表

新建表,有3个字段, id, name,price

新建完成

4、Java 操作 SQLite

新建 maven 项目 sqlite-learn

引入 sqlite-jdbc 依赖

<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.41.2.1</version>
</dependency>

sqlite-learn 项目 pom 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.wsjzzcbq</groupId>
    <artifactId>sqlite-learn</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.xerial</groupId>
            <artifactId>sqlite-jdbc</artifactId>
            <version>3.41.2.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

4.1、普通类型存储

增删改查代码

package com.wsjzzcbq;

import java.sql.*;

/**
 * SqliteDemo
 *
 * @author wsjz
 * @date 2023/11/17
 */
public class SqliteDemo {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("org.sqlite.JDBC");
        //SQLite 数据库文件
        String dbFile = "D:\\tmp\\sql\\sqlite-tools-win-x64-3440000\\test.db";
        String url = "jdbc:sqlite:" + dbFile;
        Connection conn = DriverManager.getConnection(url);

        //添加
        insert(conn);
        //查询
        select(conn);
        //修改
        update(conn);
        //删除
        delete(conn);

        conn.close();
    }

    private static void select(Connection connection) throws SQLException {
        String sql = "select * from user";
        Statement statement = connection.createStatement();
        ResultSet rs = statement.executeQuery(sql);
        while (rs.next()) {
            int id = rs.getInt("id");
            String name = rs.getString("name");

            System.out.println(id);
            System.out.println(name);
        }
        rs.close();
        statement.close();
    }

    private static void insert(Connection connection) throws SQLException {
        String sql = "insert into user( name) values('小丽')";
        Statement stat = connection.createStatement();
        stat.executeUpdate(sql);
        stat.close();
    }

    private static void update(Connection connection) throws SQLException {
        String sql = "update user set name = ? where id = ?";
        PreparedStatement ps = connection.prepareStatement(sql);
        ps.setObject(1, "小雪花");
        ps.setObject(2, 1);
        ps.executeUpdate();
        ps.close();
    }

    private static void delete(Connection connection) throws SQLException {
        String sql = "delete from user where id = ?";
        PreparedStatement ps = connection.prepareStatement(sql);
        ps.setObject(1, 1);
        ps.executeUpdate();
        ps.close();
    }

}

运行测试

测试添加

测试修改

测试删除

shop 表代码

package com.wsjzzcbq;

import java.sql.*;

/**
 * SqliteDemo2
 *
 * @author wsjz
 * @date 2023/11/17
 */
public class SqliteDemo2 {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("org.sqlite.JDBC");
        //SQLite 数据库文件
        String dbFile = "D:\\tmp\\sql\\sqlite-tools-win-x64-3440000\\test.db";
        String url = "jdbc:sqlite:" + dbFile;
        Connection conn = DriverManager.getConnection(url);

        //添加
        insert(conn);
        //查询
        select(conn);


        conn.close();
    }

    private static void insert(Connection connection) throws SQLException {
        String sql = "insert into shop(name, price) values('水浒传', 20)";
        Statement stat = connection.createStatement();
        stat.executeUpdate(sql);
        stat.close();
    }

    private static void select(Connection connection) throws SQLException {
        String sql = "select * from shop";
        Statement statement = connection.createStatement();
        ResultSet rs = statement.executeQuery(sql);
        while (rs.next()) {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            double price = rs.getDouble("price");

            System.out.println(id);
            System.out.println(name);
            System.out.println(price);
        }
        rs.close();
        statement.close();
    }

}

运行测试

4.2、二进制类型存储

储存二进制图片文件

package com.wsjzzcbq;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.sql.*;

/**
 * SqliteDemo3
 *
 * @author wsjz
 * @date 2023/11/17
 */
public class SqliteDemo3 {

    public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException {
        Class.forName("org.sqlite.JDBC");
        //SQLite 数据库文件
        String dbFile = "D:\\tmp\\sql\\sqlite-tools-win-x64-3440000\\test.db";
        String url = "jdbc:sqlite:" + dbFile;
        Connection conn = DriverManager.getConnection(url);

        //新建表
        createTable(conn);
        //添加
        insert(conn);
        //查询
        select(conn);


        conn.close();
    }

    private static void createTable(Connection connection) throws SQLException {
        String sql = "CREATE TABLE IF NOT EXISTS  img (name TEXT, image BLOB)";
        Statement statement = connection.createStatement();
        statement.executeUpdate(sql);
        statement.close();
    }

    private static void insert(Connection connection) throws SQLException, IOException {
        String sql = "insert into img(name, image) values(?, ?)";
        PreparedStatement ps = connection.prepareStatement(sql);
        ps.setObject(1, "怀素自叙帖");

        String filePath = "D:\\tmp\\img\\huaisu.png";
        byte[] bytes = Files.readAllBytes(Paths.get(filePath));
        InputStream inputStream = Files.newInputStream(Paths.get(filePath));
        //添加图片文件
        ps.setBinaryStream(2, inputStream, bytes.length);

        ps.executeUpdate();
        ps.close();
    }

    private static void select(Connection connection) throws SQLException, IOException {
        String sql = "select * from img";
        Statement statement = connection.createStatement();
        ResultSet rs = statement.executeQuery(sql);
        while (rs.next()) {
            //获取name
            String name = rs.getString("name");
            System.out.println(name);

            //获取图片文件
            InputStream inputStream = rs.getBinaryStream("image");
            String filePath = "D:\\tmp\\img\\huaisu2.png";
            Files.copy(inputStream, Paths.get(filePath));
        }
        rs.close();
        statement.close();
    }
}

测试运行

至此完

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1228185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分库分表

分库&#xff0c;分表&#xff0c;分库分表 “只分库“&#xff0c;“只分表“&#xff0c;“既分库又分表" 何时分库 在面对高并发的情况下&#xff0c;数据库连接成为性能瓶颈。当数据QPS过高导致数据库连接数不足时&#xff0c;考虑分库。在读多写少的场景下&#x…

场景交互与场景漫游-交运算与对象选取(8-1)

交运算与对象选取 在面对大规模的场景管理时&#xff0c;场景图形的交运算和图形对象的拾取变成了一项基本工作。OSG作为一个场景管理系统&#xff0c;自然也实现了场景图形的交运算&#xff0c;交运算主要封装在osgUtil 工具中在OSG中&#xff0c;osgUtil是一个非常强有力的工…

基于学生心理学算法优化概率神经网络PNN的分类预测 - 附代码

基于学生心理学算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于学生心理学算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于学生心理学优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

电子学会2023年6月青少年软件编程(图形化)等级考试试卷(四级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(四级) 一、单选题(共10题,共30分) 1. 下列积木运行后的结果是?( )(说明:逗号后面无空格) A.

【ATTCK】MITRE Caldera-路径发现插件

CALDERA是一个由python语言编写的红蓝对抗工具&#xff08;攻击模拟工具&#xff09;。它是MITRE公司发起的一个研究项目&#xff0c;该工具的攻击流程是建立在ATT&CK攻击行为模型和知识库之上的&#xff0c;能够较真实地APT攻击行为模式。 通过CALDERA工具&#xff0c;安全…

AOT:一个.Net 8最牛逼和最受欢迎关注的功能!

这次.Net 8发布&#xff0c;更新了诸多功能&#xff0c;但从各个编程社区看到大家讨论和交流最多的&#xff0c;还是AOT这个功能。 AOT本身在.Net 7就开始引入了&#xff0c;但这次.Net 8做了诸多更新&#xff1a; 1、增加了macOS 平台的 x64 和 Arm64 体系结构的支持&#x…

python中Thread实现多线程任务

目录 多线程概括&#xff1a; 使用 Thread 模块创建线程 如果不使用多线程&#xff1a; 多线程概括&#xff1a; 多线程是一种并发执行的编程方式&#xff0c;允许程序同时执行多个独立的线程&#xff0c;每个线程在程序中运行独立的任务。每个线程都是程序的基本执行单元&a…

智慧路灯控制系统设计方案思路及设计原则

智慧路灯系统依托于智慧路灯综合管理平台&#xff0c;实现点&#xff08;智慧路灯&#xff09;、线&#xff08;道路&#xff09;、面&#xff08;城市&#xff09;的三级监控&#xff0c;实现灯控、屏控、视频监控、数据采集、联动的统一。 1&#xff09;一个城市的智慧路灯系…

Nodejs--Express框架使用

目录 一.概念 二.项目目录结构 三.app.js 四.项目需要的中间件 五.Mysql连接 六.日志配置 七.实体模型配置 八.统一结果封装 九.app.js的详细配置 十.自定义登录拦截器 十一.route路由配置 十二.controller处理 十二&#xff1a;静态页面&#xff1a; 十三&#xff…

RobotFramework进阶之自定义的python模块(十四)

引言 RobotFramework自动化框架&#xff08;以下简称RF&#xff09;之前文章我们讲了通过import第三方的library&#xff08;RequestsLibrary等&#xff09;&#xff0c;在实际项目中第三方的包并不能满足我们的需要&#xff0c;此时我们可自己编写python模块&#xff08;.py文…

百胜杯答题系统

近期太忙了 百胜方答题活动于近期终于告一段落&#xff0c;这个活动周期长&#xff0c;参与人数多&#xff0c;是我这几年做答题活动的一个巅峰之作 当然项目开发难度不大&#xff0c;主要是参与人数突破了百万&#xff0c;对我而言是一次很好的历练 具体的设计方案 百胜杯答…

Java Swing实现简单的文本编辑器

内容要求 1) 本次程序设计是专门针对 Java 课程的,要求使用 Java 语言进行具有一定代码量的程序开发。程序的设计要结合一定的算法&#xff0c;在进行代码编写前要能够设计好自己的算法。 本次程序设计涉及到 Java 的基本语法&#xff0c;即课堂上所介绍的变量、条件语句、循…

qemu + busybox + 内核实验环境搭建(2023-11)

主要是参考网上的例子&#xff0c;网上的一些例子可能用的busybox 老旧&#xff0c;编译各种问题&#xff0c;以及rootfs hda的方式或者ramfs的方式。可能有些概念还是不清楚&#xff0c;以下是最终完成测试成功的案例。 下载kernel https://cdn.kernel.org/pub/linux/kernel…

接口自动化测试很难吗?来看看这份超详细的教程!

接口自动化测试框架目的 测试工程师应用自动化测试框架的目的: 增强测试脚本的可维护性、易用性(降低公司自动化培训成本&#xff0c;让公司的测试工程师都可以开展自动化测试)。 以下框架以微信公众平台开放文档实战 地址&#xff1a;https://developers.weixin.qq.com/doc…

复杂类型,查询--学习笔记

1&#xff0c;复杂类型 解决问题&#xff1a;一些不容易获取到的数据&#xff0c;例如数组类型&#xff0c;集合类型等&#xff0c;获取他们的数据 -- 1.创建表 create table tb_array_person(name string,city_array array<string> )row format delimited fields term…

hypermesh学习总结(一)

1、hypermesh导入导出 2、hypermesh如何使用拓扑命令,连接多个几何体为一个? 3、hypermesh模式选择 分别有显示动力学模式explicit,标准模式Standard3D(静力学及模态等)

【最新Tomcat】IntelliJ IDEA通用配置Tomcat教程(超详细)

前言 IntelliJ IDEA是一个强大的集成开发环境&#xff0c;能够大大简化Java应用程序的开发和部署过程。而Tomcat作为一个流行的Java Web服务器&#xff0c;其与IntelliJ IDEA的整合能够提供便捷的开发环境&#xff0c;让开发人员更专注于代码的创作与优化。 在配置IntelliJ IDE…

ROS参数服务器(Param):通信模型、Hello World与拓展

参数服务器在ROS中主要用于实现不同节点之间的数据共享。 参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据。 使用场景一般存储一些机器人的固有参数&…

【2023云栖】刘一鸣:Data+AI时代大数据平台建设的思考与发布

简介&#xff1a; 本文根据2023云栖大会演讲实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;刘一鸣 | 阿里云自研大数据产品负责人 演讲主题&#xff1a;DataAI时代大数据平台应该如何建设 今天分享的主题是DataAI时代大数据平台应该如何建设&#xf…

Ubuntu系统安装Python3.6.8-Python源代码编译安装-Python环境安装

一、背景 本文将着重介绍如何在Python环境下&#xff0c;安装Python3.6.8&#xff0c;以满足在Ubuntu系统中使用Python的需求。 二、详细步骤 安装Python的方法有很多&#xff0c;本文中我们采用源代码的方式安装Python&#xff0c;首先我们需要下载Python源代码&#xff1a;源…