Voglio scrivere il risultato di una query sql in un file csv o excel e salvarlo in una cartella particolare. Vorrei sapere se questo può essere ottenuto utilizzando un programma java che può essere riutilizzato per qualsiasi risultato di query SQL. Vorrei anche sapere se questo può essere utilizzato per diversi tipi di database (Oracle, MySQL, MS SQL Server ecc.). Ho intenzione di allegare il file salvato a una e-mail (è questo possibile esportazione diretta di un risultato di query sql a una e-mail) .Si prega di aiutare.esportazione sql risultato della query su csv o excel
risposta
Ecco un esempio:
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) {
}
}
}
Sì!
È possibile connettersi ai diversi tipi di database utilizzando jdbc e quindi creare un Excel con i risultati (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();
}
}
}
}
Questo è un modo davvero intelligente per gestirlo se ci si trova in un ambiente Windows. Inoltre è relativamente "portatile" in quanto la stessa idea funziona con qualsiasi linguaggio. L'alternativa Apache non è una cattiva idea neanche. –
L'esempio mostra come leggere da un foglio di calcolo Excel, non come crearne uno. – datguy
Per far funzionare questo è necessario lavorare scrivere un piccolo codice che può occupare qualsiasi query e qualsiasi driver. Il primo input dovrebbe essere il nome del driver come input per il software che stai scrivendo. Quindi il software che si sta scrivendo dovrebbe essere in grado di eseguire qualsiasi SQL assegnato e fornire solo righe e colonne.
L'attività successiva viene eseguita per analizzare il ResultSet proveniente dal JDBC dell'applicazione java. O vuoi scrivere i risultati in un file CSV o EXCEL si basa su quanto sei bravo a fare con java api.
Scrivere l'output nel CVS è semplice e non trival. Non ho lavorato all'esportazione dei dati in Excel. Sono sicuro che trovi vasi per questo.
Questa è la mia soluzione. codice da inserire nella classe principale:
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();
}
La classe di base:
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();}
}
}
}
Questa è la classe dbconn per il collegamento al database di
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;
}
}
Questa è la classe per recuperare i dati dal tavolo per ResultSet e scrive file 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();
}
}
}
}
Con l'uso di openCSV API, è possibile esportare i dati in file 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();
Questa è la scheda dati di Excel
input excel file containing records Hi questa è la soluzione avete bisogno di 3 file 1.Input filo struttura filo 2.Output 3.data 4.Main filo 1.Input a leggere la stringa excel e di output per scrivere sql out put 2. struttura dati è per contenere e trasferire i dati
(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)
// Questa classe rappresenta la struttura di dati per contenere e trasformare l'input // dati come un elenco collegato di istruzioni sql
class InputString{
String line;
InputString next;
InputString(String x){
line = x;
}
String getLine(){
return line;
}
void setLine(String x){
line = x;
}
}
soluzione più semplice.
Metodo principale
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
Il codice sotto contare il numero di colonne in una tabella, e conservare in una matrice risultato.
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. Esportazione del risultato della query in un file .csv in SQL Server 2008
- 2. risultato query di esportazione come CSV tramite PHP
- 3. Come esportare il risultato della query in csv in Oracle SQL Developer?
- 4. Risultato della query Oracle SQL Developer Nome file di output della procedura guidata di esportazione
- 5. T-SQL: esportazione in nuovo file Excel
- 6. Esportazione da maiale a CSV
- 7. insolito sql risultato della query server di
- 8. Export risultato della query in Pervasive a txt/csv
- 9. Esportazione di dati MySQL in Excel/CSV tramite php
- 10. Esportazione del risultato dell'istruzione select nel formato CSV in DB2
- 11. esportazione dei dati in un file CSV - Excel VBA
- 12. esportazione sqlite in csv
- 13. Risultato query SQL in una stringa (o variabile)
- 14. Come inviare un risultato di una query in formato CSV?
- 15. esportazione in wordpress csv
- 16. Esportazione da SQL Server a Excel con intestazioni di colonna?
- 17. Redis-cli --csv opzione (esportazione in csv)
- 18. Esportare dati query SQL in Excel
- 19. Importazione csv PostgreSQL da esportazione csv MySQL?
- 20. Qt: Salva il risultato della query SQL nella variabile, utilizza la variabile C++ nella query SQL
- 21. esportazione in Excel C#
- 22. Come ottenere l'estensione del file come risultato della query sql?
- 23. Javascript per csv esportazione problema di codifica
- 24. Esportare Javascript o Flash in CSV/Excel
- 25. Esportazione di dati CSV utilizzando SQLCMD.EXE
- 26. Esportazione da SQL Server 2012 a .CSV tramite Management Studio
- 27. Query MY-SQL per esportare i dati nel file excel
- 28. esportazione generico in formato CSV con tavoli
- 29. Esportare direttamente una query in CSV utilizzando SQL Developer
- 30. Esportazione di un ListView in formato Excel
Questo è esattamente quello che stai cercando: https://www.youtube.com/watch?v=hlY_PoJhlMk (https://mvnrepository.com/ artefatto/net.sf.automatic-report-generator) –