关于通过JAVA 将数据库的表的数据导入另一张表中

时间:2022-04-17 00:41:24
将表 A(有5个字段)  导入B表(6个字段)

  其中 A表中有一个字段(a)  是由B表中的两个字段(c,d) 组合成的. 也就是说a字段可以拆成c,d

其他字段的数据一一对应.还有就是B表没有主键. ID可以重复.  

36 个解决方案

#1


问题的关键在于那个组合字段如何拆分,如果规则很清楚,单独用SQL 语句就能完成!

当然,你用JAVA调用那个语句也可以,不过.. 没必要吧!

#2


我想了个办法   就是   当对A表进行增删改查的时候同时对B表也进行同样的操作.
感觉这个方法有点笨.
不知道哪为高手 有更好的办法

#3


路过,顶一个~
  个人意见:用循环+六个变量。来操作(先取值,然后用SQL插入)。我做过可以。但是速度和性能不是很好!             呵呵,关公面前耍小刀!  呵呵~

#4


其中a 是 (Monday)*2312-112312,(Tuesday)*2312-112312
现在要拆为 c  对应Monday,Tuesday
          d  对应 2312-112312,2312-112312

#5


感觉这种数据库内部的数据交互,如果不需要外部加工,用存储过程解决比较好,快还好维护

#6


ls 哥们 能给讲的细点吗? 我对存储过程 了解不多.

#7


自己的贴顶起去!!!

#8


你是要现在整理数据,以后不用做这个导入操作了,还是说在以后每次向a插入数据都要插到b,如果只是这一次导入的话,就写sql搞定,要是每次插入a都要同时去插入b表,就可以在java程序里处理,或者在数据库写个触发器,新增或删除a时顺便向b做操作

#9


直接写个小的java应用,一直读取A表,然后读取A表的同时把A表的数据插入到B表去就行了,虽然效率不是很高,但简单

#10


回8楼,  我的需求就是  每次插入a都要同时去插入b表    
                   A表做什么操作 B表也要做同样的操作.
      再弱弱问一下,  主要是B表字段跟A表字段数量不等.要进行个拆分操作  该怎么搞这个触发器呢. 

#11


我数据库是 MYSQL

#12


CREATE TRIGGER trg_ins_A AFTER INSERT ON A

FOR EACH ROW 
BEGIN 
insert into  B(c,d,....) values(截取1(NEW.a列),截取2(NEW.a列)........); 
END

#13


我想了个办法       就是       当对A表进行增删改查的时候同时对B表也进行同样的操作. 

支持你的做法,系统负荷分散,很好

2 我建议你在B里面只保存c,d 已经A表的主键作为外键就行了,这样做一个视图就可以拿到完整的B表了!

#14


insert into b select ... from a;

#15


如果两个表中的数据要一一对应的话,插入前把b表数据先删除.

#16


java2000_net   我那样写  觉的数据更新实时 也是最快的吧. B表不能改了.因为这张表也是另一个项目组一起使用的.
               比较郁闷.
  我当时建议 写成一张表   就没这个麻烦了.  再写个没有实际意义的主键     不听. 比较郁闷.

#17


12 楼我还想问一个问题.  一个触发器 只能触发一个操作(insert or delete or update ),还是可以写多个操作.

#18


因为我不仅要插入 还要进行 删除 修改操作

#19


再建个删除的触发器,CREATE   TRIGGER   trg_del_A   AFTER   DELETE   ON   A...    不过b表没有唯一标识的列....

#20


恩,对头,我也赞成用触发器,那样子简单很多,你要拆分a表的两个字段,可以添加一个标志到a变的那列的数据中,遇到那个标志就一个substr。

#21


可以写个小程序,非常简单。

#22


什么简单的方法?

#23


D

#24


insert into b select * from a
2表具有相同的字段,复制a表的内容去b表中

#25


这种小问题,也要讨论半天?

#26


LS  别不懂装懂.  什么是大问题?  BS!

#27


触发器 没办法截取.
    a字段 里面一条的内容就很多:  (Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23
        所以用截取好象不太可行

#28


如果截取的过程比较复杂,可以在数据库自定义函数截取1(),截取2(),
然后再
CREATE   TRIGGER   trg_ins_A   AFTER   INSERT   ON   A 

FOR   EACH   ROW   
BEGIN   
insert   into     B(c,d,....)   values(截取1(NEW.a列),截取2(NEW.a列)........);   
END 

在数据库写个函数把(Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23 
截取成想要的结果应该可以实现吧

#29


Johnson_Hong 
疯狂的小猪
          你有这方面资料吗, 那触发器里面怎么写处理字段函数呢?     我越问问题越多. 我对数据库这块  用的很少.所以很多不会.
     能给传些资料吗?  我油箱  xingqingliang@dhcc.com.cn  谢谢拉!

#30


截取我知道用 substring  

#31


你可以在网上搜索一下mysql字符串函数,有很多的

#32


a= (Monday)*2312-112312,(Tuesday)*2312-112312 
c= Monday,Tuesday 
d= 2312-112312,2312-112312

我提供java的代码,你自己替换为SQL语句
    String s = "(Monday)*2312-112312,(Tuesday)*2312-1123123";
    System.out.println(s.substring(0,s.indexOf("*"))+","+s.substring(s.indexOf(",")+1,s.indexOf("*",s.indexOf(",")+1)));
    
    System.out.println(s.substring(s.indexOf("*")+1,s.indexOf(","))+","+s.substring(s.indexOf("*",s.indexOf(","))+1));
    

str.indexOf(s) ==> inSTR(str,s)
str.substring(from,to) = substring(field,from,to);


我MySQL 的SQl不熟,你自己调整吧

#33


欢迎JAVA人士加入53633581群,大家在这里可以讨论技术问题!

#34


直接写SQL语句简单多了
弄什么java啊

#35


如果是同一个库的话,还是用SQL语句处理好一些.

#36


我还是采用了  用SQL语句去处理了.   触发器想用 但是不会用.     结贴  !!!!!!!!  感谢热心的朋友们帮忙

#1


问题的关键在于那个组合字段如何拆分,如果规则很清楚,单独用SQL 语句就能完成!

当然,你用JAVA调用那个语句也可以,不过.. 没必要吧!

#2


我想了个办法   就是   当对A表进行增删改查的时候同时对B表也进行同样的操作.
感觉这个方法有点笨.
不知道哪为高手 有更好的办法

#3


路过,顶一个~
  个人意见:用循环+六个变量。来操作(先取值,然后用SQL插入)。我做过可以。但是速度和性能不是很好!             呵呵,关公面前耍小刀!  呵呵~

#4


其中a 是 (Monday)*2312-112312,(Tuesday)*2312-112312
现在要拆为 c  对应Monday,Tuesday
          d  对应 2312-112312,2312-112312

#5


感觉这种数据库内部的数据交互,如果不需要外部加工,用存储过程解决比较好,快还好维护

#6


ls 哥们 能给讲的细点吗? 我对存储过程 了解不多.

#7


自己的贴顶起去!!!

#8


你是要现在整理数据,以后不用做这个导入操作了,还是说在以后每次向a插入数据都要插到b,如果只是这一次导入的话,就写sql搞定,要是每次插入a都要同时去插入b表,就可以在java程序里处理,或者在数据库写个触发器,新增或删除a时顺便向b做操作

#9


直接写个小的java应用,一直读取A表,然后读取A表的同时把A表的数据插入到B表去就行了,虽然效率不是很高,但简单

#10


回8楼,  我的需求就是  每次插入a都要同时去插入b表    
                   A表做什么操作 B表也要做同样的操作.
      再弱弱问一下,  主要是B表字段跟A表字段数量不等.要进行个拆分操作  该怎么搞这个触发器呢. 

#11


我数据库是 MYSQL

#12


CREATE TRIGGER trg_ins_A AFTER INSERT ON A

FOR EACH ROW 
BEGIN 
insert into  B(c,d,....) values(截取1(NEW.a列),截取2(NEW.a列)........); 
END

#13


我想了个办法       就是       当对A表进行增删改查的时候同时对B表也进行同样的操作. 

支持你的做法,系统负荷分散,很好

2 我建议你在B里面只保存c,d 已经A表的主键作为外键就行了,这样做一个视图就可以拿到完整的B表了!

#14


insert into b select ... from a;

#15


如果两个表中的数据要一一对应的话,插入前把b表数据先删除.

#16


java2000_net   我那样写  觉的数据更新实时 也是最快的吧. B表不能改了.因为这张表也是另一个项目组一起使用的.
               比较郁闷.
  我当时建议 写成一张表   就没这个麻烦了.  再写个没有实际意义的主键     不听. 比较郁闷.

#17


12 楼我还想问一个问题.  一个触发器 只能触发一个操作(insert or delete or update ),还是可以写多个操作.

#18


因为我不仅要插入 还要进行 删除 修改操作

#19


再建个删除的触发器,CREATE   TRIGGER   trg_del_A   AFTER   DELETE   ON   A...    不过b表没有唯一标识的列....

#20


恩,对头,我也赞成用触发器,那样子简单很多,你要拆分a表的两个字段,可以添加一个标志到a变的那列的数据中,遇到那个标志就一个substr。

#21


可以写个小程序,非常简单。

#22


什么简单的方法?

#23


D

#24


insert into b select * from a
2表具有相同的字段,复制a表的内容去b表中

#25


这种小问题,也要讨论半天?

#26


LS  别不懂装懂.  什么是大问题?  BS!

#27


触发器 没办法截取.
    a字段 里面一条的内容就很多:  (Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23
        所以用截取好象不太可行

#28


如果截取的过程比较复杂,可以在数据库自定义函数截取1(),截取2(),
然后再
CREATE   TRIGGER   trg_ins_A   AFTER   INSERT   ON   A 

FOR   EACH   ROW   
BEGIN   
insert   into     B(c,d,....)   values(截取1(NEW.a列),截取2(NEW.a列)........);   
END 

在数据库写个函数把(Monday)*05:12-11:23,(Tuesday)*10:12-11:23,(Monday)*05:12-11:23,(Tuesday)*10:12-11:23 
截取成想要的结果应该可以实现吧

#29


Johnson_Hong 
疯狂的小猪
          你有这方面资料吗, 那触发器里面怎么写处理字段函数呢?     我越问问题越多. 我对数据库这块  用的很少.所以很多不会.
     能给传些资料吗?  我油箱  xingqingliang@dhcc.com.cn  谢谢拉!

#30


截取我知道用 substring  

#31


你可以在网上搜索一下mysql字符串函数,有很多的

#32


a= (Monday)*2312-112312,(Tuesday)*2312-112312 
c= Monday,Tuesday 
d= 2312-112312,2312-112312

我提供java的代码,你自己替换为SQL语句
    String s = "(Monday)*2312-112312,(Tuesday)*2312-1123123";
    System.out.println(s.substring(0,s.indexOf("*"))+","+s.substring(s.indexOf(",")+1,s.indexOf("*",s.indexOf(",")+1)));
    
    System.out.println(s.substring(s.indexOf("*")+1,s.indexOf(","))+","+s.substring(s.indexOf("*",s.indexOf(","))+1));
    

str.indexOf(s) ==> inSTR(str,s)
str.substring(from,to) = substring(field,from,to);


我MySQL 的SQl不熟,你自己调整吧

#33


欢迎JAVA人士加入53633581群,大家在这里可以讨论技术问题!

#34


直接写SQL语句简单多了
弄什么java啊

#35


如果是同一个库的话,还是用SQL语句处理好一些.

#36


我还是采用了  用SQL语句去处理了.   触发器想用 但是不会用.     结贴  !!!!!!!!  感谢热心的朋友们帮忙