barriers / 阅读 / 详情

mysql TINYINT kettle 取数查询 kettle直接把表中的"1"值用"Y"来代表了 大家有遇到过这问题吗?

2023-08-25 03:42:12
共4条回复
S笔记

在kettle常常有处理从一个源数据中做转换.做转换的时候, 需要去查另一个数据库.

这种问题遇到数据小时候还好办. 但是数据魇 时候就麻烦来了.

下面针对三种情况做具体情况的选择办法

1. 当需要转换的数据特别大的时候, 例如: 10W条以上.或者100W条以上时.

上图中,hadoop数据导入,导入的数据如果够多,例如100W条以上,其中一个字段需要查询数据库中查询,而这个字段的类型并不多,例如只有10个类型或者数据库中就只有这10个类型.那么,可以走线路2, 并且线路2中的 "使用缓存" 可以打勾,也可以不打.当然你这个源里的数据太多,打上当然最好了.因为省得再去你的数据库里再查.

但是当源里的数据类型还是只有10个类型,但是你的数据库里面存了有10000条记录时,怎么办?

有两种解决办法:

1).线路2:并且查询节点中的 "使用缓存" 不能打勾.

2).线路1,并在"带条件的结果查询供流查询使用" 这个结点中,用一个SQL,过滤一下数据,然后尽可能地把那里包括的这些记录查出来.这样在流里的比对时.也很快很多.必竟是在内存里做运算了

2. 查另一个数据库的数据量大时,而你的源数据不大.

最好的选择是

线路1,并在"带条件的结果查询供流查询使用" 这个结点中,用一个SQL,过滤一下数据,然后尽可能地把那里包括的这些记录查出来.这样在流里的比对时.也很快很多.必竟是在内存里做运算了

3. 当两个数据源都非常大时(最不想遇到的)

这种情况是最不想遇到的办法

阿啵呲嘚

今天也遇到了这个问题,后面通过拼接字符串解决了,在此分享一下。比如一个字段aa是tinyint类型,那么在查询该字段时拼接一个空字符就好了,如 select aa+"" as aa

真可

遇到,值映射居然不能改,完全没则,等你解决了,贡献一下解决方法

cloudcone

请问这个问题有没有解决?求解决方案,kettle直接把tinyint当成boolean解析了,我现在做一个数据库迁移的ETL,表示碰到了这个tinyint类型好蛋疼

相关推荐

tinyint对应java什么类型

1.LONGTEXT java.lang.String 2.TINYINT java.lang.Boolean,如果将配置属性“tinyInt1isBit”设为“真”(默认值),并将存储大小设为“1”;或java.lang.Integer,如果不是的话。
2023-08-19 05:30:374

mysql tinyint 4 最大能存到多少

在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255Tinyint占用1字节的存储空间,即8位(bit)。那么Tinyint的取值范围怎么来的呢?我们先看无符号的情况。无符号的最小值即全部8位(bit)都为0,换算成十进制就是0,所以无符号的Tinyint的最小值为0.无符号的最大值即全部8bit都为1,11111111,换算成十进制就是255.为什么有符号的TINYINT的最小值是-128?虽然“-0”也是“0”,但根据正、反、补码体系,“-0”的补码和“+0”是不同的,这样就出现两个补码代表一个数值的情况。为了将补码与数字一一对应,所以人为规定“0”一律用“+0”代表。同时为了充分利用资源,就将原来本应该表示“-0”的补码规定为代表-128
2023-08-19 05:30:591

数据库为tinyint对应实体类应该为什么类型

类应该为什么
2023-08-19 05:31:092

为什么mysql的boolean变成tinyint

应该是用0和1来表示
2023-08-19 05:31:282

tinyint对应java什么类型

如果长度是1,tinyint(1)对应的是Boolean型,其他的长度应该是Integer
2023-08-19 05:31:381

数据类型tinyint(1) 什么意思?

tinyint(1) 表示 数据类型是tinyint ,长度是1个字节,这个类型的范围是: 0 到 255
2023-08-19 05:31:451

mysql 无符号 tinyint 最大能够存多大整数

tinyint是-128到127,无符号就乘2,也就是0到255
2023-08-19 05:31:532

tinyint(1)的括号里的数字是只什么意思

圆括号是指出最大的显示尺寸 ...最大的显示尺寸长度为 255 ...TINYINT 的范围和这个数字没有任何关系 ...TINYINT(1) 和 TINYINT(100) 的取值范围都是 -128 - 127 ...如果用 TINYINT 作为主键的话 ...最大只能存储到 127 ...
2023-08-19 05:32:011

