Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 可以在Vaadin中下载JPA存储库作为CSV文件吗?_Database_Spring Boot_Csv_Jpa_Vaadin14 - Fatal编程技术网

Database 可以在Vaadin中下载JPA存储库作为CSV文件吗?

Database 可以在Vaadin中下载JPA存储库作为CSV文件吗?,database,spring-boot,csv,jpa,vaadin14,Database,Spring Boot,Csv,Jpa,Vaadin14,假设我们已经定义了一个实体,并且它连接到一个数据库。现在,我们可以使用存储库访问数据库 @Autowired private DataLoggRepository dataLoggRepository; 如果我想从数据库中获取所有行并下载它。然后,我可以编写以下代码: List<DataLogg> dataLoggers = dataLoggRepository.findAll(); List dataLoggers=dataLoggRepository.findAll();

假设我们已经定义了一个实体,并且它连接到一个数据库。现在,我们可以使用存储库访问数据库

@Autowired
private DataLoggRepository dataLoggRepository;
如果我想从数据库中获取所有行并下载它。然后,我可以编写以下代码:

List<DataLogg> dataLoggers = dataLoggRepository.findAll();
List dataLoggers=dataLoggRepository.findAll();

现在,我如何才能以正确的方式在Vaadin中将对象
数据记录器
加载为CSV文件

在这里,您可以看到如何创建下载文件的链接:

Anchor csvLink = new Anchor(new StreamResource("file.csv",
                 () -> {
                     String csvString = ...// create the csv
                     return new ByteArrayInputStream(csvString.getBytes());
                 }), "Download CSV");

csvLink.getElement().setAttribute("download", true);

要创建CSV,您可以使用各种选项,如OpenCSV或直接从SQL查询创建CSV。

以下是一个工作示例

        // Download all data
        Anchor download = new Anchor(); // Add this to the layout
        loggerId.addValueChangeListener(e-> {
            String fileName = String.valueOf(loggerId.getValue()) + ".csv";
            List<DataLogg> selectedLogger = dataLoggRepository.findByLoggerId(loggerId.getValue());
            download.setHref(getStreamResource(fileName, selectedLogger));
        });
        download.getElement().setAttribute("download",true);
        download.add(new Button("Download", new Icon(VaadinIcon.DOWNLOAD_ALT)));
//下载所有数据
锚点下载=新锚点();//将此添加到布局中
loggerId.addValueChangeListener(e->{
字符串文件名=String.valueOf(loggerId.getValue())+“.csv”;
List selectedLogger=dataLoggRepository.findByLoggerId(loggerId.getValue());
下载.setHref(getStreamResource(文件名,selectedLogger));
});
download.getElement().setAttribute(“download”,true);
下载.添加(新按钮(“下载”,新图标(VaadinIcon.download_ALT));
作用

public StreamResource getStreamResource(String filename, List<DataLogg> selectedLogger) {
        // Create a large CSV file in a form of StringBuilder and then convert it all to bytes
        StringWriter stringWriter = new StringWriter();
        stringWriter.write("id, dateTime, DO0, DO1, DO2, DO3, AI0, AI1, AI2, AI3, loggerId, samplingTime\n");
        for (int i = 0; i < selectedLogger.size(); ++ i) {
            DataLogg dataLogg = selectedLogger.get(i);
            String row = dataLogg.getId() + "," +
            dataLogg.getDateTime() + "," +
            dataLogg.getDO0() + "," +
            dataLogg.getDO1() + "," +
            dataLogg.getDO2() + "," +
            dataLogg.getDO3() + "," +
            dataLogg.getAI0() + "," +
            dataLogg.getAI1() + "," +
            dataLogg.getAI2() + "," +
            dataLogg.getAI3() + "," +
            dataLogg.getLoggerId() + "," +
            dataLogg.getSamplingTime() + "\n";
            stringWriter.write(row);
        }

        // Try to download
        try {
            byte[] buffer = stringWriter.toString().getBytes("UTF-8");
            return new StreamResource(filename, () -> new ByteArrayInputStream(buffer));
        } catch (UnsupportedEncodingException e) {
            byte[] buffer = new byte[] {0};
            return new StreamResource(filename, () -> new ByteArrayInputStream(buffer));
        }
    }
public StreamResource getStreamResource(字符串文件名,列表选择记录器){
//以StringBuilder的形式创建一个大型CSV文件,然后将其全部转换为字节
StringWriter StringWriter=新StringWriter();
write(“id,dateTime,DO0,DO1,DO2,DO3,AI0,AI1,AI2,AI3,loggerId,samplingTime\n”);
对于(int i=0;inewbytearrayinputstream(缓冲区));
}捕获(不支持的编码异常e){
字节[]缓冲区=新字节[]{0};
返回新的StreamResource(文件名,()->newbytearrayinputstream(缓冲区));
}
}

使用任何CSV生成工具,如OpenCSV@Eklavya非常感谢。OpenCSV与Vaadin一起工作吗?Vaadin是web应用程序框架。我可以使用按钮吗?您的代码与Vaadin14不兼容。您可以将链接设置为按钮样式。但是你不能使用按钮。你说不工作是什么意思?我正在我的应用程序中使用它。您是否收到错误消息?也可以查看我的答案。
我可以使用按钮吗?
-是的,您可以使用将显示按钮而不是锚定链接的附加组件。我所有的下载都使用这个。