java实现批量导入.csv文件到mysql数据库

这篇博文是在参加CCF时导入.csv文件时本身总结的,虽然NavicatForMysql能够导入.csv文件,但是当我导入的时候不知道是文件太大仍是什么缘由,老是会出现失败。而后就用java写了一个批量导入数据的类去导入该.csv文件,这里也没有考虑代码的结构,只是为了快速的完成这个工做。作一个总结。java

package com.cqu.price_prediction.farm;

import java.io.File;
import java.io.FileNotFoundException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class Read
{
	private static Connection con;

	public static void main(String[] args) throws FileNotFoundException, SQLException
	{

		long startTime = System.currentTimeMillis();
		File file = new File("H:/AgriculturalProduct/data/farming.csv");

		Scanner in = new Scanner(file);

		getConnect();
		System.out.println("数据库链接成功");
		insert_data(in);

		long EndTime = System.currentTimeMillis();
		long time = (EndTime - startTime) / 1000;

		System.out.println("导入数据共用时:" + time);
	}

	private static void insert_data(Scanner in) throws SQLException
	{
		int count = 0;
		String sql = "insert into farming (province,market,type,name,standard,area,color,unit,minprice,avgprice,maxprice,entertime,time)"
				+ "values(?,?,?,?,?,?,?,?,?,?,?,?,?)";

		con.setAutoCommit(false);
		PreparedStatement pstmt = con.prepareStatement(sql);
		in.next();
		while (in.hasNext())
		{
			String temp1 = in.nextLine();
			String[] temp = temp1.split(",");

			if (temp.length < 13)
				continue;

			if (temp.length == 13)
			{
				pstmt.setString(1, temp[0]);
				pstmt.setString(2, temp[1]);
				pstmt.setString(3, temp[2]);
				pstmt.setString(4, temp[3]);
				pstmt.setString(5, temp[4]);
				pstmt.setString(6, temp[5]);
				pstmt.setString(7, temp[6]);
				pstmt.setString(8, temp[7]);
				pstmt.setString(9, temp[8]);
				pstmt.setString(10, temp[9]);
				pstmt.setString(11, temp[10]);
				pstmt.setString(12, temp[11]);
				pstmt.setString(13, temp[12]);
			}

			pstmt.addBatch();

			count++;

			if (count == 20000)
			{
				count = execute(pstmt, count);
			}
		}
		pstmt.executeBatch();
		con.commit();

	}

	public static int execute(PreparedStatement pstmt, int count) throws SQLException
	{

		pstmt.executeBatch();
		con.commit();
		return 0;

	}

	private static void getConnect()
	{
		try
		{
			Class.forName("com.mysql.jdbc.Driver");
			con = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/agricultural_price_prediction?useUnicode=true&characterEncoding=utf8&useServerPrepStmts=false&rewriteBatchedStatements=true",
					"root", "123456");
		}
		catch (ClassNotFoundException | SQLException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}