“~”这个符号是什么意思?

2023-08-19 05:32:129

int 转换为 tinyint 时出错

int类型值最大2147483647tinyint最大是255你原来的数据可能存在大于255的值,修改过来再改吧
2023-08-19 05:32:471

为什么boolean变成了tinyint

哥们,你试试mysql中tinyint(1) 可不可以填比1大的数字。
2023-08-19 05:33:112

java mysql 表中设置一个字段是boolean类型,表信息显示是tinyint(1)类型,是否正确

12341554421
2023-08-19 05:33:192

C#中怎么样将string类型转化为tinyint类型

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;namespace baidu{ class temp { public static void main() { string s = "25"; s.ToTinyInt().show(); } } public static class MyExtensions { public static string sort(this string temp) { return temp.convert2int().sort().convert2chararray().CharToString(); } public static string CharToString(this char[] temp) { string s = ""; for (int i = 0; i < temp.Length; i++) { s += temp[i].ToString(); } return s; } public static char[] convert2chararray(this int[] temp) { List<char> ls = new List<char>(); for (int i = 0; i < temp.Length; i++) { ls.Add((char)temp[i]); } return ls.ToArray(); } public static int[] sort(this int[] temp) { List<int> ls; ls = temp.ToList(); ls.Sort(); return ls.ToArray(); } public static int[] convert2int(this string temp) { List<int> ls = new List<int>(); for (int i = 0; i < temp.Length; i++) { ls.Add((int)temp[i]); } return ls.ToArray(); } public static byte ToTinyInt(this string temp) { return Convert.ToByte(temp); } public static void show(this byte temp) { Console.WriteLine(temp); wline(); } public static int[,] init(this int[,] temp) { Random rm = new Random(); int rank = temp.Rank; int line = temp.GetLength(0); int row = temp.Length / line; for (int j = 0; j < line; j++) { for (int i = 0; i < row; i++) { temp[j, i] = rm.Next(9); } } return temp; } public static string init(this string s,int lenght) { string temp = ""; Random rm = new Random(); for (int i = 0; i < lenght; i++) { temp += ((char)rm.Next(65, 90)).ToString(); } return temp; } public static int[] init(this int[] temp) { Random rm = new Random(); for (int i = 0; i < temp.Length; i++) { temp[i] = rm.Next(10000); } return temp; } #region public static void show(this string temp) { Console.WriteLine(temp); wline(); } public static void show(this int[,] temp) { int rank = temp.Rank; int line = temp.GetLength(0); int row = temp.Length / line; for (int j = 0; j < line; j++) { for (int i = 0; i < row; i++) { Console.Write(temp[j, i] + " "); } Console.WriteLine(); } wline(); } public static void show(this int[] temp) { for (int i = 0; i < temp.Length; i++) { Console.Write(temp[i] + " "); } Console.WriteLine(); wline(); } #endregion public static void wline() { Console.WriteLine("-------------------------------------------------------------------"); } }}
2023-08-19 05:33:273

源代码中 int 类型的是否可以对应数据库中tinyint类型的

不可以。数据库中:INT型数据的表数范围是从-2,147,483,647到2,147,483,647的整数 SMALLINT 型数据可以存储从-32768到32768的整数 TINYINT 型的字段只能存储从0到255的整数,不能用来储存负数 你可以查一下你用的脚本语言的数据类型的范围,再取适合范围的数据类型;但应该数据库的数值范围应大于等于源码中使用的数据范围。
2023-08-19 05:33:371

在数据库中,数据类型可以把用tinyint改成int,把char改成varchar?

可以,没有问题
2023-08-19 05:33:472

C#中怎么样将string类型转化为tinyint类型

SQLSERVER中的tinyint类型为从0到255的整型数据,存储大小为1字节。.NET中C#的byte关键字映射.NET的Byte结构,表示一个8位无符号整数,Byte值类型表示值介于0和255之间的无符号整数。所以相当于C#中的byte类型,把string类型先转换成byte就可以当作tinyint使用。代码如下:stringstr="123";bytetin=Convert.ToByte(str);//然后把tin直接赋值给tinyint类型字段
2023-08-19 05:33:541

数据库status为什么不能用int型,而用tinyint

其实都可以的,包括varchar都可以的!status一般作为记录状态使用,状态的类型少!考虑存储空间问题tinyint足够存储使用
2023-08-19 05:34:041

在数据库tinyint这个类型是什么意思?

mysql数据库中以的类型是以 “ 数据类型(m) ” 来定义的。其中,数字m在不同的数据类型中表示含义是不同的。整型数系统已经限制了取值范围,比如tinyint占一个字节(8bit)、int占4字节。所以整型数后面的m不是数据长度,而是表示数据在显示时显示最小长度。tinyint(1) 这里的1表示的是最小显示宽度是1个字符。tinyint(2) 这里的2表示的是最小显示宽度是2字符,但这里设置m是没有意义的,你还需要指定当数据少于长度m时用什么来填充,比如zerofill(表示有0填充)。设置tinyint(2) zerofill插入1时他会显示01。设置tinyint(4) zerofill插入1时他会显示0001。
2023-08-19 05:34:251

数据库中tinyint是什么类型

tinyint 从 0 到 255 的整型数据。存储大小为 1 字节。
2023-08-19 05:34:353

在数据库这个类型是什么意思tinyint

小整型。 长度为三
2023-08-19 05:34:455

SQL2000里tinyint是什么意思

tinyint是一种数据类型:短整型Declare是声明的意思
2023-08-19 05:35:281

mysql 中varchar tinyint text date smallint 这些怎么称呼?都怎么用啊?谢谢各位高手了!

char 和 varchar (Transact-SQL)固定长度或可变长度的字符数据类型。 char [ ( n ) ] 固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节。char 的 SQL 2003 同义词为 character。varchar [ ( n | max ) ] 可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。SQL-2003 中的 varchar 就是 char varying 或 character varying。备注如果未在数据定义或变量声明语句中指定 n,则默认长度为 1。如果在使用 CAST 和 CONVERT 函数时未指定 n,则默认长度为 30。将为使用 char 或 varchar 的对象指派数据库的默认排序规则,除非使用 COLLATE 子句指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。如果站点支持多语言,请考虑使用 Unicode nchar 或 nvarchar 数据类型,以最大限度地消除字符转换问题。如果使用 char 或 varchar,建议执行以下操作: 如果列数据项的大小一致,则使用 char。如果列数据项的大小差异相当大,则使用 varchar。如果列数据项大小相差很大,而且大小可能超过 8,000 字节,请使用 varchar(max)。当执行 CREATE TABLE 或 ALTER TABLE 时,如果 SET ANSI_PADDING 为 OFF,则定义为 NULL 的 char 列将作为 varchar 处理。当排序规则代码页使用双字节字符时,存储大小仍然为 n 个字节。根据字符串的不同,n 个字节的存储大小可能小于 n 个字符。-----------------------------------------------------------int、bigint、smallint 和 tinyint (Transact-SQL)使用整数数据的精确数字数据类型。 数据类型 范围 存储 bigint -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807) 8 字节int -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) 4 字节smallint -2^15 (-32,768) 到 2^15-1 (32,767) 2 字节tinyint 0 到 255 1 字节备注int 数据类型是 SQL Server 2005 中的主要整数数据类型。bigint 数据类型用于整数值可能超过 int 数据类型支持范围的情况。在数据类型优先次序表中,bigint 介于 smallmoney 和 int 之间。只有当参数表达式为 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其他整数数据类型(tinyint、smallint 和 int)提升为 bigint。注意: 使用 +、-、*、/ 或 % 等算术运算符将 int、smallint、tinyint 或 bigint 常量值隐式或显式转换为 float、real、decimal 或 numeric 数据类型时,SQL Server 计算数据类型和表达式结果的精度时应用的规则有所不同,这取决于查询是否是自动参数化的。 因此,查询中的类似表达式有时可能会生成不同的结果。如果查询不是自动参数化的,则将常量值转换为指定的数据类型之前,首先将其转换为 numeric,该数据类型的精度很大足以保存常量的值。例如,常量值 1 转换为 numeric (1, 0),常量值 250 转换为 numeric (3, 0)。 如果查询是自动参数化的,则将常量值转换为最终数据类型之前,始终先将其转换为 numeric (10, 0)。如果涉及 / 运算符,则对于类似查询而言,不仅结果类型的精度可能不同,而且结果值也可能不同。例如,包含表达式 SELECT CAST (1.0 / 7 AS float) 的自动参数化查询的结果值将不同于非自动参数化的同一查询的结果值,因为自动参数化查询的结果将被截断以适合 numeric (10, 0) 数据类型。有关参数化查询的详细信息,请参阅简单参数化。 -----------------------------------------------------------ntext、text 和 image (Transact-SQL)重要事项: 在 Microsoft SQL Server 的未来版本中将删除 ntext、text 和 image 数据类型。请避免在新开发工作中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。有关详细信息,请参阅 使用大值数据类型。用于存储大型非 Unicode 字符、Unicode 字符及二进制数据的固定长度数据类型和可变长度数据类型。Unicode 数据使用 UNICODE UCS-2 字符集。 ntext长度可变的 Unicode 数据,最大长度为 2^30 - 1 (1,073,741,823) 个字符。存储大小是所输入字符个数的两倍(以字节为单位)。ntext 的 SQL 2003 同义词为 national text。text服务器代码页中长度可变的非 Unicode 数据,最大长度为 2^31-1 (2,147,483,647) 个字符。当服务器代码页使用双字节字符时,存储仍是 2,147,483,647 字节。根据字符串,存储大小可能小于 2,147,483,647 字节。image长度可变的二进制数据,从 0 到 2^31-1 (2,147,483,647) 个字节。-----------------------------------------------------------日期和时间 (Transact-SQL)用于表示某天的日期和时间的数据类型。 datetime 和 smalldatetime表示某天的日期和时间。数据类型 范围 精确度 datetime 1753 年 1 月 1 日到 9999 年 12 月 31 日 3.33 毫秒smalldatetime 1900 年 1 月 1 日到 2079 年 6 月 6 日 1 分钟备注Microsoft SQL Server 2005 Database Engine 用两个 4 字节的整数内部存储 datetime 数据类型的值。 第一个 4 字节存储“基础日期”(即 1900 年 1 月 1 日)之前或之后的天数。基础日期是系统参照日期。另外一个 4 字节存储天的时间(以午夜后经过的毫秒数表示)。smalldatetime 数据类型存储天的日期和时间,但精确度低于 datetime。数据库引擎 将 smalldatetime 值存储为两个 2 字节的整数。第一个 2 字节存储 1900 年 1 月 1 日后的天数。另外一个 2 字节存储午夜后经过的分钟数。-----------------------------------------------------------这些东西MSDN里都有,自己看看就知道了。不过还是非常喜欢这种不用动脑筋的问题,嘿嘿……
2023-08-19 05:35:361

