# My seek point is calculated correctly?

Roman Traze
Greenhorn
Posts: 14
I'm getting with this formula:

my calculation is correct?

I ask this because when I create a record with the method create () an error is occurring:

Turns out doing a loop in the test often is the Customer ID is recorded with only 7 digits. I insert this:

When you do this, often the record is recorded with the customer ID with seven digits:
Contractor Teste --- Rio de Janeiro --- Tecnology --- 2 --- \$100.00 --- 1234567

I do not know if this error can be caused because of an incorrect formula to seek point?

could be?

Roel De Nijs
Sheriff
Posts: 10613
143
Hi Roman,

Welcome to the ranch!

Let me ask you some questions:
a) "the total size of all records", i guess you mean "the total size of all fields in a record"
b) does your recordNumber start at 0 or 1?
c) in my db-schema i have first a delete flag (indicating if that record is a deleted or a valid record) and then i have the actual record. did you add that byte (or bytes) to your sizeRecords?

your formula you use looks fine to me (if of course recNo starts at 1): dataOffset + (recNo - 1) * recordLength

Roman Traze
Greenhorn
Posts: 14
Roel De Nijs wrote:Hi Roman,

Welcome to the ranch!

Let me ask you some questions:
a) "the total size of all records", i guess you mean "the total size of all fields in a record"
b) does your recordNumber start at 0 or 1?
c) in my db-schema i have first a delete flag (indicating if that record is a deleted or a valid record) and then i have the actual record. did you add that byte (or bytes) to your sizeRecords?

your formula you use looks fine to me (if of course recNo starts at 1): dataOffset + (recNo - 1) * recordLength

a) sorry, you are right, the total size of all fields in a record

b) my recordNumber start on 1

c) I'm using for checking the registry ( VALID_FLAG = 0; or INVALID_FLAG = 0xFF;)

the problem is that I do debug, but I can not find the error which he writes only seven digits in the customer ID.
I often run and is NOT a problem, it works perfect.
The behavior is random.

Roel De Nijs
Sheriff
Posts: 10613
143
random behavior is idd a big problem to debug I had also a problem with reading/writing the file but i was lucky: problem appeared with each run, so the bug was found easily.

don't forget to start each run with a brand new copy of your data file so you are completely sure the data isn't already corrupted

a) what's the length of all your fields?
b) what's the size of the "deleted" flag (according to your instruction)
c) what is getSizeRecord() returning? the length of all your fields? or the length of all your fields + the size of the deleted flag?
d) if you create your record don't forget to write the "deleted"-flag also

Roman Traze
Greenhorn
Posts: 14
Roel De Nijs wrote:random behavior is idd a big problem to debug I had also a problem with reading/writing the file but i was lucky: problem appeared with each run, so the bug was found easily.

don't forget to start each run with a brand new copy of your data file so you are completely sure the data isn't already corrupted

a) what's the length of all your fields?
b) what's the size of the "deleted" flag (according to your instruction)
c) what is getSizeRecord() returning? the length of all your fields? or the length of all your fields + the size of the deleted flag?
d) if you create your record don't forget to write the "deleted"-flag also

my instruction says : 1 byte "deleted" flag. 0 implies valid record, 0xFF implies deleted record
getSizeRecord() returning == 183 and the length of all my fields (not include delete flag)

if you create your record don't forget to write the "deleted"-flag also

I do not understand your statement, in fact when I create a record, I write a "valid" flag, look:

I did something wrong in code?

Roel De Nijs
Sheriff
Posts: 10613
143

my calculation is correct?

I ask this because when I create a record with the method create () an error is occurring:

you don't use the calculateSeekPoint-method in your create-method, because you use seek(getFile().length());

getSizeRecord() returning == 183 and the length of all my fields (not include delete flag)

if it returns the length of all my fields, your calculate method is wrong, it should be

because the length of a record = length of all your fields + the deleted/valid flag

Roman Traze
Greenhorn
Posts: 14
Roel De Nijs wrote:

my calculation is correct?

I ask this because when I create a record with the method create () an error is occurring:

you don't use the calculateSeekPoint-method in your create-method, because you use seek(getFile().length());

getSizeRecord() returning == 183 and the length of all my fields (not include delete flag)

if it returns the length of all my fields, your calculate method is wrong, it should be

because the length of a record = length of all your fields + the deleted/valid flag

you are correct, I do not use this method calculateSeekPoint() for create, I use it seek(getFile().length().

I do not need to use:

the method of calculating the size of the records, I start with 1, look:

this method I set each field in the column and its size, all are correct I have checked.

In fact the exception that I reported above java.io.EOFException , occurs during the read() method and not on create().

Now I'm just testing the method create, and yes still entering only seven digits, but always random.

My instructions see:
Start of file
4 byte numeric, magic cookie value. Identifies this as a data file
4 byte numeric, total overall length in bytes of each record
2 byte numeric, number of fields in each record

and I include this:

this is working correctly, listing all records perfect.

Frankly, I do not know where more can be the error.

Alecsandru Cocarla
Ranch Hand
Posts: 158
How do you know your record is incomplete? I mean, how do you read it from the database?

Try writing only one record and see if the record is ok. (check it with a byte editor like HxD).
Write another one and check if the previous record is still ok (maybe you're overwriting the last digit?).
If it's still ok, write new records until you see the error happening, maybe you'll find out what's going wrong (do a debugging session in you IDE).
If the byte editor says everything is ok, maybe the error is in your readRecord functionality.

Roel De Nijs
Sheriff
Posts: 10613
143