如何使用Java读取.csv文件并将其数据插入SQL Server?
我是Java的新手。 我有两个步骤的任务。
- 我想从
.csv
文件中读取所有数据。 - 在读取该数据后,我必须将其放入SQL Server数据库中。
我已经完成了第一步。 我能够读取.csv
文件数据,但我不知道如何将其插入数据库。
这是我获取.csv
文件数据的代码:
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.StringTokenizer; public class DBcvsdataextractor { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String fileName="D:/USPresident Wikipedia URLs Thumbs HS.csv"; try { BufferedReader br = new BufferedReader( new FileReader(fileName)); StringTokenizer st = null; int lineNumber = 0, tokenNumber = 0; while( (fileName = br.readLine()) != null) { if(lineNumber++ == 0) continue; //break comma separated line using "," st = new StringTokenizer(fileName, ","); while(st.hasMoreTokens()) { //display csv values tokenNumber++; System.out.print(st.nextToken() + '\t'); } //new line System.out.println(" "); //reset token number tokenNumber = 0; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
现在,如何将该数据插入SQL Server?
如果你真的想用Java做这件事,并且真的想像你现在那样编写自己的CSV解析器,你可以
- 您不必打印出每个“CSV文件值”,而是必须存储它们。 例如,您可以为CSV文件中的每一列使用
ArrayList
,并在读取CSV文件时填充这些列 - 读取文件后,可以再次遍历这些
ArrayList
实例,为所有数据构造一个大的INSERT
语句,或者为CSV文件中遇到的每一行构建一个INSERT
语句。 如果您选择最后一个选项,则甚至不必使用这些ArrayList
实例。 在这种情况下,您可以在读取CSV文件时构造一个单独的INSERT
语句,并在每次读取一行后将其提交给DB。
我知道在读取CSV文件的同时构建查询的方法也是可行的,如果你想要一个大的INSERT
语句,但是将INSERT
与CSV文件的读取分开有一个很大的好处就是你可以替换你自己的CSV解析器后来由标准的解析器没有太多麻烦。
SQL Server有一个工具。
喜欢这个:
BULK INSERT CSVTest FROM 'c:\csvtest.txt' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' )
例如,在java中使用此命令,使用JDBC连接。
希望这可以帮助。
SQL Server文件CSV