sql 中tinyint这个默认值是什么?

没有默认值如果是可空的话 就是 NULL如果NOT NULL, 默认值需要用DEFALUT()来指定
2023-08-19 05:35:482

在 MySQL 中,tinyint的取值范围是()。

在 MySQL 中,tinyint的取值范围是()。 A.0-10B.100-1000C.0-255D.0-100正确答案:C
2023-08-19 05:35:551

sqlserver数据库的表怎么设置枚举状态tinyint

1、选中该表右键点击Design。2、随便选中一个字段右键点击CheckConstraints,即可看到该表所有有枚举值的字段。。3、在General处即可编辑枚举值,即可实现新增或者删除枚举值。
2023-08-19 05:36:151

sql 中tinyint这个默认值是什么?

没有默认值如果是可空的话就是NULL如果NOTNULL,默认值需要用DEFALUT()来指定
2023-08-19 05:36:221

tinyint和byte数据类型 其实是一样的,对吗

不一样,1byte是8位二进制,一个tinyint是2位2进制数
2023-08-19 05:36:301

MySQL的字段类型是tinyint,拿出来变成true和false了,怎么让它在页面上显示成数字

把tinyint加长吧,比如tinyint(2)
2023-08-19 05:36:393

hibernate : tinyint问题

因为tinyint默认的字节就是4.在反方向生成的时候,只会记住它的类型。而不会记住它的大小。
2023-08-19 05:36:461

