📄 recordmanager.java
字号:
}
for(int q=0;q<cmd.attnumber;q++)
System.out.print(entry[q]+"\t");
System.out.print("\n");
}
}
current = current + length;
}
}
System.out.println("查询结果个数为: "+count);
}
public boolean recordright(String key1, String key2, int atttype, int op){
Keyword K1=null;
Keyword K2=null;
if(atttype == 1){
K1 = new Keyword(Integer.parseInt(key1));
K2 = new Keyword(Integer.parseInt(key2));
}
else if(atttype == 2){
K1 = new Keyword(Float.parseFloat(key1));
K2 = new Keyword(Float.parseFloat(key2));
}
else{
K1 = new Keyword(key1);
K2 = new Keyword(key2);
}
switch(op){
case 1:{
return K1.compareTo(K2)==0;
}
case 2:{
return K1.compareTo(K2)!=0;
}
case 3:{
return K1.compareTo(K2)<0;
}
case 4:{
return K1.compareTo(K2)>0;
}
case 5:{
return K1.compareTo(K2)<=0;
}
case 6:{
return K1.compareTo(K2)>=0;
}
default:
return false;
}
}
public void getaddressRecord(Interpreter cmd, long recordpos){
buffer.getBlock(new File(cmd.table), (recordpos-1024)/4096,1024);
Block selectb = buffer.list.getFirst();
int offset = (int)((recordpos-1024)%4096);
selectb.seek(offset);
if(selectb.readBoolean()){
for(int m=0; m<cmd.attnumber ;m++){
if(cmd.atttype[m]==1){
selectb.read();
System.out.print(selectb.readInt());
System.out.print("\t");
}
else if(cmd.atttype[m]==2){
selectb.read();
System.out.print(selectb.readFloat());
System.out.print("\t");
}
else if(cmd.atttype[m]==3){
int len = selectb.read()*2;
byte[] name = new byte[len];
selectb.read(name,cmd.attlength[m]);
try{
System.out.print(new String(name, "UTF16"));
System.out.print("\t");
}catch(Exception e){
System.out.println("RecordManager + getAdressRecord");
}
}
}
}
System.out.print("\n");
}
public LinkedList<Long> getAddressB(String index, String key1, String key2, int atttype, int type1, int type2){
Keyword K1=null;
Keyword K2=null;
if(atttype == 1){
K1 = new Keyword(Integer.parseInt(key1));
K2 = new Keyword(Integer.parseInt(key2));
}
else if(atttype == 2){
K1 = new Keyword(Float.parseFloat(key1));
K2 = new Keyword(Float.parseFloat(key2));
}
else{
K1 = new Keyword(key1);
K2 = new Keyword(key2);
}
if(type1 == 3&&type2 == 4){
if(K1.compareTo(K2)<=0)
return new LinkedList<Long>();
return indexmanager.getAddress(index, K1, K2);
}
else if(type1 == 4&&type2 == 3){
if(K1.compareTo(K2)>=0)
return new LinkedList<Long>();
return indexmanager.getAddress(index, K1, K2);
}
else if(type1 == 3&&type2 == 6){
if(K1.compareTo(K2)<=0)
return new LinkedList<Long>();
LinkedList<Long> list = indexmanager.getAddress(index, K1, K2);
long pos = indexmanager.getAddress(index, K2);
if(pos>=0)
list.addFirst(new Long(pos));
return list;
}
else if(type1 == 6&&type2 == 3){
if(K1.compareTo(K2)>=0)
return new LinkedList<Long>();
LinkedList<Long> list = indexmanager.getAddress(index, K1, K2);
long pos = indexmanager.getAddress(index, K1);
if(pos>=0)
list.addFirst(new Long(pos));
return list;
}
else if(type1 == 5&&type2 == 6){
if(K1.compareTo(K2)<0)
return new LinkedList<Long>();
LinkedList<Long> list = indexmanager.getAddress(index, K1, K2);
if(K1.compareTo(K2)==0)
return list;
long pos = indexmanager.getAddress(index, K1);
long pos2 = indexmanager.getAddress(index, K2);
if(pos2>=0)
list.addFirst(new Long(pos2));
if(pos>=0)
list.add(new Long(pos));
return list;
}
else if(type1 == 6&&type2 == 5){
if(K1.compareTo(K2)>0)
return new LinkedList<Long>();
LinkedList<Long> list = indexmanager.getAddress(index, K1, K2);
if(K1.compareTo(K2)==0)
return list;
long pos = indexmanager.getAddress(index, K1);
long pos2 = indexmanager.getAddress(index, K2);
if(pos>=0)
list.addFirst(new Long(pos));
if(pos2>=0)
list.add(new Long(pos2));
return list;
}
else if(type1 == 5&&type2 == 4){
if(K1.compareTo(K2)<=0)
return new LinkedList<Long>();
LinkedList<Long> list = indexmanager.getAddress(index, K1, K2);
long pos = indexmanager.getAddress(index, K1);
if(pos>=0)
list.add(new Long(pos));
return list;
}
else if(type1 == 4&&type2 == 5){
if(K1.compareTo(K2)>=0)
return new LinkedList<Long>();
LinkedList<Long> list = indexmanager.getAddress(index, K1, K2);
long pos = indexmanager.getAddress(index, K2);
if(pos>=0)
list.add(new Long(pos));
return list;
}
else{
return new LinkedList<Long>();
}
}
public LinkedList<Long> getAddress(String index, String key, int atttype, int type){
LinkedList<Long> list;
Keyword K=null;
if(atttype == 1)
K = new Keyword(Integer.parseInt(key));
else if(atttype == 2)
K = new Keyword(Float.parseFloat(key));
else
K = new Keyword(key);
if(type == 3){
list = indexmanager.getlessAddress(index, K);
}
else if(type == 4){
list = indexmanager.getlargeAddress(index, K);
}
else if(type == 5){
list = indexmanager.getlessAddress(index, K);
long equ = indexmanager.getAddress(index, K);
if(equ >= 0)
list.add(new Long(equ));
}
else if(type == 6){
list = indexmanager.getlargeAddress(index, K);
long equ = indexmanager.getAddress(index, K);
if(equ >=0)
list.addFirst(new Long(equ));
}
else{
list = new LinkedList<Long>();
}
return list;
}
public boolean insertRecord(Interpreter cmd){
long total=0; //总个多少记录
long blocknumber=0;//总共多少个块
int num=0;//每个块有多少记录
int length=0; //每条记录的长度
long freepos=0;
try{
RandomAccessFile recordfile = new RandomAccessFile(new File(cmd.table),"r");
total = recordfile.readLong();
blocknumber = recordfile.readLong();
length = recordfile.readInt();
num = recordfile.readInt();
freepos = recordfile.readLong();
recordfile.close();
}catch (Exception e){
System.out.println("RecordManager + insertRecord + 1");
}
if(blocknumber*num == total){
byte[] newbyte = new byte[4096];
Block newb = new Block(cmd.table, blocknumber, 1024, newbyte);
newb.seek(0);
newb.write(1);
for(int i=0; i<cmd.attnumber ;i++){
if(cmd.attindex[i]!=null){
if(cmd.atttype[i]==1){
if(!indexmanager.insertIndex(cmd.attindex[i],new Keyword(Integer.parseInt(cmd.op2[i])),freepos)){
for(int j=0; j<i; j++){
if(cmd.attindex[j]!=null)
indexmanager.delete(cmd.attindex[j], cmd.op2[j], 1);
}
return false;
}
}
else if(cmd.atttype[i]==2){
if(!indexmanager.insertIndex(cmd.attindex[i],new Keyword(Float.parseFloat(cmd.op2[i])),freepos)){
for(int j=0; j<i; j++){
if(cmd.attindex[j]!=null)
indexmanager.delete(cmd.attindex[j], cmd.op2[j], 2);
}
return false;
}
}
else if(cmd.atttype[i]==3){
if(!indexmanager.insertIndex(cmd.attindex[i],new Keyword(cmd.op2[i]),freepos)){
for(int j=0; j<i; j++){
if(cmd.attindex[j]!=null)
indexmanager.delete(cmd.attindex[j], cmd.op2[j], 3);
}
return false;
}
}
}
}
for(int i=0; i<cmd.attnumber ;i++){
if(cmd.attindex[i]!=null){
if(cmd.atttype[i]==1){
newb.write(4);
newb.writeInt(Integer.parseInt(cmd.op2[i]));
}
else if(cmd.atttype[i]==2){
newb.write(4);
newb.writeFloat(Float.parseFloat(cmd.op2[i]));
}
else if(cmd.atttype[i]==3){
newb.write(cmd.op2[i].length());
newb.writeChars(cmd.op2[i],cmd.attlength[i]);
}
}
else{
if(cmd.atttype[i]==1){
newb.write(4);
newb.writeInt(Integer.parseInt(cmd.op2[i]));
}
else if(cmd.atttype[i]==2){
newb.write(4);
newb.writeFloat(Float.parseFloat(cmd.op2[i]));
}
else if(cmd.atttype[i]==3){
newb.write(cmd.op2[i].length());
newb.writeChars(cmd.op2[i],cmd.attlength[i]);
}
}
}
buffer.list.addFirst(newb);
if(num == 1)
freepos = freepos + 4096;
else
freepos = 4096*blocknumber+ 1024 +length;
total++;
blocknumber++;
try{
RandomAccessFile recordfile = new RandomAccessFile(new File(cmd.table),"rw");
recordfile.writeLong(total);
recordfile.writeLong(blocknumber);
recordfile.seek(24);
recordfile.writeLong(freepos);
recordfile.close();
}catch (Exception e){
System.out.println("RecordManager + insertRecord + 2");
}
}
else{
buffer.getBlock(new File(cmd.table), blocknumber-1, 1024);
Block newb = buffer.list.getFirst();
newb.seek((int)(freepos-(blocknumber-1)*4096-1024));
newb.write(1);
for(int i=0; i<cmd.attnumber ;i++){
if(cmd.attindex[i]!=null){
if(cmd.atttype[i]==1){
if(!indexmanager.insertIndex(cmd.attindex[i],new Keyword(Integer.parseInt(cmd.op2[i])),freepos)){
for(int j=0; j<i; j++){
if(cmd.attindex[j]!=null)
indexmanager.delete(cmd.attindex[j], cmd.op2[j], 1);
}
return false;
}
}
else if(cmd.atttype[i]==2){
if(!indexmanager.insertIndex(cmd.attindex[i],new Keyword(Float.parseFloat(cmd.op2[i])),freepos)){
for(int j=0; j<i; j++){
if(cmd.attindex[j]!=null)
indexmanager.delete(cmd.attindex[j], cmd.op2[j], 2);
}
return false;
}
}
else if(cmd.atttype[i]==3){
if(!indexmanager.insertIndex(cmd.attindex[i],new Keyword(cmd.op2[i]),freepos)){
for(int j=0; j<i; j++){
if(cmd.attindex[j]!=null)
indexmanager.delete(cmd.attindex[j], cmd.op2[j], 3);
}
return false;
}
}
}
}
for(int i=0; i<cmd.attnumber ;i++){
if(cmd.attindex[i]!=null){
if(cmd.atttype[i]==1){
newb.write(4);
newb.writeInt(Integer.parseInt(cmd.op2[i]));
}
else if(cmd.atttype[i]==2){
newb.write(4);
newb.writeFloat(Float.parseFloat(cmd.op2[i]));
}
else if(cmd.atttype[i]==3){
newb.write(cmd.op2[i].length());
newb.writeChars(cmd.op2[i],cmd.attlength[i]);
}
}
else{
if(cmd.atttype[i]==1){
newb.write(4);
newb.writeInt(Integer.parseInt(cmd.op2[i]));
}
else if(cmd.atttype[i]==2){
newb.write(4);
newb.writeFloat(Float.parseFloat(cmd.op2[i]));
}
else if(cmd.atttype[i]==3){
newb.write(cmd.op2[i].length());
newb.writeChars(cmd.op2[i],cmd.attlength[i]);
}
}
}
total++;
if(blocknumber*num == total)
freepos = blocknumber*4096 + 1024;
else
freepos = freepos + length;
try{
RandomAccessFile recordfile = new RandomAccessFile(new File(cmd.table),"rw");
recordfile.writeLong(total);
recordfile.writeLong(blocknumber);
recordfile.seek(24);
recordfile.writeLong(freepos);
recordfile.close();
}catch (Exception e){
System.out.println("RecordManager + insertRecord + 3");
return false;
}
}
return true;
}
public int deleteRecord(Interpreter cmd){
long total=0; //总个多少记录
long blocknumber=0;//总共多少个块
int num=0;//每个块有多少记录
int length=0; //每条记录的长度
long freepos=0;
int current=0;
long count = 0;//查询的结果数
try{
RandomAccessFile recordfile = new RandomAccessFile(new File(cmd.table),"r");
total = recordfile.readLong();
blocknumber = recordfile.readLong();
length = recordfile.readInt();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -