Java 在文件中存储数据库数据?

Java 在文件中存储数据库数据?,java,database,file,Java,Database,File,我目前正在用java编写一个学校项目,我正在编写一个数据库应用程序。类似于MySQL监视器,您可以在其中键入查询并获取结果/任何内容 在我以前编写的应用程序中,我使用数据库来存储数据,如用户配置文件、设置等。现在,显然,我不能使用数据库来存储这个学校项目生成的数据,否则有什么意义 我正在考虑将数据存储在文件中,但这是我现在唯一的想法,我有点累了。。老实说,我不想一开始就敲打代码,然后我就发现了更好的方法 因此,如果有人知道如何存储数据(比如CSV?),或者对数据库应用程序如何在内部工作有一定的了

我目前正在用java编写一个学校项目,我正在编写一个数据库应用程序。类似于MySQL监视器,您可以在其中键入查询并获取结果/任何内容

在我以前编写的应用程序中,我使用数据库来存储数据,如用户配置文件、设置等。现在,显然,我不能使用数据库来存储这个学校项目生成的数据,否则有什么意义

我正在考虑将数据存储在文件中,但这是我现在唯一的想法,我有点累了。。老实说,我不想一开始就敲打代码,然后我就发现了更好的方法

因此,如果有人知道如何存储数据(比如CSV?),或者对数据库应用程序如何在内部工作有一定的了解,您能告诉我们一些信息吗

--
编辑:更清楚地说,我不能使用数据库引擎来存储数据,换句话说,我正在编写一个简单的数据库引擎。Galwegian、jkramer和Joe Skora提出的想法正是我想要的。

我想你可以使用xml文件做一个非常简单的原则证明“数据库”应用程序,也许可以使用xpath来查询它


与数据库相比将是非常缓慢的(取决于文件大小和硬件当然),但会起作用。

如果您使用的是C++,您可以考虑编写一个简单的LINQ到XML类型的ORM。

< P>可以使用一个序列化格式,比如YAML,并存储哈希数组,其中,每个哈希是一个表记录,每个哈希中的键是列名。然后,您可以将序列化文件加载到内存中,处理数组和散列,然后将所有内容存储回内存


我希望这就是你的意思。

你可能想要的是使用are。一旦有了一组记录字段,就可以将它们作为块写入磁盘。您可以在内存中的磁盘上单独保留索引,并随时直接访问任何记录。希望这能给你足够的时间开始工作。

我不确定我是否理解你的要求,但对你来说“不起作用”(尽管它仍然是一个数据库引擎,这是你可能首先要避免的,所以我不太确定)

您不能使用基于文件的数据库来存储您的用户设置等吗。?
这样,您就有了一个熟悉的数据接口,并能够将其存储在文件系统中

当然,您可以使用文件系统创建自己的数据库,因为实际的数据库就是这样实现的。例如,您可以决定将数据存储在固定长度或可变长度的原始数据文件中,然后创建一个单独的索引文件,其中包含指向另一个文件的文件指针,以便根据要存储在索引文件中的索引信息的类型对任何查询进行快速索引访问

是的,请看创建2个文件-1个用于存储数据,另一个用于将文件指针存储到该文件中,该文件由您希望提供快速索引访问的任何索引设置


祝你好运-我打赌你会在这个项目中学到很多关于数据库建设的知识

StackOverflow不是用来做作业的

话虽如此,这里有一个快速而肮脏的方法来创建一个高效、灵活的数据库

  • 设计一个很好的映射(HashMap、TreeMap,随便什么)来完成你想做的事情。 通常,您会有一个包含数据的“Record”类,以及许多“Index”对象,这些对象实际上是
    Map
    集合。(为什么要列出记录?在不太有选择性的字段上建立索引怎么样?)

  • 编写一个类将集合序列化为文件

  • 编写一个类来从文件反序列化集合

  • 围绕内存中的Java对象编写查询处理或其他内容

  • 内存数据库

    不喜欢Java的序列化吗?获取JSON或YAML库,并使用这些格式进行序列化和反序列化


    “但内存数据库无法扩展,”纯粹主义者抱怨道。和SQLite谈谈,不是我。我的电脑有2GB内存,这是一个相当大的数据库。SQLite可以工作。

    我将创建一个使用二进制表的数据库,每个表一个文件。看看非常方便的DataInputStream和DataOutputStream类。使用它们,您可以轻松地从二进制文件到Java类型来回切换

    我将为表定义一个简单的结构:一个描述表内容的标题,后跟行数据。在标题中定义表中的每一列—其名称、数据类型和最大长度。保持简单。以DataInput/OutputStream的功能为指导,仅处理少数数据类型。使用简单的文件命名约定将表名与文件名关联

    创建一个测试表,其中包含足够的列,以至少包含每种数据类型中的一种。然后,通过处理输入文件或通过控制台输入,创建一种用数据填充表的简单方法。最后,创建一种向控制台显示整个表内容的简单方法

    之后,您可以添加一个非常简单的类似SQL的方言版本来执行查询。下面是一个简单的查询:

    SELECT * FROM EMPLOYEES
    
    …需要打开包含EMPLOYEES表的文件(通过表文件名命名约定),解析标题,读取整个表,返回内容

    工作完成后,添加其他功能(例如处理简单WHERE子句、仅返回符合特定条件的行(或行中的列)将非常简单

    如果没有必要使用这种通用解决方案(任意数量的表、任意数量的列、实际的查询语言等),您可以简单地向API添加方法,如:

    Employee[] result = EmployeeDataManager.select("LASTNAME", "Smith");
    

    …或者类似的东西。如果您按照我的建议慢慢构建,将功能划分为几个小任务,很快您就可以实现所需的所有功能。

    在da中以块存储记录的基础知识