tinyint(1)的括号里的数字是只什么意思?我想....

这里的1是一个字节。一个字节是8位二进制数,即取值范围是-128——127
2023-08-19 05:36:552

php里tinyint(1)为什么还能插入99这个值?

mysql数据库中以 :数据类型(m) 来约束数据,其中 数字m在不同的数据类型中表示含义是不同的。 整型数系统已经限制了取值范围,tinyint占一个字节、int占4个字节。所以整型数后面的m不是表示的数据长度,而是表示数据在显示时显示的最小长度(长度为字符数)。tinyint(1) 这里的1表示的是 最短显示一个字符。tinyint(2) 这里的2表示的是 最短显示两个字符,但这里光设置m是没有意义的,你还需要指定当数据少于长度m时用什么来填充,比如zerofill(表示有0填充)。设置tinyint(2) zerofill 你插入1时他会显示01。设置tinyint(4) zerofill 你插入1时他会显示0001。
2023-08-19 05:37:036

怎么解决tinyint型的数值。获取到的0是false 1是true

自己转换一下吧,bool ret = ((int)row["xx"]) == 0?false:true;
2023-08-19 05:37:181

SQL里的real类型和tinyint类型在C#里分别对应类型

还手写Model? 如果你初学 自己写 无可厚非了 (有代码生成器的)
2023-08-19 05:37:392

mysql中的longtext字段在Java的po类中定义成啥类型?还有tinyint

楼上正解。
2023-08-19 05:37:545

mysql中的tinyint型的字段通过hibernate工具反向生成实体类时,为什么这个字段的类型变成了boolean型的?

手动搞定喽,好像是改成byte类型,或者删掉不写也行
2023-08-19 05:38:093

SQL中的tinyint在PowerDesigner对应的是哪个类型?

你可以看看两者中字符,找到其中与它字节数相同的就差不多了。不过我好像没有找到
2023-08-19 05:38:184

mysql tinyint(1) 能为空吗

可以为null
2023-08-19 05:38:332

数据库字段类型设计

一、整型: 1、tinyint:tinyint 是-128到128 。当属性设置为unsigned的时候。最大值就是255了。现在知道为什么需要设置为unsigned属性了。原来是为了最大限度的使用给予的存储空间。如果不设置。那么假如你的值都是正数的。那么-128这一百多个数字就相当于是浪费了。默认tinyint会自动设置为tinyint(3) 2、int,占四个字节,取值范围是-2^31到2^31-1(大约正负二十亿)int 类型phpmyadmin默认会设置int(10) 3、bigint,占八个字节,取值范围是-2^63到2^63-1 二、时间类型 1、Date:用来存储没有时间的日期。Mysql获取和显示这个类型的格式为“YYYY-MM-DD”。支持的时间范围为“1000-00-00”到“9999-12-31”; 2、TimeStamp:存储既有日期又有时间的数据。存储和显示的格式为 “YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”; 3、DateTime:也是存储既有日期又有时间的数据。存储和显示的格式跟TimeStamp一样。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”; (一般用这个) 1、尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED 2、大小(VARCHAR的长度只分配真正需要的空间) 3、使用枚举或整数代替字符串类型 4、类型(尽量使用TIMESTAMP而非DATETIME,在精度要求高的应用中,建议使用定点数来存储数值,以保证结果的准确性。能用decimal就不要用float) 5、单表不要有太多字段,建议在20以内 6、值(是否允许为空、是否有默认值,尽量避免使用NULL字段,很难查询优化且占用额外索引空间) 7、用整型来存IP 8、合理的字段名(符合3NF,避免不必要的数据冗余,参考 3NF) 9、创建并使用正确的索引 10、将字段设置为not null 还出于另外一种考虑:mysql表的列中包含null的话,那么该列不会包含在所有中。也就是使用索引是无效的。所有,考虑今后会使用索引的字段,就要设置字段属性是not null。 11、如果你要保存NULL,手动去设置它,而不是把它设为默认值。 12、考虑到这个字段今后会作为查询关键字使用like的形式进行搜索。那么要将该字段定义成索引。这样使用like查询就会更快。
2023-08-19 05:38:461

sql server的tinyint类型与.net中的谁对应

与byte对应,范围都为0-255
2023-08-19 05:38:542

mysql布尔用tinyint还是bit

mysql是不支持bool类型如果当把一个数据设置成bool类型的时候,数据库会自动转换成tinyint(1)的数据类型,其实这个就是变相的bool。 默认值也就是1,0两种,分别对应了bool的true和false
2023-08-19 05:39:111

mybatis boolean和tinyint怎么转换

两个位数不一样。。4位跟1位。。只能boolean=>tinyint哦。。
2023-08-19 05:39:311

如何修改mybatis generator tinyint byte

