2026/1/28 13:48:45
网站建设
项目流程
珠海网站网站建设,小米4路由器可以做网站嘛,新主题wordpress,单位微信公众号怎么创建说明#xff1a;
本文由人机协作生成#xff0c;作者提供主要思路#xff0c;借助 AI 通过多轮迭代逐步优化生成。
核心思路#xff1a;
体验“在AI辅助下#xff0c;从零创建 Maven 项目#xff0c;引入一个第三方库#xff0c;并跑通一个核心功能”的全流程。
原始…说明本文由人机协作生成作者提供主要思路借助 AI 通过多轮迭代逐步优化生成。核心思路体验“在AI辅助下从零创建 Maven 项目引入一个第三方库并跑通一个核心功能”的全流程。原始项目90分钟极简版核心目标技术栈极简版功能要求极简版学生管理系统连接数据库执行一次插入和查询仅保留 SQLite JDBC1. 创建数据库和一张学生表。2. 插入一条学生数据。3. 查询并打印所有学生。可通过AI生成测试数据。Maven 项目的优势Maven 是 Java 项目的构建 依赖管理工具对比以往手动建项目、手动下载 jar 包的方式Maven 项目为编程提供了太多便利性。只需在 pom.xml 里写几行依赖配置Maven 自动就会主动完成从中央仓库下载对应版本的 jar 包自动下载 “依赖的依赖”比如 sqlite-jdbc 依赖的 slf4j-api所有依赖统一存在本地仓库其他项目可复用不用重复下载。而且还可以统一编译和运行环境避免版本冲突。比如 pom.xml 里配置了 JDK 21 的编译规则properties maven.compiler.source21/maven.compiler.source maven.compiler.target21/maven.compiler.target /properties以及方便我们的拓展和团队的协作。SQLite 基础知识一、SQLite 的特点首先我们先来对此次项目的核心工具 -- SQLite 做一个基础认识SQLite 是一款轻量级、嵌入式、零配置的关系型数据库不用装服务器一个文件就是一个数据库适合学习、小型项目而我们常见的 MySQL 需要先开服务器适合大规模场景。多方对比特性SQLiteMySQL/PostgreSQL部署方式嵌入式无独立服务进程客户端 / 服务端需启动数据库服务配置难度零配置无需安装、无需账号密码需安装、配置端口 / 账号 / 权限数据存储单文件比如此次项目的 student.db文件多文件 / 目录存储分散在服务器适用场景本地小型应用、嵌入式设备、测试大型网站、高并发服务、企业系统二、SQLite 核心概念1. 数据库文件.db/.sqlite1项目里的 student.db 就是一个完整的 SQLite 数据库所有表、数据都存在这个文件里。2删除这个文件相当于清空整个数据库重新运行代码会自动重建空文件。2. 表Table1创建的 student 表是数据的容器类似 Excel 里的工作表2表由“字段列 数据行”组成比如 student 表的字段是 id / name / age / className。3. 字段Column和数据类型SQLite 是 “弱类型” 数据库比 MySQL 灵活常用字段类型如下类型用途项目示例INTEGER整数ID、年龄等id自增主键、ageTEXT文本字符串name、classNameREAL浮点数小数比如 score成绩BLOB二进制数据图片等新手很少用4. 主键PRIMARY KEY1主键是表中唯一标识一行数据的字段比如 id保证每条数据不重复2此次项目里所使用的 AUTOINCREMENT 是 SQLite 的自增特性插入数据时不用手动填 ID数据库会自动生成 1、2、3…三、SQLite 常用的 SQL 语法1. 表的创建CREATE TABLE-- 基础语法 CREATE TABLE IF NOT EXISTS 表名 ( 字段名1 类型 约束, 字段名2 类型 约束, ... ); -- 示例student表 CREATE TABLE IF NOT EXISTS student ( id INTEGER PRIMARY KEY AUTOINCREMENT, -- 自增主键 name TEXT NOT NULL, -- 非空姓名不能为空 age INTEGER, className TEXT );注意1IF NOT EXISTS避免重复创建表虽然运行多次代码也不会报错。2NOT NULL约束字段不能为空比如姓名必须填年龄可选。2. 数据的插入INSERT-- 基础语法自增ID不用填 INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...); -- 示例插入张三的信息 INSERT INTO student (name, age, className) VALUES (张三, 20, 网安2411);3. 数据的查询SELECT-- 查询所有字段 SELECT * FROM 表名; -- 示例查所有学生 SELECT * FROM student; -- 条件查询拓展查网安2411班的学生 SELECT * FROM student WHERE className 网安2411; -- 排序查询拓展按年龄升序排列 SELECT * FROM student ORDER BY age ASC;4. 数据的修改UPDATE拓展-- 基础语法 UPDATE 表名 SET 字段1新值 WHERE 条件; -- 示例把张三的年龄改成21 UPDATE student SET age21 WHERE name张三;5. 数据的删除DELETE拓展-- 基础语法 DELETE FROM 表名 WHERE 条件; -- 示例删除ID为1的学生 DELETE FROM student WHERE id1; -- 清空表保留表结构 DELETE FROM student;注意事项手写 ID 容易出现主键冲突的错误使用自增 ID 可以很好的规避掉这个问题。代码展示一、项目层级结构二、代码1. Main.java 文件package jmu.net; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Scanner; /** * 学生管理系统 */ public class Main { // SQLite数据库地址 private static final String DB_URL jdbc:sqlite:student.db; // 全局扫描器避免重复创建 private static Scanner scanner new Scanner(System.in); public static void main(String[] args) { // 1. 创建学生表 createStudentTable(); // 2. 控制台动态添加学生循环添加支持多次输入 addStudentByConsole(); // 3. 查询并打印所有学生 queryAllStudents(); // 关闭扫描器 scanner.close(); } /** * 创建学生表ID自增 */ private static void createStudentTable() { String createSql CREATE TABLE IF NOT EXISTS student ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER, className TEXT); try (Connection conn DriverManager.getConnection(DB_URL); Statement stmt conn.createStatement()) { stmt.execute(createSql); System.out.println(✅ 学生表创建/加载成功); } catch (SQLException e) { System.err.println(❌ 创建表失败 e.getMessage()); } } /** * 控制台动态输入学生信息并添加 */ private static void addStudentByConsole() { System.out.println(\n 开始添加学生信息 ); while (true) { // 1. 输入姓名 System.out.print(请输入学生姓名输入q退出添加); String name scanner.nextLine().trim(); // 退出条件输入q/Q if (q.equalsIgnoreCase(name)) { System.out.println(✅ 退出学生添加流程); break; } // 姓名不能为空 if (name.isEmpty()) { System.err.println(❌ 姓名不能为空请重新输入); continue; } // 2. 输入年龄处理非数字异常 int age 0; while (true) { System.out.print(请输入学生年龄); String ageStr scanner.nextLine().trim(); try { age Integer.parseInt(ageStr); if (age 0 || age 100) { System.err.println(❌ 年龄需在1-100之间请重新输入); continue; } break; // 年龄输入正确退出循环 } catch (NumberFormatException e) { System.err.println(❌ 年龄必须是数字请重新输入); } } // 3. 输入班级 System.out.print(请输入学生班级); String className scanner.nextLine().trim(); if (className.isEmpty()) { className 未填写; // 班级为空时默认值 } // 4. 插入数据 insertStudent(name, age, className); System.out.println(------------------------\n); } } /** * 插入学生数据底层方法 */ private static void insertStudent(String name, int age, String className) { String insertSql INSERT INTO student (name, age, className) VALUES (?, ?, ?); try (Connection conn DriverManager.getConnection(DB_URL); PreparedStatement pstmt conn.prepareStatement(insertSql)) { pstmt.setString(1, name); pstmt.setInt(2, age); pstmt.setString(3, className); pstmt.executeUpdate(); System.out.println(✅ 学生[ name ]添加成功); } catch (SQLException e) { System.err.println(❌ 插入数据失败 e.getMessage()); } } /** * 查询所有学生并打印 */ private static void queryAllStudents() { String querySql SELECT * FROM student; try (Connection conn DriverManager.getConnection(DB_URL); Statement stmt conn.createStatement(); ResultSet rs stmt.executeQuery(querySql)) { System.out.println(\n 所有学生信息 ); boolean hasData false; while (rs.next()) { hasData true; int id rs.getInt(id); String name rs.getString(name); int age rs.getInt(age); String className rs.getString(className); System.out.printf(ID%d姓名%s年龄%d班级%s%n, id, name, age, className); } if (!hasData) { System.out.println(暂无学生数据); } } catch (SQLException e) { System.err.println(❌ 查询数据失败 e.getMessage()); } } }2. pom.xml 文件?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdjmu.net/groupId artifactIdStudentManagement/artifactId version1.0-SNAPSHOT/version properties maven.compiler.source21/maven.compiler.source maven.compiler.target21/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding !-- 统一SLF4J版本避免冲突 -- slf4j.version1.7.36/slf4j.version /properties !-- 引入依赖 -- dependencies !-- SQLite JDBC依赖 -- dependency groupIdorg.xerial/groupId artifactIdsqlite-jdbc/artifactId version3.45.2.0/version /dependency !-- SLF4J简单实现消除日志提示 -- dependency groupIdorg.slf4j/groupId artifactIdslf4j-simple/artifactId version${slf4j.version}/version scoperuntime/scope !-- 仅运行时生效不影响编译 -- /dependency /dependencies !-- 添加编译插件 -- build plugins plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId version3.11.0/version configuration source21/source target21/target encodingUTF-8/encoding /configuration /plugin /plugins /build /project运行结果展示一、控制台输出二、student.db 文件展示学习心得其实实验做下来的最大感触就是 Maven 项目的便利性。在创建项目的时候它会自动的帮我匹配下载需要的资源包、配置文件、依赖。pom.xml 则是 Maven 项目的核心配置文件简单理解的话它是 Maven 管理项目的 “说明书”告诉 Maven 这个项目的“身份、依赖、编译规则、打包方式”等关键信息编程过程中只用在意核心功能的构建。这次实验让我切实感受到 Maven 在项目管理上的优势后续希望能进一步尝试 Maven 的多人协作模式