要说数组,在MYSQL中,根本没数组这功能。为此,很多牛人都想出了不同的办法。这里,我介绍其中的一个:将得来的数组元素存进临时表,在需要用时,再去取出来用。这里的作用就是不用数组变量来作临时容器,而是直接写入了数据库。当然。这得在数据库中建两三个表。就是用来存储解析出来的结果。

前些天遇到一个这样的需要求:

页面那边同时传入多条数据,以组成多个类,并且同时传入数据库生成多条数据。并返回页面。

这当然只有用存储过程了。至少两个存储过程。将字符串解析和数据操作分开。

问题是:同时传进多条数据时,只有把这些多个类的属性全部取出来。这里要注意两个数据:一个是实对象List.size(),另一个是属性List.size(),因为这是字符串解析时,很重要的参数。组成一个字符串,然后把这字符串传入存储过程。在存储过程里面对这字符串进行解析,以得到所有的属性值。然后再对这些属性值进行相应的操作。还是做个例子:

先建一个表,用于存储解析出来的实体对象的字符串:

create table strInfo(
strID int
primary key,//这里最好不要设置成自动增长,一会儿解释。
strValue
varchar(50)
);

第二个表,用于存储属性值:

create table proInfo(
proID int primary key,
proValue varchar(20)
);

解析字符串的存储过程:

drop procedure if exists splitStr(
in ClassAndPropertyStr
varchar(500),
in ObjecCount
int,//实体对象的个数
in PropertyCount
int,//属性的个数
in pro1
varchar(20),//属性名
in pro2 varchar(20),
.....
)
declare temp1 int default 1;
declare instr varchar(50);
declare temp2 int default 1;
declare outstr varchar(50);
declare prostr varchar(20);
begin
while temp1 <= ObjecCount
//这里是将各个对象解析出来,对象之间以";"分开的。
do
set instr =
SUBSTRING_INDEX(SUBSTRING_INDEX(ClassAndPropertyStr,';',temp),';',-1);
insert into strInfo values
(temp,instr);//上面不设置为自增长就是为了和这个循环相呼应
set temp = temp + 1;
end while;
while temp2 <=
PropertyCount //将每个对象的具体属性解析出来
do
set outstr
= select strValue from strInfo where strID =
temp2;
set prostr =
SUBSTRING_INDEX(SUBSTRING_INDEX(outstr,',',temp2),',',-1);
insert into proInfo values
(temp2,prostr);//现在表里面就是单独的一个一个的属性了。
set temp2 = temp2 + 1;
end while;
//剩下的就是将属性名与属性值对应上了。这里暂时没想到什么好的办法,只有用笨办法了。
set pro1 = select proValue from proInfo where
proID = 1;//必须清楚属性的顺序,不然会出错!切忌!
set pro2 = select proValue from proInfo where
proID = 2;
......
end;