首先说说上一篇最后提到的关于自定义注释的问题,想实现这个功能就需要修改org.mybatis.generator.internal.DefaultCommentGenerator这个类。我将里面一些主要的方法讲下。addJavaFileComment(CompilationUnit compilationUnit)给Java文件加注释,这个注释是在文件的顶部,也就是package上面。addComment(XmlElement xmlElement)给生成的XML文件加注释。大象将这个方法清空了,不生成注释。addClassComment(InnerClass innerClass,IntrospectedTable introspectedTable)Java类的类注释。请注意红线的getRemarks()方法,这个remarks属性在原来的FullyQualifiedTable里面是没有的,这是大象自己加上去的,就是为了保存表的注释信息。那是在哪里加进去的呢?请看org.mybatis.generator.internal.db.DatabaseIntrospector这个类,大概浏览下就会发现,数据库表以及列的信息读取,类型设置都是由它来完成的,定位到608行,正好这里是个空行,插入几行代码。如下:这样我们就取到了表的注释信息,看到这里应该就会明白了吧?另外我需要说明的是,想通过databaseMetaData.getTables()来获得表注释的童鞋,这个做法是没用的,大象已经试过了,这个结果集里面的rs.getString("REMARKS")得到的是一个空字符串,什么都木有。而且大象还想吐槽下,网上一大堆说返回的这个结果集是10列,呵呵,是的么?我debug了好久发现它还是只有5列,不知道这10列是从哪来的,请打印出10列的童鞋告之是怎么做的,我用的mysql驱动是5.1.29addFieldComment(Field field, IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn)Java属性注释。注释为空就不给属性添加。addGetterComment(Method method,IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn)给getter方法加注释。这里添加注释的方法和Field一样,大象把这个方法以及addSetterComment方法都清空了,因为我比较习惯把注释加到属性上面,如果你习惯在getter方法上面加注释可以自行改一下。上面这些修改做完后,记得要在org.mybatis.generator.codegen.mybatis3.model.BaseRecordGenerator的61行增加下面这行代码:commentGenerator.addClassComment(topLevelClass, introspectedTable);因为mybatis-generator源码中本来就是不加类注释的。大家都在不同的公司,要求肯定都不一样,大象没法满足所有人,只对该类做了一定程度的修改,姑且把它当做一个示例模板吧,主要是弄明白怎么改就成了。mybatis-generator在1.3.2版里对生成xml的namespace作了修改,不再用表名当为namespace的值,而是用包结构+类名+Mapper后缀的形式设置,大象不喜欢这么复杂做法,所以这里需要改一改,只保留类名+Mapper的命名形式。去掉org.mybatis.generator.api.IntrospectedTable类的907行与908行代码。接下来再来说说对大对象类型的处理,mybatis-generator默认会把所有jdbcType为:BINARY、BLOB、CLOB、LONGVARBINARY、LONGVARCHAR、VARBINARY这些类型都作为大对象,反应出来的效果就是生成的pojo类会多一个类名+WithBLOBs.java的文件(含有的大对象个数大于1时),而在XML里面也会增加一个id为ResultMapWithBLOBs的resultMap,它继承BaseResultMap,大象一向喜欢简单的风格,这看得太不爽了。如果你觉得无所谓,不需要修改,请跳过这段往下看。表中的text或blob等类型,通过databaseMetaData.getColumns()取出来后,它的rs.getInt("DATA_TYPE")值是与java.sql.Types对应的。text类型的值:Types.LONGVARCHARblob类型是值:Types.LONGVARBINARY它用org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl解析java类型与jdbc类型,然后设置到org.mybatis.generator.api.IntrospectedColumn的jdbcTypeName属性里,最关键的地方到了,IntrospectedColumn类第156行有个isBLOBColumn()方法,它就是用来判断是否生成xxxWithBLOBs.java和ResultMapWithBLOBs的条件。当然mybatis-generator不会这么直接用,它在里面定义了一个Rules接口,由它来统一进行调用。所以我们只需要把isBLOBColumn()里面的代码都去掉,直接返回false就可以了,再结合配置文件中的columnOverride属性就能达到目的。jdbcType指定的值就是生成xml后result里面对应的类型,javaType与生成的pojo里面属性类型一致,这里其实可以不定义javaType,但是当数据库的表字段有的定义为tinyint时,如果不给它指定类型,那么默认生成的java类型就是java.lang.Byte,假如你想转换类型,而且保证不会超出字段类型的大小限制,那么你可以将它的javaType设为java.lang.Integer经过这么一番修改之后,输出结果已经比较理想了,但是xml文件看上去还是有点问题,元素与元素之间没空行,看起来好别扭。恩,这里要给它加上空行,所以请找到org.mybatis.generator.api.dom.xml.XmlElement类的getFormattedContent方法,这个方法有个参数:indentLevel,通过名字我们可以很直观的理解它的作用就是来控制缩进等级,它的初始值为0,这表示不缩进,当变成1时就是缩进一级,也即缩进四个空格,后面以此类推,我们应该还注意到,方法内部用到了递归,所以它是从最底元素开始,再一步步返回,所以我们就应该在indentLevel为1的元素后面加上换行。在生成xml的文件里面,我们看到有一个update元素,id为updateByPrimaryKey,这个基本上用不到,但是你还不能在table里加上enableUpdateByPrimaryKey="false",如果你这么做,虽然updateByPrimaryKey没有了,但updateByPrimaryKeySelective也会消失。所以这时请看看org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator这个类,getSqlMapElement()里面,有大量的addXXX方法,这些方法里面每个都用到了Rules规则来处理是否执行,比如我们在table里面加了enableDeleteByExample="false",它对应的是addDeleteByExampleElement(),而它又调用了introspectedTable.getRules().generateDeleteByExample()方法,再进入到generateDeleteByExample()里面,我们可以看到红线部分,上一篇大象讲过,在加载配置文件的时候,TableConfiguration会将table中的这些属性设置到对应的属性里,所以说其实最后还是回到了判断enableDeleteByExample的布尔值上面。上面啰嗦了一大堆,现在再来解决之前提到的问题,如何去掉id为updateByPrimaryKey的update元素,注释掉addUpdateByPrimaryKeyWithoutBLOBsElement()或直接去掉这行代码,跟踪代码你会发现,它和addUpdateByPrimaryKeySelectiveElement()的rules验证里面都用到了enableUpdateByPrimaryKey的值。或者你不想采取我说的这个办法,而是改BaseRules的generateUpdateByPrimaryKeyWithoutBLOBs(),让它直接返回false最后大象再唠叨一句,这些addXXX方法的顺序决定了生成xml文件中的元素顺序,所以有代码洁癖的人可以作下调整。上一篇加这一篇都是讲怎么少量的改动源码以实现自定义文件输出,写的比较凌乱,不是很系统,完全是从实用的角度出发,关键还是大象水平有限,有什么错误还请大家帮我指出来,谢谢!改了这么多,总要看下效果吧,下一篇大象将写个测试看看生成的结果,然后用maven assembly将它打包生成一个zip,它将包含:
2023-08-19 05:39:511

