将对象存储在数据库java中

时间:2013-11-20 18:57:33

标签: java database serialization storage

所以我正在开发一个与基于文件的数据库接口的程序。大多数情况下,我正在试图弄清楚如何使用它,以便我可以创建对象并将其信息存储在数据库中,以便我可以在以后提取数据。

IE Object Taylor
Name = Taylor
Age = 20
School = Whatever

这样我可以在查询时重新启动并调用该信息。

这是我想要存储的对象的示例。我可能做错了这部分。     包com.catalyse.db;

public class Taylor implements java.io.Serializable
{
    public String name = "Taylor M May";
    public int age = 20;
    public String school = "UC Boulder";
}

我正在使用的数据库结构基于RandomAccessFile而我没有成功,我只想弄清楚如何实现它。

package com.catalyse.db;

import java.util.*;
import java.util.Scanner;


/**
 * Simple test class for the RecordsFile example. To run the test, 
 * set you CLASSPATH and then type "java hamner.dbtest.TestRecords"
 */
public class Run {

  static void log(String s) {
    System.out.println(s);
  }

  private static String name()
  {
      Scanner name = new Scanner(System.in);
      String name1 = name.next();
      return name1;
  }

  public static void main (String[] args) throws Exception {

    System.out.println(new Date()); 

    Scanner SC = new Scanner(System.in);

    log("What would you like to name the database?");

    String filename = SC.next();

    log("creating records file...");

    RecordsFile recordsFile = new RecordsFile(filename+".records", 64);

    log("adding a record...");
    RecordWriter rw = new RecordWriter("foo.username");
    rw.writeObject(new Taylor());
    recordsFile.insertRecord(rw);

    log("reading record...");
    RecordReader rr = recordsFile.readRecord("foo.username");
    Taylor name = (Taylor)rr.readObject();
    System.out.println("\tlast access was at: " + name.toString());

    log("test completed.");
  }
}

以下是我从中得到的回复,

Wed Nov 20 11:56:04 MST 2013
What would you like to name the database?
save3
creating records file...
adding a record...
reading record...
    last access was at: com.catalyse.db.Taylor@50aed564
test completed.

我的问题是我希望它返回有关该类的信息,而不仅仅是它在数据库中的名称和位置。

2 个答案:

答案 0 :(得分:3)

您需要覆盖toString方法。

public String toString()  
{  

   StringBuilder sb = new StringBuilder();  
   sb.append("Name: ");  
   sb.append(this.name);  

   //rest of fields 
   return sb.toString();
}  

为清楚起见,您不会在数据库中返回其位置。您将返回对象hashValue +类名。

答案 1 :(得分:0)

此时

Taylor name = (Taylor)rr.readObject();

您可以在对象中访问您喜欢的任何信息,例如

Taylor name = (Taylor)rr.readObject();
System.out.println(name.age + ", " + name.name + ", " + name.school);

或者,只需添加

即可
public String toString() 
{
   return name + ", " + age + ", " + school;
}
泰勒的方法,然后像这样输出

Taylor name = (Taylor)rr.readObject();
System.out.println(name);

现在,关于......

System.out.println("\tlast access was at: " + name.toString());

name.toString()并不是真正需要的。如果将对象附加到String,则它会自动调用该对象toString()方法来获取值。

最后,我想指出,通常我们不会通过访问它们来访问名称,学校和年龄等对象成员。我们通常会将它们设为私有成员,然后添加方法来获取和设置它们,以便我们控制并跟踪它们的操作方式。