2012-01-20 59 views
5

Ứng dụng web mà tôi hiện đang phát triển hỗ trợ xuất CSV từ (sử dụng SELECT INTO OUTFILE) và nhập vào (Sử dụng LOAD DATA INFILE) Máy chủ MySQL để duy trì các bộ dữ liệu khổng lồ cực kỳ tốn kém để được xử lý bằng cách sử dụng lệnh SELECT và INSERT hàng loạt trong mã Java (bộ kết quả xử lý, công cụ mã hóa chuỗi, di sản logic nghiệp vụ, v.v.). Các tệp CSV này không được định hướng bởi ứng dụng, vì vậy chúng chỉ thể hiện nội dung bảng thô từ cơ sở dữ liệu MySQL. Nhưng theo tôi hiểu cách tiếp cận này là tốt chỉ khi tôi có các tập tin địa phương, do đó, cả hai máy chủ ứng dụng web và mysqld phải chạy ở cùng một máy.JDBC: Xuất dữ liệu thô CSV/nhập từ/sang cơ sở dữ liệu MySQL từ xa bằng cách sử dụng luồng (SELECT INTO OUTFILE/LOAD DATA INFILE)

Cấu hình ứng dụng có thể chỉ định kết nối cơ sở dữ liệu từ xa. Điều đó rõ ràng có nghĩa là các tệp CSV được tải lên được lưu trữ ở một nơi cục bộ tại máy nơi ứng dụng web đang chạy, vì vậy tôi không thể chỉ định vị trí tệp dữ liệu trong câu lệnh MySQL LOAD DATA INFILE. (Kịch bản tương tự cho yêu cầu tải xuống CSV). Vì vậy, những gì tôi đang cố gắng tìm là một cách để chỉ định tệp CSV "hầu như" - sử dụng luồng I/O có thể được xử lý bởi JDBC và MySQL, tương tự như quản lý blobs, v.v.

JDBC/MySQL hỗ trợ kỹ thuật này cho các tệp CSV để nhập và xuất?

Xin cảm ơn trước.

Trả lời

4

Bạn có thể chạy LOAD DATA INFILE bằng cách sử dụng tùy chọn LOCAL, sau đó sẽ tải tệp CSV từ nơi ứng dụng khách JDBC MySQL đang chạy, sử dụng com.mysql.jdbc.Statement#setLocalInfileInputStream. Ví dụ:

// conn is an existing java.sql.Connection to a remote server 
try (Statement st = conn.createStatement()) { 
    String localCsvFileSpec = "C:/Users/Jamie/Desktop/foo.csv"; // on this machine 
    ((com.mysql.jdbc.Statement) st).setLocalInfileInputStream(
      new FileInputStream(localCsvFileSpec)); 
    st.execute(
      "LOAD DATA LOCAL INFILE '(placeholder)' " + 
      "INTO TABLE table01 " + 
      "COLUMNS TERMINATED BY ',' " + 
      "(id, txt) " + 
      ""); 
} 

Xem this post để biết thêm thông tin.

Thật không may, có vẻ như bạn không thể sử dụng SELECT INTO OUTFILE để xuất tệp ở bất kỳ đâu ngoài máy chủ cơ sở dữ liệu của bạn, từ this answer on Stack Overflow.

+0

Câu trả lời này tiết kiệm thời gian của tôi! –

Các vấn đề liên quan