igurbev.net


Съответствие на типовете при Java и MySQL


Типовете на данните в MySql и Java не са еднакви и необходимо известно нагаждане, за да се прехвърлят данни между база, която използва MySql типове на данните и приложението използващо специфичните за Джава типове. Нужно е да се осигури съответствието от страна на Dжава към общите за MySql типове. Трябва да се убедим, че разполагаме с подходящ тип информация и тогава ще е възможно съхраняването й и повторното й използване. Няма специално необходимост Джава типовете да съответстват изцяло на тези в MySql. Например типа String в Джава не е отговаря директно на CHAR в MySql, но дава достатъчно информация за типа, за да може да представя успешно CHAR, VARCHAR или LONGVARCHAR.

Следващата таблица представя подразбиращото се съответствие между типовете в Java MySQL.

MySQL Type

Java Type

CHAR

String

VARCHAR

String

LONGVARCHAR

String

NUMERIC

java.math.BigDecimal

DECIMAL

java.math.BigDecimal

BIT

boolean

TINYINT

byte

SMALLINT

short

INTEGER

int

BIGINT

long

REAL

float

FLOAT

double

DOUBLE

double

BINARY

byte []

VARBINARY

byte []

LONGVARBINARY

byte []

DATE

java.sql.Date

TIME

java.sql.Time

TIMESTAMP

java.sql.Tiimestamp



CHAR, VARCHAR и LONGVARCHAR

Типовете CHAR, VARCHAR и LONGVARCHAR в MySql са близки. CHAR представлява малък и с определена дължина низ от символи. При VARCHAR тази дължина може да се променя, а LONGVARCHAR се отнася към символен низ в голяма дължина. За java програмистите не е нужно да разграничават тези три типа MYSql типове и могат да ги представят като идентични. Те могат да бъдат пригодени към използваните в Джава String или char[]. String изглежда е по-подходящия тип за традиционна употреба. Самият клас String предоставя метод до трансформация на Stirng в char[] и обратно.

Методът ResultSet.getString създава и връща нов String. Той е подходящ за пиемане на стойности от полетата CHAR, VARCHAR и LONGVARCHAR. Възможно е обаче, LONGVARCHAR да бъде използван за съхраняването на много-мегабайтов String. В този случай ще бъде нужен специален способ за възприемането на стойността му. За тази цел интерфейса ResultSet предлага два метода, като и при двата стойността на LONGVARCHAR може да бъде прихваната като входен Java поток, от който е възможно в последствие да бъдат прочетени данни с произволен размер. Тези методи са getAsciiStream и getCharacterStream, които предоставят съдържанието на колоната LONGVARCHAR като поток от ASCII или Unicode символи.

NUMERIC и DECIMAL

Типовете NUMERIC и DECIMAL са подобни. И двата представят числа с фиксирана точка, като и при двата прецизността е посочена. Най-близката алтернатива предложена от Джава на този MySql тип е java.math.BigDecimal. Този Джава тип осигурява математически операции, за да може типът BigDecimal да бъде добавян, изваждан, умножаван или делен с другите BigDecimal типове, с Integer и Float.

Възможен е също достъпът до този MySql тип като към String или char[]. Тогава в Джава може да бъде използван метода getString(), за да се получи резултата от NUMERICAL и DECIMAL.

BINARY, VARBINARY и LONGVARBINARY

Това са отново подобно типове MySql данни. BINARY представлява малка, с фиксирана дължина бинарна стойност, VARBINARY - такава с променлива дължина докато при LONGVARBINARY стойността е с голяма дължина. При Джава няма нужда да бъдат разграничавани тези типове и всички могат да бъдат представени с масив от байтове. Възможно е да се чете и записва SQL стойност коректно бе да е известен точния BINARY тип. Методът ResultSet.getBytes се използва за взимане на стойностите от DECIMAL и NUMERICAL. Също така, когато типовете LONGVARCHAR и LONGVARBINARY са използвани за съхранение на големи по обем стойности, методът getBinaryStream се препоръчва.

BIT

Типът BIT в MySQL представлява еднобитова стойност, която може да има стойност 1 или 0. Съответстващия тип в Джава е boolean.

TINYINT, SMALLINT, INTEGER и BIGINT

Типът TINYINT в MySQL представлява 8-битова числова стойност между 0 и 255, която може да бъде означена или не означена. SMALLINT представлява 16-битова числова стойност между -32768 и 32767. INTEGER е 32 битова числова стойност между -2147483648 и 2147483647. BIGINT представлява 64-битова числова стойност между -9223372036854775808 и 9223372036854775807. Тези типове в MySQL съответстват в Джава на byte, short, int и long.

REAL, FLOAT и DOUBLE

Типът REAL в MySQL представлява число с един знак след запетайката, докато FLOAT и DOUBLE се отнасят до такива с два знака. Съответствието на REAL в Джава е float, а на FLOAT и DOUBLE е double.

DATE, TIME и TIMESTAMP

Тези три типа в MySql обозначават време. Типът DATА представлява дата, която е сътавена от ден, месец и година, стойностите на TIME са час, минута и секунда, а на TIMESTAMP - DATE + TIME + стойност в наносекунди. Стандартния клас java.util.Date в Джава осигурява информация за времето, но няма пълно съответствие в MySql типовете, защото липсва информация за наносекундите.

Поради тази причина са дефинирани 3 подкласа на java.util.Date. Това са:

  • java.sql.Date за SQL DATE информация.

  • java.sql.Time за SQL TIME информация.

  • java.sql.Timestamp за SQL TIMESTAMP информация.






коментари
    добавен от Onichka на July 12, 2008, 2:03 pm
 Много добре е написано. Преди два дена търсех точно такава информация, жалко, че не я открих навреме!





добави коментар
 име: