java實(shí)現(xiàn)批量導(dǎo)入.csv文件到mysql數(shù)據(jù)庫(kù)
這篇博文是在參加CCF時(shí)導(dǎo)入.csv文件時(shí)自己總結(jié)的,雖然NavicatForMysql可以導(dǎo)入.csv文件,可是當(dāng)我導(dǎo)入的時(shí)候不知道是文件太大還是什么原因,總是會(huì)出現(xiàn)失敗。然后就用java寫了一個(gè)批量導(dǎo)入數(shù)據(jù)的類去導(dǎo)入該.csv文件,這里也沒有考慮代碼的結(jié)構(gòu),只是為了快速的完成這個(gè)工作,做一個(gè)總結(jié)。
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("數(shù)據(jù)庫(kù)連接成功");
insert_data(in);
long EndTime = System.currentTimeMillis();
long time = (EndTime - startTime) / 1000;
System.out.println("導(dǎo)入數(shù)據(jù)共用時(shí):" + 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();
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot項(xiàng)目?jī)?yōu)雅的全局異常處理方式(全網(wǎng)最新)
這篇文章主要介紹了SpringBoot項(xiàng)目?jī)?yōu)雅的全局異常處理方式(全網(wǎng)最新),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
關(guān)于Android觸摸事件分發(fā)的原理詳析
觸摸事件分發(fā)機(jī)制一直以來(lái)都是Android中比較重要的一大塊,自定義view,各種復(fù)雜的自定義手勢(shì)交互都與觸摸事件分發(fā)機(jī)制關(guān)系密,下面這篇文章主要給大家介紹了關(guān)于Android觸摸事件分發(fā)原理的相關(guān)資料,需要的朋友可以參考下2022-01-01
JAVA新手學(xué)習(xí)篇之類和對(duì)象詳解
這篇文章主要給大家介紹了關(guān)于JAVA新手學(xué)習(xí)篇之類和對(duì)象的相關(guān)資料,Java是面向?qū)ο蟮木幊陶Z(yǔ)言,主旨在于通過(guò)對(duì)象封裝屬性和方法實(shí)現(xiàn)功能,面向?qū)ο笈c面向過(guò)程的區(qū)別在于關(guān)注點(diǎn)的不同,需要的朋友可以參考下2024-10-10
對(duì)象存儲(chǔ)服務(wù)MinIO快速入門(集成項(xiàng)目的詳細(xì)過(guò)程)
MinIO是一個(gè)開源的對(duì)象存儲(chǔ)服務(wù),支持多種操作系統(tǒng),配置簡(jiǎn)單且性能高,它使用糾刪碼進(jìn)行數(shù)據(jù)保護(hù),可以容忍硬件故障,MinIO支持多種語(yǔ)言的SDK和豐富的API,本文介紹對(duì)象存儲(chǔ)服務(wù)MinIO快速入門,感興趣的朋友一起看看吧2025-03-03

