上一篇
场景引入:
凌晨三点的宿舍里,你的课程设计突然弹窗报错——MySQL服务崩溃了!😱 交作业截止前3小时,你决定用Java控制台手搓一个轻量级数据库自救,别慌,这篇指南带你从零实现建库→建表→增删改查全流程!(最后附完整代码结构)
// 伪代码示例:我们的目标是这样的操作体验 Database myDB = new Database("SchoolDB"); myDB.createTable("Student", "id:int,name:String,age:int"); myDB.insert("Student", "1, '张三', 20"); ResultSet rs = myDB.query("SELECT * FROM Student WHERE age > 18");
关键技术栈:
HashMap<String, Table>
嵌套结构 ObjectOutputStream
序列化保存 public class Database { private String dbName; private HashMap<String, Table> tables = new HashMap<>(); public Database(String name) { this.dbName = name; System.out.println("✅ 数据库 " + name + " 创建成功!"); } }
class Table { String tableName; List<String> columns; // 存储字段名和类型 List<Record> records; // 所有数据行 public Table(String name, String schema) { // 解析"id:int,name:String"这样的字段定义 this.columns = Arrays.asList(schema.split(",")); } }
插入数据示例:
public void insert(String tableName, String values) { Table table = tables.get(tableName); String[] parts = values.split(","); if(parts.length != table.columns.size()) { System.err.println("❌ 字段数量不匹配!"); return; } table.records.add(new Record(parts)); // Record是自定义的数据行类 System.out.println("📌 插入成功,当前行数:" + table.records.size()); }
查询方法(支持WHERE简单条件):
public void query(String sql) { // 正则解析示例:SELECT * FROM Student WHERE age>18 Pattern pattern = Pattern.compile("SELECT (.*) FROM (\\w+)( WHERE (.*))?"); Matcher matcher = pattern.matcher(sql); if(matcher.find()) { String tableName = matcher.group(2); String condition = matcher.group(4); // 条件解析 // ...后续实现过滤逻辑 } }
public void saveToFile() throws IOException { try (ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(dbName + ".dat"))) { oos.writeObject(tables); } }
private Stack<HashMap<String, Table>> transactionStack = new Stack<>(); public void beginTransaction() { transactionStack.push((HashMap<String, Table>) tables.clone()); } public void rollback() { if(!transactionStack.isEmpty()) { tables = transactionStack.pop(); } }
public static void main(String[] args) { Database db = new Database("SchoolDB"); // 建表 db.createTable("Teacher", "id:int,name:String,subject:String"); // 插入数据 db.insert("Teacher", "1, '李老师', '数学'"); db.insert("Teacher", "2, '王教授', '物理'"); // 查询演示 System.out.println("🔍 查询结果:"); db.query("SELECT * FROM Teacher WHERE subject='数学'"); }
BufferedReader
逐行处理 💡 最新实践建议(2025-08):Java 21的
Record
类非常适合作为数据行的载体,可减少样板代码。
:通过这个300行左右的迷你项目,你不仅理解了数据库核心原理,还能扩展出索引、连接查询等高级功能,下次遇到数据库崩溃,你就是宿舍里最淡定的那个!🎉
(完整代码可通过本地IDE运行测试,建议从50行基础版开始迭代开发)
本文由 弘尔槐 于2025-08-03发表在【云服务器提供商】,文中图片由(弘尔槐)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/527851.html
发表评论