2014-12-19 70 views
0

我在使用jdbc连接连接平面文件(.txt,.xml,.csv,.xls等)时存在应用程序自身存在的问题。使用java jdbc连接平面文件

搜索后,我发现下面的一些建议。

1)xlsql
2)JDO

我试图与第一个(xlsql),下面是该过程。 首先创建核心Java项目并加载来自xlsql的jar文件。下面 是代码

Class.forName("com.nilostep.xlsql.jdbc.xlDriver"); 
final String dir = System.getProperty("user.dir")+"\\db\\xl"; 
conn = DriverManager.getConnection("jdbc:nilostep:excel:/"+dir); 
Statement stmt = con.createStatement(); 
String sql = "select * from Sheet1$"; 
ResultSet rs = stmt.executeQuery(sql); 
if(rs.next()){ 
System.out.println(rs.getString(1)); 
}else{ 
System.out.println("nodata...."); 
} 

跟它不存在的工作表Sheet1 $表。

请帮帮我。

回答

0

xlsql的原理有点复杂,它使用hsqldb或mysql作为sql引擎,使用excels文件中的数据创建相关数据库和表,然后在数据库上执行查询。它看待:

directory -> database 
    excel file -> schema 
    sheet -> table 

所以它使用模式前缀访问表。例如:

String sql = "select * from \"demo.xlsqly7\""; 

这里的“demo”是没有扩展名的excel文件名,xlsqly7是表名。在“XlSQL-Y8.zip”或“xlsql-Y7.zip”中,有一个“TestXlsql.java”示例。我也写了另一个问题:

public static void main(String[] args) throws Exception { 
    Class.forName("com.nilostep.xlsql.jdbc.xlDriver"); 
    String dir = "C:\\Temp\\xlsql-Y7"; 
    Connection con = DriverManager.getConnection("jdbc:nilostep:excel:"+dir); 
    Statement stmt = con.createStatement(); 
    String sql = "select * from \"Book1.MergedResult\""; 
    ResultSet rs = stmt.executeQuery(sql); 
    if(rs.next()) 
    { 
     System.out.println(rs.getString(1)); 
    } 
    else{ 
     System.out.println("nodata...."); 
    } 

} 

另一个制约因素是,片材的第一行必须是必须以大写字母开头的列名,或表将被视为无效。

这是关于XLSQL的最佳文档:http://blog.csdn.net/ailvey/article/details/8779119,不幸的是,它是用中文书写的。

+0

xlsql是否支持xlsx文件?我认为这取决于不支持xlsx文件的jxl。所以,我认为这个库不支持xlsx文件。我对么? – user7 2017-01-12 18:40:22