📄 table.java
字号:
package org.kdb.struct;
import java.util.List;
import java.util.ArrayList;
import java.io.RandomAccessFile;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* Created by IntelliJ IDEA.
* Date: 2007-11-17
* Time: 14:28:24
*/
public class Table extends BaseTableInfo {
public Database getDatabase() {
return database;
}
public void setDatabase(Database database) {
this.database = database;
if (file == null) {
file = new File(new File(new File(new File(Constant.DEFALUT_DATABASE_FOLDER, this.database.getDatabaseName()), Constant.DEFAULT_USER_TABLE_FOLDER), this.getTableName()), Constant.DEFAULT_TABLE);
try {
tableAccess = new RandomAccessFile(file, "rw");
if (tableAccess.length() == 0) {
tableAccess.writeInt(0);
tableAccess.writeInt(this.getTotalFieldCount());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private List<BaseField> baseFields = new ArrayList<BaseField>(20);
private int totalFieldCount = 0;//用于表示存储一个列对象一共需要多大长度
private Database database = null;
private File file = null;
private RandomAccessFile tableAccess = null;
public Table() {
}
public void addRecord(Object[] obj) {
try {
tableAccess.seek(0);
int count = tableAccess.readInt();
int totalCount = tableAccess.readInt();
int pos = Constant.DEFAULT_TABLE_HEADER_SIZE + count * totalCount;
tableAccess.seek(pos);
int size = 0;
for (BaseField field : baseFields) {
switch (field.getType().getIndex()) {
case 0:
tableAccess.writeInt(((Integer) obj[size++]).intValue());
continue;
case 1:
byte[] b1 = new byte[field.getFieldLength()];
byte[] b = ((String) obj[size++]).getBytes();
System.arraycopy(b,0,b1,0,b.length);
tableAccess.write(b1);
// System.out.println(0);
// System.out.println(tableAccess.getFilePointer());
// tableAccess.skipBytes(field.getFieldLength() - b.length);
// System.out.println(tableAccess.getFilePointer());
continue;
default:
tableAccess.writeLong(((Long) obj[size++]).longValue());
}
}
tableAccess.seek(0);
tableAccess.writeInt(count+1);
} catch (IOException e) {
e.printStackTrace();
}
}
public List<Object[]> getRecords(){
List<Object[]> records = new ArrayList<Object[]>(20);
try {
tableAccess.seek(0);
int count = tableAccess.readInt();
int pos = Constant.DEFAULT_TABLE_HEADER_SIZE;
tableAccess.seek(pos);
for(int i =0;i<count;i++){
Object[] obj = new Object[baseFields.size()];
int baseCount =0;
for (BaseField field : baseFields) {
switch (field.getType().getIndex()) {
case 0:
int value =tableAccess.readInt();
obj[baseCount++] = value;
continue;
case 1:
byte[] b = new byte[field.getFieldLength()];
tableAccess.read(b);
obj[baseCount++] = new String(b);
continue;
default:
long v2 =tableAccess.readLong();
obj[baseCount++] = v2;
}
}
records.add(obj);
}
} catch (IOException e) {
e.printStackTrace();
}
return records;
}
public int getTotalFieldCount() {
return totalFieldCount;
}
public void setTotalFieldCount(int totalFieldCount) {
this.totalFieldCount = totalFieldCount;
}
public List<BaseField> getBaseFields() {
return baseFields;
}
public void setBaseFields(List<BaseField> baseFields) {
this.baseFields = baseFields;
}
public int addFiled(BaseField field) {
baseFields.add(field);
return baseFields.size();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -