1. 程式人生 > >程式碼實現從某個表中查詢資料插入到另一個表中

程式碼實現從某個表中查詢資料插入到另一個表中

前提條件&產生問題原因:

1、由於資料量比較大,又沒有使用hadoop等方式處理資料。所以使用分表的形式。分表的看另一篇文章。

2、然後,需求變了,臥槽~~~需求又變了!!!不用分表了,需要把所有的分表資料,插入到一張表中。當然,這所有表的欄位要求一致。

///稍等,待會再寫,先寫一篇,如果不用分散式,處理大量資料的問題。

//回來了寫完了,

package com.tujia.ecd.table;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;

import com.tujia.ecd.entity.BabyProjects;


public class ExaminationRemind {

	//private JdbcTemplate localTemplate;
	private JdbcTemplate onlineTemplate;
	
	@Before
	public void setup(){
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		//localTemplate = (JdbcTemplate) context.getBean("ecdItemRecordSlaverTemplate");
		onlineTemplate = (JdbcTemplate) context.getBean("ecdItemRecordSlaverTemplate");
		
	}
	
	@Test
	public void examinationRemind(){
		
		int tableNumByDocid = 512;
		String tableNameByDocid = "baby_projects_odocid";
		
		int tableNumByProjectid = 512;
		String tableNameByProjectid = "baby_projects_projectid";
		
		int tableNumByUid = 512;
		String tableNameByUid = "baby_projects_uid";
		
		//int record_visit = 512;
		//String record_visit_uid = "record_visit_uid";
		
		List<BabyProjects>  showList = new ArrayList<BabyProjects>();
		
		List<BabyProjects> showAllBabyProjectByDocid = showAllBabyProject(tableNameByDocid,tableNumByDocid);
		List<BabyProjects> showAllBabyProjectByProjectid = showAllBabyProject(tableNameByProjectid,tableNumByProjectid);
		List<BabyProjects> showAllBabyProjectByUid = showAllBabyProject(tableNameByUid,tableNumByUid);
		
		//List<BabyProjects> showAllrecord_visit = showAllBabyProject(record_visit_uid,record_visit);
		
		showList.addAll(showAllBabyProjectByDocid);//35
		showList.addAll(showAllBabyProjectByProjectid);//1121
		showList.addAll(showAllBabyProjectByUid);//1121
		
		System.out.println("查詢出的數量是:"+showAllBabyProjectByUid.size()+"條");
		
		//List<BabyProjects> showAllRepeat = removeRepeat(showList);
		
		//System.out.println("去掉重複後的數量:"+showAllRepeat.size()+"條");
		
		addAll(showAllBabyProjectByProjectid);
	}
	
	public List<BabyProjects> showAllBabyProject(final String tableName,final int tableNum){
		List<BabyProjects>  showList = new ArrayList<BabyProjects>();
		
		for(int i=0;i<tableNum;i++){
			 String tab = String.format(tableName+"_%02x",i);
			 String sql = "select * from "+tab+" ";
			 
			 List<BabyProjects> oneTable = onlineTemplate.query(sql, new RowMapper<BabyProjects>(){

					@Override
					public BabyProjects mapRow(ResultSet rs, int num) throws SQLException {
						BabyProjects babyProject = new BabyProjects();
						babyProject.setProjectprice(rs.getString("projectprice"));
						babyProject.setId(rs.getLong("id"));
						babyProject.setProjectid(rs.getLong("projectid"));
						babyProject.setProjectName(rs.getString("projectname"));
						babyProject.setOdocid(rs.getLong("odocid"));
						babyProject.setOtime(rs.getLong("otime"));
						babyProject.setUid(rs.getLong("uid"));
						babyProject.setRecordid(rs.getLong("recordid"));
						//babyProject.setDocName(rs.getString(""));
						babyProject.setTreatid(rs.getLong("treatid"));
						babyProject.setHid(rs.getInt("hid"));
						//babyProject.setProjectCode(rs.getString(""));
						
						
						return babyProject;
					}			
				});
			 showList.addAll(oneTable);
		}
		
		return showList;
	}
	
	public void addAll(final List<BabyProjects> listAll){
		
		for(final BabyProjects babyProject : listAll){
			
			final String sql = "insert into baby_projects (projectprice,id,projectid,projectname,odocid,otime,uid,recordid,treatid,hid,status) values(?,?,?,?,?,?,?,?,?,?,1)";
			
			onlineTemplate.update(new PreparedStatementCreator() {

				@Override
				public java.sql.PreparedStatement createPreparedStatement(
						java.sql.Connection con) throws SQLException {
					java.sql.PreparedStatement ps = con.prepareStatement(sql);
					int i = 0;
					ps.setString(++i, babyProject.getProjectprice());
					ps.setLong(++i, babyProject.getId());
					ps.setLong(++i, babyProject.getProjectid());
					ps.setString(++i, babyProject.getProjectName());
					ps.setLong(++i, babyProject.getOdocid());
					ps.setLong(++i, babyProject.getOtime());
					ps.setLong(++i, babyProject.getUid());
					ps.setLong(++i, babyProject.getRecordid());
					ps.setLong(++i, babyProject.getTreatid());
					ps.setLong(++i, babyProject.getHid());
					
					return ps;
				}
			});
		}
	}
	
	public List<BabyProjects> removeRepeat(final List<BabyProjects> listAll){
		List<BabyProjects>  showList = new ArrayList<BabyProjects>();
		Set<BabyProjects> h  = new HashSet<BabyProjects>(listAll); 
		showList.addAll(h);
		return showList;
	}
	
	/*
	 * public   static   void  removeDuplicate(List list)   { 
    HashSet h  =   new  HashSet(list); 
    list.clear(); 
    list.addAll(h); 
    System.out.println(list); 
} 
	 * 
	 * public void addAll(List<BabyProjects> listAll){
		
		for(BabyProjects babyProject : listAll){
			
			templateSqlPrepare<BabyProjects> tsp =  (babyProject, "baby_projects");
			localTemplate.update(tsp.getPreparedStatementCreator(tsp.getSqlForInsert()));
		}
	}*/

}
















恩,就是上面的程式碼,很多東西,都跟我寫的另一篇,分表,重複了,所以,這裡我就不多說了,偷懶一下~~。

: p