【问题标题】:How to insert data from a text file from Java to SQL server?如何将文本文件中的数据从 Java 插入 SQL Server?
【发布时间】:2015-04-20 13:23:03
【问题描述】:

我制作了这个源代码来尝试从文本文件中插入数据,但它没有做我想要的。

首先我声明带有赋值的变量作为默认值插入到我的表中,然后只获取通过文本文件输入的新值。我不知道我应该使用正确的插件。

package Clases;
import java.sql.*;
import java.util.*;
import java.math.*;
public class Importar  {

    public static Connection Conexión;
    public static void main(String[] args) {

        try {
            Scanner lector = new Scanner(System.in);

            String ID_Origin = "NE001";
            short siPeriod = 2015;
            byte TypeTrans = 0;
            String ID_Entry = "";
            short siType = 0;
            String Concept = "";
            String ID_Class = "01"; 
            String ID_Budget = null;
            java.sql.Timestamp dtDate = null; 
            String ID_Cost = null;
            java.math.BigDecimal Debits = null;
            java.math.BigDecimal Credits = null;
            String ID_Currency = null;
            BigDecimal AmountFOB = BigDecimal.ZERO;
            BigDecimal CurrencyRate = BigDecimal.ZERO;
            boolean boCashFlow = false;
            short Status = 0;
            short StatusConsol = 0;
            System.out.println("ID_Entry");
            ID_Entry = lector.next();
            System.out.println("Concept");
            Concept = lector.next();
            System.out.println("dtDate");
            System.out.println("Debits");
            System.out.println("Credits");
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            Conexión = DriverManager.getConnection(
                "jdbc:sqlserver://SSL2541\\SQLEXPRESS:1433;" +
                "databaseName=namedatabase;user=sa;password=password");
            PreparedStatement enrollItmt;
            // This is where I have my confusion and did not return
            // anything the program   
            enrollItmt = Conexión.prepareStatement(
                "LOAD FROM 'C://Users//aurbina//Desktop//cargadatabase.txt' "
              + "INSERT INTO tablename( ID_Entry, siType, Concept, ID_Class, "
              + "dtDate, Debits, Credits)"
              + "VALUES (+Concept, +dtDate, +Debits, +Credits)");
            enrollItmt.execute();
        }
        catch(ClassNotFoundException | SQLException ex) {
        }
    }
}

【问题讨论】:

  • 您到底想达到什么目的?什么不起作用?
  • 对于大文本文件,请尝试 mysqlimport 或 Oracle 等效的 sqlldr
  • @Palcente "SQL-Server 2012"...
  • 我在 txt 文件中的这些数据可以插入到我分配的表和列中,因为我也有通过我所说的变量默认输入的值,那里是一些你应该始终拥有相同数据的字段。
  • 如果有人可以提供我一些源代码或更正以实现非常感谢它

标签: java sql-server-2012


【解决方案1】:

这是一个简单的示例示例,用于将文本文件插入 SQL Server 表作为帮助。 可以相应修改

import com.microsoft.sqlserver.jdbc.SQLServerBulkCSVFileRecord;
import com.microsoft.sqlserver.jdbc.SQLServerBulkCopy;
import com.microsoft.sqlserver.jdbc.SQLServerBulkCopyOptions;
import java.sql.Types;
import java.util.Date;
import java.sql.*;
import java.util.*;

public class App {
    public static void main( String[] args ) {
        Connection Conexión;
        Conexión = DriverManager.getConnection(
            "jdbc:sqlserver://SSL2541\\SQLEXPRESS:1433;" +
            "databaseName=namedatabase;user=sa;password=password");

        String tablename = "dbo.filetable";

        try {
            File file = new File("file.txt");
            //The Text File has three columns "ID", "FirstName", "Lastname" separated 
            //by comma as delimiter.

            //The Table (tablename) in SQL Server also has same Number of Columns.

            FileReader fr = new FileReader(file);
            BufferedReader br = new BufferedReader(fr);
            StringBuffer sb = new StringBuffer();
            String line;
            while((line=br.readLine())!=null) {
                sb.append(line);
                sb.append("\n");
            }
            fr.close();



            //try (InputStream inputStream = new FileInputStream(file)) {
            try (InputStream inputStream = new 
                 ByteArrayInputStream(sb.toString().getBytes(StandardCharsets.UTF_8))) 
            {
                //System.out.println("file to be copied to " + tablename);

                // Column information
                SQLServerBulkCSVFileRecord fileRecord = new 
                      SQLServerBulkCSVFileRecord(inputStream, 
                            StandardCharsets.UTF_8.name(), "\\,", true);

                //Here ,  is delimiter in Test File.

                fileRecord.addColumnMetadata(1, "ID", Types.VARCHAR, 0, 0);
                fileRecord.addColumnMetadata(2, "FirstName", Types.VARCHAR, 0, 0);
                fileRecord.addColumnMetadata(3, "LastName", Types.VARCHAR, 0, 0);

                // Setting bulk insert options(batch size). Insert each 10000 rows in 
                //bulk from N number of rows in Text File.

                SQLServerBulkCopyOptions copyOptions = new SQLServerBulkCopyOptions();
                copyOptions.setBatchSize(10000);

                try (SQLServerBulkCopy bulkCopy = new 
                          SQLServerBulkCopy(Conexión))
                {
                    bulkCopy.setBulkCopyOptions(copyOptions);
                    bulkCopy.setDestinationTableName(tablename);
                    bulkCopy.writeToServer(fileRecord);
                }

                System.out.println("Data from text file Inserted from Java to 
                                    SQLserver Done");

            } catch (Exception e) {
                e.printStackTrace();
            }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    相关资源
    最近更新 更多