asp.net mysql 保存tinyint 出错怎么办,tinyint默认为0,但一保存,结果变成了null???

0你保存的时候要写成‘0"就是外面加个单引号或双引号
2023-08-19 05:40:231

tinyint 实体l类对应设置为什么类型

:int Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。 此外,该类提供了多个方法,能在int类型和 String类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。
2023-08-19 05:40:461

sql数据库中常用的数据类型有什么

两个字符型字段分别定义为char(10)和varchar(10),当给它们存入“123”这个数据时,char(10)字段占用十个字节的存储空间,而varchar(10)只占用3个字节存储空间,这就是char和varchar的区别。可以看出varchar比较适合存储长度变化很大的数据。nchar和char,nvarchar和varchar的区别在于是否使用unicode进行编码。一般情况下在仅仅处理中文及英文,不涉及特殊符号时不需要使用unicode。另一种需要用unicode的情况是需要将字符串数据添加到sql语句中执行,又不想里面的东西如单引号使sql产生误解,可以将其用unicode编码,这时每个字符都将占用两个字节,单引号也不会被sql识别了。ntext和text的区别也是一样。由于每个字符都占用两个字节,比较适合存储纯中文包括少量英文的数据。smallint、int和bigint的区别仅仅在于位数不同。smallint可存储2字节整数(-32768~32767),int可存储4字节整数(-2147483648~2147483647),bigint可存储8字节整数(-9223372036854775808~9223372036854775807)。smalldatetime用两个字节存储,可表示从1900年1月1日到2079年6月6日之间的任何时间,精确到分钟。datetime用四个字节存储,可表示1753年1月1日到9999年12月31日的任何时间,精确到百分之三秒。sql中没有bigdatetime类型。
2023-08-19 05:41:053

mysql有几种数据类型呢?分别是哪几种呢?

var mycars = new Array() Composite comp2 = new Composite("Composite XY"); comp2.Add(new Leaf("Leaf XYA")); comp2.Add(new Leaf("Leaf XYB")); root.Add(comp2); root.Add(new Leaf("Leaf C"));
2023-08-19 05:41:461

用Navicat for mysql 创建存储过程

