SQL数据类型对应的Java类型
- 格式:docx
- 大小:14.21 KB
- 文档页数:2
Java和C或C++的数据类型对照表java的数据类型和C++的对应关系(⼤部分可⽤,⼩部分需要根据实际情况调整)C++Javachar *Stringword shortbyte bytebyte[]byte[]dword intlong NativeLongVoid *Pointerlpvoid PointerlpDword IntByReferenceHWND HWNDchar[]byte[]byte *PointerJava和C的数据类型对照表Java类型C类型原⽣表现boolean int32位整数(可定制)byte char8位整数char wchar_t平台依赖short short16位整数int int32位整数long long,__int6464位整数float float32位浮点数double double64位浮点数Buffer/Pointer pointer平台依赖(32或64位指针)pointer/array32或64位指针(参数/返回值)邻接内存(结构体成员)String char*/0结束的数组(nativeencodingorjna.encoding)WString wchar_t*/0结束的数组(unicode)String[]char**/0结束的数组的数组WString[]wchar_t**/0结束的宽字符数组的数组Structure struct*/struct 指向结构体的指针(参数或返回值)(或者明确指定是结构体指针)结构体(结构体的成员) (或者明确指定是结构体)Union union等同于结构体Structure[]struct[]结构体的数组,邻接内存Callback(*fp)()Java函数指针或原⽣函数指针NativeMapped varies依赖于定义NativeLong long平台依赖(32或64位整数) PointerType pointer和Pointer相同。
sql数据库常用类型SQL数据库中有几种常用的数据类型,这些数据类型允许您在表中存储不同种类的数据。
这里列举了一些常见的SQL数据类型:1. 整数类型(Integer Types):- `INT`:用于存储整数值。
- `SMALLINT`:用于存储较小范围的整数值。
- `BIGINT`:用于存储较大范围的整数值。
2. 小数/浮点类型(Decimal/Floating-Point Types):- `DECIMAL(precision, scale)` 或`NUMERIC(precision, scale)`:用于存储精确的小数值,`precision` 表示总位数,`scale` 表示小数位数。
- `FLOAT` 或`REAL`:用于存储浮点数值,通常用于需要近似值的情况。
3. 字符类型(Character Types):- `CHAR(n)`:用于存储固定长度的字符串,最多可以存储`n` 个字符。
- `V ARCHAR(n)` 或`V ARCHAR2(n)`:用于存储可变长度的字符串,最多可以存储`n` 个字符。
- `TEXT`:用于存储大文本对象((长字符串),适合存储大段文本。
4. 日期和时间类型(Date and Time Types):- `DATE`:用于存储日期。
- `TIME`:用于存储时间。
- `DATETIME` 或`TIMESTAMP`:用于存储日期和时间。
- `INTERV AL`:用于存储时间间隔。
5. 二进制类型(Binary Types):- `BLOB`:用于存储二进制大对象,如图像、音频或视频文件等。
- `BYTEA`(PostgreSQL中):用于存储二进制数据。
6. 布尔类型(Boolean Type):- `BOOLEAN`:用于存储逻辑值(true或false)。
7. 枚举类型(Enum Types):- `ENUM`:允许您在有限的可能值列表中选择一个值。
JAVA 中SQLlite数据库BLOB数据类型的存取找了好多资料,在sqllite 在写入文件没什么难的,但是在取出blob的生成本地文件的时候存在问题,而且网上大部分都是针对手机开发的,很少有java对sqllite的介绍/*** sqllite数据库文件的存储** @return*/private static void testSqlliteFile() throws IOException {Connection conn = null;Statement sta = null;try {Class.forName("org.sqlite.JDBC");} catch (ClassNotFoundException e) {e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.}try {conn = DriverManager.getConnection("jdbc:sqlite:" + SetCustomFinal.getInstance().getFileDiskStoreFolder() + SetCustomFinal.getInstance().getFileItemStoreFolder() + "\\DBU1111111.DB", "", "");} catch (SQLException e) {e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.}try {sta = conn.createStatement();} catch (SQLException e) {e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.}//上面没什么好废话的链接sqllite的jdbc// 读取数据File Insertefile = new File("D:\\进程.chm");//读取本地文件FileInputStream fis = new FileInputStream(Insertefile);//将本地文件转为文件流byte[] bs = new byte[Integer.parseInt("" + Insertefile.length())];//sqllite 不能直接存如文件流,直接存byte【】数组。
在SQL中,常用的数据类型包括以下几种:整数类型(Integer Types):INT:常用的整数类型,表示带符号的整数。
TINYINT:范围较小的整数类型,通常用于存储布尔值或很小的整数。
SMALLINT:较小范围的整数类型。
BIGINT:较大范围的整数类型。
浮点数类型(Floating-Point Types):FLOAT(M, D):单精度浮点数,可以指定总位数(M)和小数位数(D)。
DOUBLE(M, D):双精度浮点数,可以指定总位数(M)和小数位数(D)。
DECIMAL(M, D):用于高精度的十进制数,可以指定总位数(M)和小数位数(D)。
字符串类型(String Types):CHAR(N):固定长度的字符类型,最多可以存储N 个字符。
VARCHAR(N):可变长度的字符类型,最多可以存储N 个字符。
TEXT:用于存储较大文本数据的类型。
日期和时间类型(Date and Time Types):DATE:用于存储日期,如YYYY-MM-DD。
TIME:用于存储时间,如HH:MM:SS。
DATETIME:用于存储日期和时间,如YYYY-MM-DD HH:MM:SS。
布尔类型(Boolean Type):BOOL 或BOOLEAN:用于存储布尔值,如TRUE 或FALSE。
二进制类型(Binary Types):BLOB:用于存储二进制数据,如图像或文件。
BINARY(N):固定长度的二进制数据类型,最多可以存储N 字节。
VARBINARY(N):可变长度的二进制数据类型,最多可以存储N 字节。
其他类型:ENUM:用于存储从预定义列表中选择的值。
JSON:用于存储JSON 数据。
UUID:用于存储唯一标识符。
mysql和Oracle数据类型对照MySQL与Oracle两种数据库在⼯作中,都是⽤的⽐较多的数据库,由于MySQL与Oracle在数据类型上有部分差异,在我们迁移数据库时,会遇上⼀定的⿇烦,下⾯介绍MySQL与Oracle数据库数据类型的对应关系。
⼀、常见数据类型在MySQL与Oracle数据库中的表现形式说明mysql oracle变长字符串VARCHAR[0-65535]定义长度默认按字符长度计算,如果是GBK编码的汉字将占⽤2个字节VARCHAR2[1-4000]VARCHAR是VARCHAR2的同义词定义默认按字节长度计算整数TINYINT(-128-127)SMALLINT(-32768-32767)MEDIUMINT(-8388608-8388607)INT(-2147483648-2147483647)BIGINT(-9223372036854775808-9223372036854775807)⽆专⽤类型,TINYINT可以⽤NUMBER(3,0)代替SMALLINT可以⽤NUMBER(5,0)代替MEDUIMINT可以⽤NUMBER(7,0)代替INT可以⽤NUMBER(10,0)代替BIGINT可以⽤NUMBER(20,0)代替ORACLE中有SMALLINT,INT,INTEGER类型,不过这是NUMBER(38,0)的同义词数值类型DECIMAL[1-65[,0-30]]NUMERIC是DECIMAL的同义词NUMBER 可表⽰数范围: 1*10^-130⾄1*10^126NUMBER([1-38][,-84-127])DECIMAL、NUMERIC、DEC是NUMBER的同义词浮点型FLOAT(D,M)oracle10g开始增加BINARY_FLOAT类型10g以前⽆专⽤类型,可以⽤NUMBER代替ORACLE中有FLOAT和REAL类型,不过这是NUMBER的同义词双精度浮点型DOUBLE(D,M)oracle10g开始增加BINARY_DOUBLE类型10g以前⽆专⽤类型,可以⽤NUMBER代替ORACLE中有DOUBLE PRECISION类型,不过这是NUMBER的同义词位类型BIT(1-64)⽆DATE,3字节存储,只存储⽇期,没有时间,⽀持范围是[1000-01-01]⾄[9999-12-31]TIME,3字节存储,只存储时⽇期类型TIME,3字节存储,只存储时间,没有⽇期,⽀持范围是[-838:59:59]⾄[838:59:59]DATETIME,占8字节存储,可表⽰⽇期和时间,⽀持范围是[1000-01-01 00:00:00]⾄[9999-12-31 23:59:59]TIMESTAMP,占4字节存储,可表⽰⽇期和时间,范围是[1970-01-01 00:00:00]⾄[2038-01-19 03:14:07]DATE类型7字节存储,可表⽰⽇期和时间,⽀持范围是[-4712-01-01 00:00:00]⾄[9999-12-31 23:59:59]⾼精度⽇期5.6.4以前不⽀持⼩数秒精度5.6.4开始TIME,DATETIME,TIMESTAMP⽀持,最多可以6位⼩数秒,也就是微秒级别TIMESTAMP[0-9]占⽤空间7-11个字节,当⼩数秒精度为0时与DATE类型相同,⼩数秒最⾼精度可达9位,也就是纳精度年份份,⽀持范围是[1901]⾄[2155]⽆对应类型,可以⽤NUMBER(3,0)代替定长字符串CHAR[0-255],定义长度默认按字符长度计算,最⼤保存255字符CHAR[1-2000]定义默认按字节长度计算⽆符号说明⽀持,⽤于数值类型不⽀持⼤字符串,⼀般⽤于存储⽂本⽂件或超⼤描述及备注类信息TINYTEXT 最⼤⽀持255个字节TEXT最⼤⽀持65535个字节MEDIUMTEXT最⼤⽀持16MB个字节LONGTEXT最⼤⽀持4GB字节字段不⽀持默认值⽀持(CLOB)oracle10g以前最⼤⽀持4GB个字节oracle10g开始最⼤⽀持4GB个数据块,数据块⼤⼩为2KB-32KBoracle还有⼀个LONG类型,是早期的存储⼤字符串类型,最⼤⽀持2GB字节,现已不推荐使⽤⼆进制对象,⼀般⽤于存储⽂件或图⽚数据TINYBLOB 最⼤⽀持255个字节BLOB最⼤⽀持65535个字节MEDIUMBLOB最⼤⽀持16MB个字节LONGBLOB最⼤⽀持4GB字节字段不⽀持默认值⽀持(BLOB)oracle10g以前最⼤⽀持4GB个字节oracle10g开始最⼤⽀持4G个数据块,数据块⼤⼩为2KB-32KBoracle还有⼀个LONGRAW类型,是早期的存储⼆进制类型,最⼤⽀持2GB字节,现已不推荐使⽤⼆进制信息BINARY(0-255),定长VARBINARY(0-65535),变长RAW(1-2000)枚举类型ENUM(v1,v2,v3,...),最多65535个元素不⽀持集合类型SET(v1,v2,v3,...),最多64个元素不⽀持国际化字符集类型,较少使⽤⽆,MYSQL可以对每个字段指定字符编码⽀持NCHAR(1-2000) NVARCHAR(1-4000)外部⽂件指针类型不⽀持⽀持⽂件⼤⼩最⼤4GB⽂件名称最长255字符不⽀持⽀持⾃动增长类型⽀持使⽤简单不⽀持⼀般使⽤SEQUENCE解决,⽤法与⾃增类型差别较⼤,使⽤较复杂,但能实现⾮常灵活的应⽤,包括字符⾃增主键、全局主括字符⾃增主键、全局主键等等不⽀持函数和表达式TEXT和BLOB字段类型不⽀持默认值⽀持函数和表达式⽀持,例如,把emp表的id字段顺序放在name字段后⾯:alter table emp modify column id varchar(20) after name;不⽀持,只能重建表或字段虚拟字段是⼀个逻辑字段定义,其结果值通常是⼀个表达式,并在表中存储物理值,不占⽤空间,主要⽤于简化查询逻辑。
sql中数据类型表示方法
在SQL中,数据类型用于定义不同种类的数据。
这些数据类型可以帮助我们确定如何存储、处理和操作数据。
以下是一些常见的SQL 数据类型表示方法:
1. 字符串类型(CHAR,VARCHAR,TEXT):用于存储文本数据,最常见的是VARCHAR。
VARCHAR可以存储可变长度的字符,而CHAR则存储固定长度的字符。
TEXT用于存储较长的文本数据。
2. 数值类型(INT,FLOAT,DECIMAL):用于存储数字数据。
INT 用于存储整数,FLOAT和DOUBLE用于存储小数,DECIMAL用于存储精确小数。
3. 日期/时间类型(DATE,TIME,DATETIME):用于存储日期和时间数据。
DATE用于存储日期,TIME用于存储时间,而DATETIME同时保存日期和时间。
4. 布尔类型(BOOLEAN):用于存储真/假值。
5. 二进制类型(BLOB):用于存储二进制数据,例如图像或音频文件。
以上是一些常见的SQL数据类型表示方法。
在定义列时,必须选择适当的数据类型以确保数据的正确存储和处理。
- 1 -。
SQLSERVER与C#数据类型对照表SQL SERVER类型类型说明C#类型精确数字bigint从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。
存储⼤⼩为 8 个字节。
Int64int从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。
存储⼤⼩为 4 个字节。
int 的 SQL-92 同义字为 integer。
Int32smallint从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。
存储⼤⼩为 2 个字节。
Int16tinyint从 0 到 255 的整型数据。
存储⼤⼩为 1 字节。
System.Byte bit 1 或 0 的整数数据。
Boolean decimal从 -10^38 +1 到 10^38 –1 的固定精度和⼩数位的数字数据。
System.Decimal numeric功能上等同于 decimal。
System.Decimal money货币数据值介于 -2^63 (-922,337,203,685,477.5808) 与 2^63 - 1 (+922,337,203,685,477.5807) 之间,精确到货币单位的千分之⼗。
System.Decimal smallmoney货币数据值介于 -214,748.3648 与 +214,748.3647 之间,精确到货币单位的千分之⼗。
System.Decimal近似数字float从 -1.79E + 308 到 1.79E + 308 的浮点精度数字。
System.Double real从 -3.40E + 38 到 3.40E + 38 的浮点精度数字。
System.Single时间datetime从 1753 年 1 ⽉ 1 ⽇到 9999 年 12 ⽉ 31 ⽇的⽇期和时间数据,精确到百分之三秒(或 3.33 毫秒)。
java各种数据类型的互相转换StringBuilder转化为StringString str = "abcdefghijklmnopqrs";StringBuilder stb = new StringBuilder(str);整型数组转化为字符串StringBuilder s = new StringBuilder();for(i=1;i<=n;i++) {s.append(String.valueOf(a[i]));}String str = ""+s;字符串转化为整形数组String str="123456";int[] a = new int[str.length()];for(int i=0;i<str.length();i++) {a[i] = str.charAt(i)-'0';}字符串转化为字符数组String str="123456";char[] c = str.toCharArray() ;System.out.println(c);字符数组转化为字符串char[] c = {'a','s','d','4','5',};String str = new String(c);System.out.println(str);字符数组转化为整型数组char[] c = { '1', '2', '3', '4', '5', };int[] a = new int[c.length];for (int i = 0; i < 5; i++) {a[i] = c[i] - '0';System.out.println(a[i]);}整型数组转化为字符数组int[] a = {1,2,3,4,5};char[] c = new char[a.length];for (int i = 0; i < 5; i++) {c[i] = (char) (a[i]+'0');System.out.println(c[i]);}整型数转化为字符串1.String str = Integer.toString(i);2.String s = String.valueOf(i);3.String s = "" + i;字符串转化为整型数int i = Integer.valueOf(str).intValue();java类型转换 Integer String Long Float Double Date1如何将字串 String 转换成整数 int?A. 有两个⽅法:1). int i = Integer.parseInt([String]); 或i = Integer.parseInt([String],[int radix]);2). int i = Integer.valueOf(my_str).intValue();注: 字串转成 Double, Float, Long 的⽅法⼤同⼩异.2 如何将整数 int 转换成字串 String ?A. 有叁种⽅法:1.) String s = String.valueOf(i);2.) String s = Integer.toString(i);3.) String s = "" + i;注: Double, Float, Long 转成字串的⽅法⼤同⼩异.package .lwkj.erts.register;import java.sql.Date;public class TypeChange {public TypeChange() {}//change the string type to the int typepublic static int stringToInt(String intstr){Integer integer;integer = Integer.valueOf(intstr);return integer.intValue();}//change int type to the string typepublic static String intToString(int value){Integer integer = new Integer(value);return integer.toString();}//change the string type to the float typepublic static float stringToFloat(String floatstr){Float floatee;floatee = Float.valueOf(floatstr);return floatee.floatValue();}//change the float type to the string typepublic static String floatToString(float value){Float floatee = new Float(value);return floatee.toString();}//change the string type to the sqlDate typepublic static java.sql.Date stringToDate(String dateStr){return java.sql.Date.valueOf(dateStr);}//change the sqlDate type to the string typepublic static String dateToString(java.sql.Date datee){return datee.toString();}public static void main(String[] args){java.sql.Date day ;day = TypeChange.stringToDate("2003-11-3");String strday = TypeChange.dateToString(day);System.out.println(strday);}} /* 我们 */JAVA中常⽤数据类型转换函数虽然都能在JAVA API中找到,整理⼀下做个备份。
java.sql.Types,数据库字段类型,java数据类型的对应关系本概述是从《JDBC TM Database Access from Java TM: A Tutorial and Annotated Reference》这本书中摘引来的。
JavaSoft ⽬前正在准备这本书。
这本书是⼀本教程,同时也是 JDBC 的重要参考⼿册,它将作为 Java 系列的组成部份,在 1997 年春季由 Addison-Wesley 出版公司出版。
8.1 概述由于 SQL 数据类型和 Java 数据类型是不同的,因此需要某种机制在使⽤ Java 类型的应⽤程序和使⽤ SQL 类型的数据库之间来读写数据。
为此,JDBC 提供了getXXX和setXXX⽅法集、⽅法registerOutParameter和类Types。
本章汇集了影响各种类和接⼝的数据类型的有关信息,并列出所有的对应关系表(这些表显⽰了 SQL 类型和 Java 类型之间的映射关系)以便于参考。
8.2 将 SQL 数据类型映射为 Java 类型不幸的是,不同数据库产品所⽀持的 SQL 类型之间有很⼤的不同。
即使不同的数据库以相同的语义⽀持 SQL 类型,它们也可能⽤不同的名称。
例如,绝⼤多数的主流数据库都⽀持⼀种表⽰⼤型⼆进制值的 SQL 类型,但 Oracle 把这种类型叫做LONG RAW,Sybase 把它叫做IMAGE,Informix 却把它叫做BYTE,⽽ DB2 ⼜把它叫做LONG VARCHAR FOR BIT DATA。
幸运的是,JDBC 程序员通常并不需要⾃⼰去关⼼⽬标数据库所⽤的实际 SQL 类型的名称。
⼤多数时候,JDBC 程序员将根据⼀些现有的数据库表来进⾏编程。
他们⽆须关⼼⽤于创建这些表的确切 SQL 类型的名称。
JDBC 在java.sql.Types类中定义了⼀系列的常规 SQL 类型标识符。
这些类型可⽤于表⽰那些最为常⽤的 SQL 类型。
java.sql.Date和java.sql.Timestamp转换在开发web应⽤中,针对不同的数据库⽇期类型,我们需要在我们的程序中对⽇期类型做各种不同的转换。
若对应数据库数据是oracle的Date类型,即只需要年⽉⽇的,可以选择使⽤java.sql.Date类型,若对应的是MSsqlserver数据库的DateTime类型。
既需要年⽉⽇时分秒的,选择java.sql.Timestamp类型。
你可以使⽤dateFormat定义时间⽇期的格式,转⼀个字符串即可。
package personal.jessica;import java.util.Date;import java.util.Calendar;import java.sql.Timestamp;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Locale;class Datetest{/***method 将字符串类型的⽇期转换为⼀个timestamp(时间戳记java.sql.Timestamp)dateString 需要转换为timestamp的字符串dataTime timestamp*/public final static java.sql.Timestamp string2Time(String dateString)throws java.text.ParseException {DateFormat dateFormat;dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//设定格式//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);dateFormat.setLenient(false);java.util.Date timeDate = dateFormat.parse(dateString);//util类型//Timestamp类型,timeDate.getTime()返回⼀个long型java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());return dateTime;}/***method 将字符串类型的⽇期转换为⼀个Date(java.sql.Date)dateString 需要转换为Date的字符串dataTime Date*/public final static java.sql.Date string2Date(String dateString)throws ng.Exception {DateFormat dateFormat;dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);dateFormat.setLenient(false);java.util.Date timeDate = dateFormat.parse(dateString);//util类型java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型return dateTime;}public static void main(String[] args){Date da = new Date();//注意:这个地⽅da.getTime()得到的是⼀个long型的值System.out.println(da.getTime());//由⽇期date转换为timestamp//第⼀种⽅法:使⽤new Timestamp(long)Timestamp t = new Timestamp(new Date().getTime());System.out.println(t);//第⼆种⽅法:使⽤Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)Timestamp tt = new Timestamp(Calendar.getInstance().get(Calendar.YEAR) - 1900, Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().get(Calendar.DATE), Calendar.getInstance().get(Calendar.HOUR), Calendar.getInstance().get(Calendar.MINUTE), Calendar.getInstance().get(Calendar.SECOND), 0);System.out.println(tt);try {String sToDate = "2005-8-18";//⽤于转换成java.sql.Date的字符串String sToTimestamp = "2005-8-18 14:21:12.123";//⽤于转换成java.sql.Timestamp的字符串Date date1 = string2Date(sToDate);Timestamp date2 = string2Time(sToTimestamp);System.out.println("Date:"+date1.toString());//结果显⽰System.out.println("Timestamp:"+date2.toString());//结果显⽰}catch(Exception e) {e.printStackTrace();}}}///:~怎样处理⼀个时间段,⽐如某⼈登陆了xx天xx⼩时xx分xx秒。
Java和数据库对应的数据类型速查Mys ql********************************************************************* 当前列Cl assNa me Col umnTy peD ispla ySize Typ eName0: javng.Inte gerColum nType:411IN TEGER1: javng.Inte gerColum nType:-64TI NYINT2: javng.Stri ngColum nType:120UN KNOWN3: javng.Bool eanColum nType:-71TI NYINT4: javng.Inte gerColum nType:56SM ALLIN T5: jav n g.Int egerColu mnTyp e:49M EDIUM INT6:j ava.l ang.I ntege r Co lumnT ype:411INTE GER7:j ava.l ang.L ong Col umnTy pe:-5 20BIGI NT8: ja va.la ng.Do uble Col umnTy pe:822DOUBL E9: jav n g.Dou ble Colu mnTyp e:822D OUBLE10:javng.Floa tC olumn Type:712FLO AT11:ja va.la ng.St ring Col umnTy pe:12 11UNKN OWN12:j ava.l ang.S tring Co lumnT ype:12 11UNK NOWN13:java.lang.Strin gC olumn Type:1 300CH AR14:ja va.la ng.St ring Col umnTy pe:12300VARC HAR15:j ava.s ql.Da teColu mnTyp e:91 10DATE16:java.sql.T imeCol umnTy pe:928TIME17:java.sql.D ateCol umnTy pe:914YEAR18:java.sql.T imest ampColum nType:9319T IMEST AMP19:j ava.s ql.Ti mesta mpC olumn Type:9319DA TETIM E20:[B Colu mnTyp e:-3255 TINY BLOB21:[BC olumn Type:-465535 BLOB22:[BColum nType:-416777215M EDIUM BLOB23:[BC olumn Type:-4-1 BL OB24:ja va.la ng.St ringColu mnTyp e:12255 TINY BLOB25:java.lang.Strin g Co lumnT ype:-165535TEXT26:java.lang.Strin g Co lumnT ype:-116777215ME DIUMB LOB27:j ava.l ang.S tring Col umnTy pe:-1-1 TEX T28:jav n g.Str ingColum nType:13C HAR29:j ava.l ang.S tring Col umnTy pe:13 CHARSQL Serve r******************************************************************0:ja va.la ng.In teger Col umnTy pe:411int i denti ty1:jav n g.Lon gColum nType:-520b igint2:byte[] Co lumnT ype:-2100bi nary3:j ava.l ang.B oolea n Co lumnT ype:-71bit4:j ava.l ang.S tring Co lumnT ype:110char5:java.sql.T imest ampColum nType:9323d ateti me6:jav a.sql.Time stamp Col umnTy pe:9323date time7:j ava.m ath.B igDec imalColum nType:320de cimal8:java.lang.Doubl eC olumn Type:622flo at9:byt e[]Colum nType:-42147483647imag e10: jav a.mat h.Big Decim al Co lumnT ype:321mone y11: jav n g.Str ing Colu mnTyp e:110n char12:java.lang.Strin gC olumn Type:-11073741823ntext13: java.math.BigD ecima l Col umnTy pe:220numer ic14: ja va.la ng.St ring Col umnTy pe:12 50nvar char15:java.lang.Float Co lumnT ype:713real16: java.sql.Times tamp Colu mnTyp e:93 16small datet ime17:j ava.l ang.I ntege r Co lumnT ype:5 6smal lint18:java.math.BigDe cimal Colu mnTyp e:312s mallm oney19:java.lang.Strin gC olumn Type:128000s ql_va riant20: javng.Stri ngColum nType:-12147483647text21: byte[]C olumn Type:-216ti mesta mp22: ja va.la ng.In teger Col umnTy pe:-63tinyi nt23: ja va.la ng.St ring Col umnTy pe:136uniqu eiden tifie r24: byt e[]Colum nType:-3100v arbin ary25:j ava.l ang.S tring Co lumnT ype:12 50var char*********************************************************************** MyS QL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。
mybatis 中java long对应oracle number的方法一、引言MyBatis作为一款优秀的持久层框架,被广泛用于Java开发。
而在与Oracle数据库交互时,可能会遇到Long数据类型与Oracle的Number数据类型的转换问题。
本文将介绍如何在MyBatis中实现Java Long到Oracle Number的转换。
二、Long到Number的转换在Java中,Long类型通常用于表示长整型数据。
而在Oracle数据库中,Number类型可以表示任意精度的数值,范围更大。
在进行数据传输时,我们需要将Java的Long类型转换为Oracle的Number类型。
首先,我们需要了解Java和Oracle的Number类型在表示范围和精度上的差异。
Java的Long类型可以表示到9223372036854775807,而Oracle的Number类型可以根据需要设置精度和小数位数,以适应更复杂的数据处理需求。
在MyBatis的映射文件中,我们可以使用TypeHandler来进行类型转换。
当执行插入或更新操作时,MyBatis会自动将Java对象转换为相应的SQL数据类型。
我们可以通过实现自己的TypeHandler,来实现Java Long到Oracle Number的转换。
三、实现TypeHandler下面是一个简单的TypeHandler示例,可以将Java的Long类型转换为Oracle的Number类型:```javapublic class LongTypeHandler extendsBaseTypeHandler<Long> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, Long parameter, JdbcType jdbcType) throws SQLException {ps.setLong(i, parameter);}@Overridepublic Long getNullableResult(ResultSet rs, String columnName) throws SQLException {return rs.getLong(columnName);}@Overridepublic Long getNullableResult(ResultSet rs, int columnIndex) throws SQLException {return rs.getLong(columnIndex);}@Overridepublic Long getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {return cs.getLong(columnIndex);}}```在上述代码中,我们重写了四个方法,分别对应PreparedStatement、ResultSet、CallableStatement的情况。
Oracle数据库以date类型保存⽇期时,Java中⽤哪个类对应数据
库的date类型?
1. 使⽤JDBC操作Oracle数据库时,使⽤java.sql.Date类型对应数据库的date类型,此时只能保存和读取⽇期部分,
时间(时分秒)部分不能读取和保存;
查询结果集可以直接获取Date类型的数据:java.sql.Date date=resultSet.getDate("dateTime");
java.sql.Date类型的数据也可以直接保存到数据库或者与数据库中date类型的数据直接⽐较⼤⼩;
字符串的⽇期,则⽤SQL语句的转换函数 to_date('2017-4-8','yyyy-mm-dd') 转换为date类型插⼊到数据库。
2. 使⽤Hibernate操作Oracle数据库时,使⽤java.util.Date类型对应数据库的date类型,此时数据库可以保存和读取到时分秒;
java.sql.Date 和java.util.Date 类型的数据都可以直接保存到数据库或者与数据库中date类型的数据直接⽐较⼤⼩,但从数
据库读取的⽇期数据要⽤java.util.Date 进⾏保存,因为java.sql.Date 是java.util.Date 的⼦类。
MySQL++:(转)mybatis常⽤jdbcType数据类型1 MyBatis 通过包含的jdbcType类型BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINEDTINYINT REAL VARCHAR BINARY BLOB NVARCHARSMALLINT DOUBLE LONGVARCHAR VARBINARY CLOB NCHARINTEGER NUMERIC DATE LONGVARBINARY BOOLEAN NCLOBBIGINT DECIMAL TIME NULL CURSOR2 Mybatis中javaType和jdbcType对应和CRUD例⼦<resultMap type="java.util.Map" id="resultjcm"><result property="FLD_NUMBER" column="FLD_NUMBER" javaType="double" jdbcType="NUMERIC"/><result property="FLD_VARCHAR" column="FLD_VARCHAR" javaType="string" jdbcType="VARCHAR"/><result property="FLD_DATE" column="FLD_DATE" javaType="java.sql.Date" jdbcType="DATE"/><result property="FLD_INTEGER" column="FLD_INTEGER" javaType="int" jdbcType="INTEGER"/><result property="FLD_DOUBLE" column="FLD_DOUBLE" javaType="double" jdbcType="DOUBLE"/><result property="FLD_LONG" column="FLD_LONG" javaType="long" jdbcType="INTEGER"/><result property="FLD_CHAR" column="FLD_CHAR" javaType="string" jdbcType="CHAR"/><result property="FLD_BLOB" column="FLD_BLOB" javaType="[B" jdbcType="BLOB" /><result property="FLD_CLOB" column="FLD_CLOB" javaType="string" jdbcType="CLOB"/><result property="FLD_FLOAT" column="FLD_FLOAT" javaType="float" jdbcType="FLOAT"/><result property="FLD_TIMESTAMP" column="FLD_TIMESTAMP" javaType="java.sql.Timestamp" jdbcType="TIMESTAMP"/> </resultMap>3 Mybatis中javaType和jdbcType对应关系JDBC Type Java TypeCHAR StringVARCHAR StringLONGVARCHAR StringNUMERIC java.math.BigDecimalDECIMAL java.math.BigDecimalBIT booleanBOOLEAN booleanTINYINT byteSMALLINT shortINTEGER intBIGINT longREAL floatFLOAT doubleDOUBLE doubleBINARY byte[]VARBINARY byte[]LONGVARBINARY byte[]DATE java.sql.DateTIME java.sql.TimeTIMESTAMP java.sql.TimestampCLOB ClobBLOB BlobARRAY ArrayDISTINCT mapping of underlying typeSTRUCT StructREF RefDATALINK .URL[color=red][/color]4 oracle数据类型和对应的java类型⽤mybatis generator⽣成代码后,执⾏查询语句时,oracle⾥的Date类型字段只精确到年⽉⽇,后⾯时分秒都为零。
java实现类SQL的join操作SQL是结构化查询语⾔的简称,给数据库操作带来很⼤的⽅便。
随着⼤数据的流⾏,hive、spark、flink都开始⽀持SQL的操作。
但在java内部并没有对SQL操作的⽀持,使⽤java stream API进⾏数据关联操作的代码惨不忍睹。
因此,我基于Google guava的Table,封装了常⽤的join操作。
分享并记录在这⾥。
⽬前⽀持的join类型包括如下⼏类,基本上常见的join都已经覆盖到了。
public enum JoinStrategy {INNER_JOIN,//内连接LEFT_JOIN,//左连接RIGHT_JOIN,//右连接LEFT_SEMI_JOIN,//左半连接,结果只取左表,连接条件是左表和右表的交集LEFT_ANTI_JOIN,//左半连接,结果只取左表,连接条件是左表与右表的差集FULL_JOIN;//全连接}闲⾔少叙,下⾯就是JoinUtils的硬代码⼀、构造Table对象由于⼤部分⼈拿到的数据要么并不是Table类型,所以我⾸先提供了从这两个对象转Table对象的⽅法由于从jdbc查出来的数据,默认格式就是⼀个List<Map<>>,下⾯这个createTable⽅法可以将List<Map<>>⽣成⼀个Table对象因为我们后⾯要进⾏join操作,所以需要提供⼀个id作为每⼀⾏的rowKey./*** 基于List<Map>创建⼀个表对象,将使⽤⽤户提供的id的在map中对应的value值作为rowKey** @param listMap* @param id* @param <R>* @param <C>* @param <V>* @return*/public static <R, C, V> Table<R, C, V> createTable(List<Map<C, V>> listMap, R id) {Table<R, C, V> table = HashBasedTable.create();for (Map<C, V> map : listMap) {for (Map.Entry<C, V> entry : map.entrySet()) {table.put((R) map.get(id), entry.getKey(), entry.getValue());}}return table;}有些情况下,我们的数据并不是List<Map<>>,⽽是别⼈给我们传递的⼀组对象,这个情况我也考虑到了。