所以我正在开发一个与基于文件的数据库接口的程序。大多数情况下,我正在试图弄清楚如何使用它,以便我可以创建对象并将其信息存储在数据库中,以便我可以在以后提取数据。
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.
我的问题是我希望它返回有关该类的信息,而不仅仅是它在数据库中的名称和位置。
答案 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()方法来获取值。
最后,我想指出,通常我们不会通过访问它们来访问名称,学校和年龄等对象成员。我们通常会将它们设为私有成员,然后添加方法来获取和设置它们,以便我们控制并跟踪它们的操作方式。