把數據庫文件寫入csv文件和從csv文件中導入數據到數據庫中

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import java.util.StringTokenizer;
import java.util.Vector;

import javax.swing.JOptionPane;


public class importAndExportManager {
	
	public static void main(String[] args) {
		//new connectDB().setDbName("mysql");
		//new importAndOutportManager().importDate("borrow.csv");;
		//System.out.println("end");
	}
	 private Connection conn=connectDB.getConnection();	
	 private Statement stmt;
	 private PreparedStatement pstmt;
	
	 private ResultSetMetaData rsmd=null; 
	 private ResultSet rs=null;
	 
	 /*
	  * 獲得數據庫文件的內容  存放在ResultSet 的對象中
	  */
	 public void getDate(String DBname){
		
		 String sql="select * from library."+DBname;
		 try {
			stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
			rs=stmt.executeQuery(sql);
			rsmd=rs.getMetaData();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, e.getMessage());
		}
	 }
	 
	 public void exportDate(String DBname) throws SQLException{
		 	int row=0;
			int column=0;
			Object [][]booklist=null;		//數據內容
			String tableName[]=null;		//標籤內容
			
			getDate(DBname);
			column=rsmd.getColumnCount();
			while (rs.next()) {
				row++;				
			}
			booklist=new Object[row][column];
			tableName=new String[column]; 
			
			for (int i = 1; i < tableName.length+1; i++) {
				tableName[i-1]=rsmd.getColumnLabel(i);
			}
								
			for	(int i=0;i<row;i++){
				rs.previous();	
				for (int j = 0; j < column; j++) {
					booklist[i][j]=rs.getObject(j+1);
				}					
			}
			
			//寫入csv文件中
			File csv = new File("E:/Javaproject/library/"+DBname+".csv"); 
			try {
				BufferedWriter bw = new BufferedWriter(new FileWriter(csv, false));
				for (int i = 0; i < tableName.length; i++) {
					bw.write(tableName[i]);
					if (i!=tableName.length-1) {
						bw.write(",");
					}
				}
				bw.write("\r\n");	
				
				for	(int i=0;i<row;i++){
					for (int j = 0; j < column; j++) {
						bw.write(booklist[i][j].toString());
						if (j!=column-1) {
							bw.write(",");
						}
					}
					bw.write("\r\n");					
				}
				
				bw.close();
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	 }
	 
	 /*
	  * 從CSV文件中讀取內容,存入一個Vector<Object []>對象中。
	  */
	public void importDate(String inputFilePath){
		 Vector<Object []> date = null;
		 Object oneLineDate[];
		 Vector<String>label=new Vector<String>();
		 int column=0;
		 File file=new File(inputFilePath);
		 try {
			BufferedReader br=new BufferedReader(new FileReader(file));
			String line="";
			line=br.readLine();
			StringTokenizer st = new StringTokenizer(line, ",");
			while (st.hasMoreElements()) {				
				label.add(st.nextToken());//得到標籤
				column++;	//利用標題行計算出總共有多少列行
			}
			oneLineDate=new Object[column];
			date=new Vector<Object[]>();
			for (int i=0;(line=br.readLine())!=null;i++) {
				StringTokenizer st1 = new StringTokenizer(line, ",");
				for(int j=0;st1.hasMoreElements();j++){
					oneLineDate[j]=st1.nextElement();
				}
				date.add(i,oneLineDate);
				oneLineDate=new Object[column];
			}
			br.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		insertDate(label,date, file.getName());
	 }
	 
	/*
	 * 
	 */
	 public void insertDate(Vector<String>label,Vector<Object []> date ,String tableName){
		 String table=tableName.substring(0, tableName.length()-4);
		 //System.out.println(table);
		 StringBuffer sql=new StringBuffer("insert into library."+table+" values(");
		 //利用標籤的個數  ,形成這種形式:"insert into library."+table+" values(?,?,?,?)
		 for (int i = 0; i < label.size(); i++) {
			sql.append("?");
			if (i!=label.size()-1) {
				sql.append(',');
			}
		}
		 sql.append(')');
		 //向數據庫中寫入數據
		 try {
			pstmt=conn.prepareStatement(sql.toString());
			for (int i = 0; i < date.size(); i++) {
				for (int j = 0; j < date.get(i).length; j++) {
					pstmt.setObject(j+1, date.get(i)[j]);
				}
				pstmt.executeUpdate();
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 
	 }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章