function inorder($root) gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)configure:3438: $? = 0configure:3427: gcc -V >&5llvm-gcc-4.2: argument to `-V" is missingconfigure:3438: $? = 1configure:3427: gcc -qversion >&5i686-apple-darwin11-llvm-gcc-4.2: no input filesconfigure:3438: $? = 1
2023-08-19 05:42:092

oraclev$sql的sqltype类型是哪些

(1)二进制数据类型二进制数据包括 Binary、Varbinary 和 ImageBinary 数据类型既可以是固定长度的(Binary),也可以是变长度的。Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储空间的大小是 n + 4 个字节。Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储空间的大小是 n + 4个字节,不是n 个字节。在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。(2)字符数据类型字符数据的类型包括 Char,Varchar 和 Text字符数据是由任何字母、符号和数字任意组合而成的数据。Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。(3)Unicode 数据类型Unicode 数据类型包括 Nchar,Nvarchar 和Ntext在 Microsoft SQL Server 中,传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server安装过程中,允许选择一种字符集。使用 Unicode 数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所占用的空间是使用非Unicode数据类型所占用的空间大小的两倍。在 SQL Server 中,Unicode 数据以 Nchar、Nvarchar 和 Ntext 数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar字符类型,同样,这时最多可以存储4000 个字符。当使用 Ntext 数据类型时,该列可以存储多于 4000 个字符。(4)日期和时间数据类型日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后;后一个数据类型是时间在前,日期在后。在 Microsoft SQL Server中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时,所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。日期的格式可以设定。设置日期格式的命令如下:Set DateFormat {format | @format _var|其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式(5)数字数据类型数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数整数由正整数和负整数组成,例如 39、25、0-2 和 33967。在 Microsoft SQL Server 中,整数存储的数据类型是 Int,Smallint和 Tinyint。Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据类型存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。精确小数数据在 SQL Server 中的数据类型是 Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。Decimal 数据类型使用128位来表示值来用作数值计算。在SQL Server 中,近似小数数据的数据类型是 Float 和 Real。例如,三分之一这个分数记作0.333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。(6)货币数据类型在 Microsoft SQL Server 中,货币数据的数据类型是Money 和 SmallmoneyMoney数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。(7)特殊数据类型特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即 Timestamp、Bit 和 Uniqueidentifier。Timestamp 用于表示SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。Timestamp 类型的字段是一个基于系统时钟在数据行被创建或修改时由SQL Server自动填充的值。Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 OFF 时,使用 Bit 数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。Uniqueidentifier 由 16字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。
2023-08-19 05:43:021

SQL 数据库,求解答。

恩你有耐心太猛
2023-08-19 05:43:123

sql 中的数据类型有那些?请讲明白些

表1显示了数字数据类型;表2显示了字符数据类型;表3显示了日期和布尔数据类型。 表1 scalar types:numericdatatype range subtypes description binary_integer -214748-2147483647 naturalnaturalnpositivepositivensigntype 用于存储单字节整数。要求存储长度低于number值。用于限制范围的子类型(subtype): natural:用于非负数 positive:只用于正数 naturaln:只用于非负数和非null值 positiven:只用于正数,不能用于null值 signtype:只有值:-1、0或1. number 1.0e-130-9.99e125 decdecimaldouble precisionfloat integericintnumericrealsmallint 存储数字值,包括整数和浮点数。可以选择精度和刻度方式,语法:number[([,])]。缺省的精度是38,scale是0. pls_integer -2147483647-2147483647 与binary_integer基本相同,但采用机器运算时,pls_integer提供更好的性能 。 表2 字符数据类型 datatype rang subtype description char 最大长度32767字节 character 存储定长字符串,如果长度没有确定,缺省是1 long 最大长度2147483647字节 存储可变长度字符串 raw 最大长度32767字节 用于存储二进制数据和字节字符串,当在两个数据库之间进行传递时,raw数据不在字符集之间进行转换。 longraw 最大长度2147483647 与long数据类型相似,同样他也不能在字符集之间进行转换。 rowid 18个字节 与数据库rowid伪列类型相同,能够存储一个行标示符,可以将行标示符看作数据库中每一行的唯一键值。 varchar2 最大长度32767字节 stringvarchar 与varchar数据类型相似,存储可变长度的字符串。声明方法与varchar相同 表3 date和booleandatatype range description boolean true/false 存储逻辑值true或false,无参数 date 01/01/4712 bc 存储固定长的日期和时间值,日期值中包含时间
2023-08-19 05:43:222