Я хочу записать результат запроса sql в файл csv или excel и сохранить его в определенной папке. Я хотел бы знать, может ли это быть достигнуто с помощью java-программы который может быть повторно использован для любого результата запроса sql. Мне также хотелось бы знать, можно ли это использовать для разных типов баз данных (oracle, mysql, MS sql server и т. д.). Я планирую прикрепить сохраненный файл к электронной почте (это возможно напрямую экспортировать результат запроса sql в электронное письмо) .Пожалуйста, помогите.экспорт результата sql-запроса в csv или excel
ответ
Вот пример:
import java.io.*;
import java.sql.*;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
public class ExcelFile {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "root", "root");
PreparedStatement psmnt = null;
Statement st = connection.createStatement();
ResultSet rs = st.executeQuery("Select * from student");
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Excel Sheet");
HSSFRow rowhead = sheet.createRow((short) 0);
rowhead.createCell((short) 0).setCellValue("Roll No");
rowhead.createCell((short) 1).setCellValue("Name");
rowhead.createCell((short) 2).setCellValue("Class");
rowhead.createCell((short) 3).setCellValue("Marks");
rowhead.createCell((short) 4).setCellValue("Grade");
int index = 1;
while (rs.next()) {
HSSFRow row = sheet.createRow((short) index);
row.createCell((short) 0).setCellValue(rs.getInt(1));
row.createCell((short) 1).setCellValue(rs.getString(2));
row.createCell((short) 2).setCellValue(rs.getString(3));
row.createCell((short) 3).setCellValue(rs.getInt(4));
row.createCell((short) 4).setCellValue(rs.getString(5));
index++;
}
FileOutputStream fileOut = new FileOutputStream("c:\\excelFile.xls");
wb.write(fileOut);
fileOut.close();
System.out.println("Data is saved in excel file.");
rs.close();
connection.close();
} catch (Exception e) {
}
}
}
Да!
Вы можете подключиться к различным типам баз данных с помощью jdbc, а затем создать Excel с результатами (Seen here).
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestAccessExcel {
public static Connection getConnection() throws Exception {
String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:excelDB";
String username = "username";
String password = "pass";
Class.forName(driver);
return DriverManager.getConnection(url, username, password);
}
public static void main(String args[]) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = getConnection();
stmt = conn.createStatement();
String excelQuery = "select * from [Sheet1$]";
rs = stmt.executeQuery(excelQuery);
while (rs.next()) {
System.out.println(rs.getString("BadgeNumber") + " " + rs.getString("FirstName") + " "
+ rs.getString("LastName"));
}
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Это действительно удачный способ справиться с этим, если вы находитесь в среде Windows. Также он относительно «портативен» тем, что одна и та же идея работает с любым языком. Альтернатива Apache - тоже неплохая идея. –
Пример показывает, как читать из таблицы Excel, а не как ее создать. – datguy
Для этого вам необходимо написать небольшой код, который может содержать любой запрос и любой драйвер. Первым вводом должно быть имя драйвера в качестве ввода программного обеспечения, которое вы пишете. Затем программное обеспечение, которое вы пишете, должно быть в состоянии выполнить любой SQL, данный ему, и выдавать только строки и столбцы.
Следующая задача - проанализировать ResultSet, который поступает из JDBC приложения Java. Либо вы хотите записать результаты в CSV-файл, либо EXCEL основывается на том, насколько хорошо у вас есть java-api для этого.
Написание вывода в CVS легко и не является треугольным. Я не работал над экспортом данных в Excel. Я уверен, что вы найдете для этого банки.
Это мое решение. Код для вставки в главном классе:
import java.io.*;
import java.sql.*;
import com.company.*;
/**
* Created by MAXNIGELNEGRO
*/
String[] filePath = new String[] {"C:\\Users\\Documents\\MyFile.csv"};
String[] driverDB = new String[] {"oracle.jdbc.driver.OracleDriver"};
String[] stringConnDB = new String[] {"jdbc:oracle:thin:@//127.0.0.1:1881/mydb"};
String[] userDB = new String[] {"pippo"};
String[] passDB = new String[] {"pluto"};
String[] charSep = new String[] {";"};
Boolean colomn= new Boolean (true);
String[] queryDB = new String[] {"select * FROM MYQUERY"};
try{
System.out.println("---------------File exist?------------" + filePath[0]);
File fileTemp = new File(filePath[0].toString());
if (fileTemp.exists()){
fileTemp.delete();
System.out.println("---------------DELETE FILE------------" + filePath[0]);
}
System.out.println("QUERY: ---->"+ queryDB[0].toString());
exportQueryToCsv exp = new exportQueryToCsv();
exp.exportQueryToCsv(filePath,driverDB,stringConnDB,userDB,passDB,queryDB, colomn,charSep);
if (fileTemp.exists()){
System.out.println("---File created---" + filePath[0]);
}
}
catch(Exception e){
e.printStackTrace();
}
Ядром класс:
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Created by MAXNIGELNEGRO
*/
public class exportQueryToCsv {
public exportQueryToCsv(){}
public static void exportQueryToCsv (String[] filename, String[] driverDB, String[] connDB
, String[] userDB, String[] passDB, String[] queryDB, Boolean intestaFile
, String[] charSep) throws SQLException, IOException {
Statement stmt=null;
ResultSet rset=null;
Connection conn=null;
try { DBConn connessione = new DBConn();
conn=connessione.connect(driverDB[0],connDB[0],userDB[0],passDB[0]);
conn.setAutoCommit(false);
stmt = conn.createStatement();
rset = stmt.executeQuery(queryDB[0]);
ExportData2CSV csv = new ExportData2CSV();
csv.ExportData2CSV(rset,filename[0],intestaFile,charSep[0]);
csv.createFileCsv();
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
if (stmt != null) {stmt.close();}
if (conn != null) {conn.close();}
if (rset != null) {rset.close();}
}
}
}
Это класс DBConn для подключения к базе данных
import java.sql.*;
/**
* Created by MAXNIGELNEGRO
*/
public class DBConn {
public DBConn() {
}
public Connection connect(String driverDB, String db_connect_str, String db_userid, String db_password) {
Connection conn;
try {
Class.forName(driverDB).newInstance();
conn = DriverManager.getConnection(db_connect_str, db_userid, db_password);
} catch (Exception e) {
e.printStackTrace();
conn = null;
}
return conn;
}
}
Это класс для получающих данных из таблицы в Resultset и записывает в файл CSV
package com.company;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
/**
* Created by MAXNIGELNEGRO
*/
public class ExportData2CSV {
public ResultSet rset;
public String filename;
public Boolean colomnName;
public String charSep;
public void ExportData2CSV(ResultSet rset, String filename, Boolean colomnName, String charSep) {
this.rset = rset;
this.filename = filename;
this.colomnName = colomnName;
this.charSep = charSep;
}
public void createFileCsv() throws SQLException, IOException {
FileWriter cname = null;
try {
// WRITE COLOMN NAME
ResultSetMetaData rsmd = rset.getMetaData();
cname = new FileWriter(filename);
if (colomnName) {
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
cname.append(rsmd.getColumnName(i));
cname.append(charSep);
cname.flush();
}
cname.append(System.getProperty("line.separator"));
}
// WRITE DATA
while (rset.next()) {
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
if (rset.getObject(i) != null) {
String data = rset.getObject(i).toString().replaceAll(charSep, "");
cname.append(data);
cname.append(charSep);
} else {
String data = "null";
cname.append(data);
cname.append(charSep);
}
}
//new line entered after each row
cname.append(System.getProperty("line.separator"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cname != null) {
cname.flush();
cname.close();
}
if (rset != null) {
rset.close();
}
}
}
}
С использованием openCSV API, вы можете экспортировать данные в CSV-файле.
CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"), '\t');
Boolean includeHeaders = true;
java.sql.ResultSet myResultSet = .... //your resultset logic here
writer.writeAll(myResultSet, includeHeaders);
writer.close();
Это Паспорте EXcel
input excel file containing records Привет это решение вам нужно 3 файлов 1.INPUT нить 2.Output нить 3.data структура 4.Main 1.INPUT нить читать отличная и выходная нить для записи sql out put 2. Структура данных должна хранить и передавать данные
(InputThread.Java)
import java.io.*;
public class InputThread extends Thread{
String fp;
InputString is;
String tableName="emp";
String outFile;
InputThread(String FilePath,String nameOfTheTable,String outFileName){
fp=FilePath;
outFile=outFileName;
tableName=nameOfTheTable;
}
public void run(){
File file = new File(fp);
String line;
try{
BufferedReader br = new BufferedReader(new FileReader(file));
if((line=br.readLine()) != null)
is = new InputString(line);
//transform(is);
InputString tmp = new InputString(createTable(line));
//tmp.next = is;
is = tmp;
//tmp = tmp.next;
for(; (line = br.readLine()) != null;) {
tmp.next = new InputString(line);
tmp = tmp.next;
transform(tmp);
}
}catch(Exception e){ System.out.println("Error is :"+e); }
//traverse();
new OutputThread(is,outFile).start();
}
void transform(InputString x){
String[] arr = x.getLine().split(",");
String sql = "insert into "+tableName+" values(";
for(int i=0;i<arr.length;i++){
sql+="'"+arr[i]+"'";
if((i+1) < arr.length) sql+=",";
}
sql+=");";
x.setLine(sql);
}
String createTable(String x){
String[] arr = x.split(",");
String sql = "create database vamsidb "+ "use vamsidb "+"create table "+tableName+"(";
for(int i=0;i<arr.length;i++){
sql+=arr[i]+" varchar(50)";
if((i+1) < arr.length) sql+=",";
}
sql+=");";
return sql;
}
/*public void traverse(){
InputString tmp = is;
while(is != null){
System.out.println(is.getLine());
is=is.next;
}
}*/
}
(OutputThread.java)
import java.io.*;
public class OutputThread extends Thread{
InputString is;
String outFile;
OutputThread(InputString linkedList,String outFileName){
is=linkedList;
outFile = outFileName;
}
public void run(){
try{
FileOutputStream fos = new FileOutputStream(outFile);
while(is != null){
fos.write(is.getLine().getBytes());
is=is.next;
}
fos.close();
}catch(Exception e){
System.out.println("Error is :"+e);
}
}
}
(Main.java)
public class Main{
public static void main(String[] args){
InputThread it = new InputThread("sasken.csv","emp","output.sql");
it.start();
}
}
(DataStructure.java)
// Этот класс представляет собой структуру данных, для хранения и преобразования ввода // данные как связанный список операторов sql
class InputString{
String line;
InputString next;
InputString(String x){
line = x;
}
String getLine(){
return line;
}
void setLine(String x){
line = x;
}
}
простейшее решение.
Основной метод
private List<String> resultSetArray=new ArrayList<>();
private String username =""; // Enter DB Username
private String password = ""; // Enter DB password
private String url = ""; // Enter DB URL
Connection connection=DriverManager.getConnection(url,user,pwd);
public static void main(String args[]) throws Exception{
fetchDataFromDatabase("SQL queries", connection);
printToCsv(resultArray);
}
fetchDataFromDatabase
Код ниже подсчитать количество столбцов в таблице, и хранить в массиве результатов.
private void fetchDataFromDatabase(String selectQuery,Connection connection) throws Exception{
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(selectQuery);
int numCols = rs.getMetaData().getColumnCount();
while(rs.next()) {
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= numCols; i++) {
sb.append(String.format(String.valueOf(rs.getString(i))) + " ");
}
resultSetArray.add(sb.toString());
}
} catch (SQLException e) {
LOGGER.error("Sql exception " + e.getMessage());
}
}
printToCsv
public static void printToCsv(List<String> resultArray) throws Exception{
File csvOutputFile = new File(file_name);
FileWriter fileWriter = new FileWriter(csvOutputFile, false);
for(String mapping : resultArray) {
fileWriter.write(mapping + "\n");
}
fileWriter.close();
}
- 1. Экспорт в excel или csv
- 2. Экспорт результата таблицы Mysql в Excel, CSV или PDF
- 3. Экспорт excel в csv
- 4. Экспорт mySQL в excel или csv
- 5. Silverlight DataGrid: экспорт в excel или csv
- 6. Экспорт javascript или Flash в CSV/Excel
- 7. Экспорт DataGrid в CSV или Excel
- 8. Экспорт CSV для Excel
- 9. Экспорт результатов запроса в excel или csv на SQL-сервере
- 10. Экспорт результата хранимой процедуры в файл CSV
- 11. Экспорт TreeTable в Excel/CSV
- 12. Экспорт результата выбора запроса
- 13. Laravel whereBetween и экспорт результата в CSV
- 14. Экспорт результата запроса Vertica в файл csv
- 15. Экспорт CSV-файла в Excel 2007
- 16. Экспорт результата SQL-запроса в Excel
- 17. Экспорт надстрочной нотации в pandas dataframe в csv или excel
- 18. Экспорт таблицы Eclipse NAT в CSV/Excel
- 19. Экспорт лист из Excel в CSV
- 20. CasperJS: Экспорт скребковых данных в структурированный Excel или CSV
- 21. Экспорт каждого столбца Excel в отдельные текстовые или CSV-файлы?
- 22. Экспорт всех значений из рабочей области в excel или csv
- 23. . Экспорт SQL из PHPMyAdmin в Excel или CSV
- 24. Phonegap/Cordova Экспорт в CSV (или) Excel Программно
- 25. Joomla Экспорт или загрузка отчетов в CSV
- 26. Excel Экспорт дополнительных запятых в CSV
- 27. экспорт результата sql-запроса для excel
- 28. Экспорт mysql db в файл .csv/excel
- 29. экспорт диапазон Excel в CSV с Powershell
- 30. Экспорт в csv/excel от kibana
Это именно то, что вы ищете: https://www.youtube.com/watch?v=hlY_PoJhlMk (https://mvnrepository.com/ artefact/net.sf.automatic-report-generator) –