[Excel Jdbc Driver] [xlsql-Y7] [java jdbc sql操作excel]
2017-02-24 18:39
246 查看
相关原理可以参考http://blog.csdn.net/ailvey/article/details/8779119博客,里面有详细介绍,请务必先看一下,实际操作时候,会遇到一些问题。
本文主要说明具体如何使用xlsql来实现java项目 通过jdbc方式连接excel文档,通过sql语句来执行增删改查等功能。
前言
因为想实现web项目直接发给用户,不需要用户安装任何程序,一键运行web项目,而遇到的问题。
容器tomcat 可以指定相对路径的jdk ,用户可以不用安装jdk,都打包在一起即可,但数据库始终需要安装,所以考虑用excel代替数据库来进行读取,但用poi jxl 操作excel有一定学习成本,而且不方便excel 与数据库之间的切换,最终考虑用jdbc方式通过sql语句来操作excel文档。
(更新:发现自己犯傻了,居然忘了还有嵌入式数据库这种东西,直接用嵌入式数据就可以了,比如 SQLite
,运行效率更好,支持jdbc,完美整合spring等框架)
第一行为 英文 大写
的字段名(汉字也可以,尽量不要使用汉字做为字段名),第二行开始为字段信息。
如图:
,
数据一次性录入,尽量不要多次编辑修改,可先修改好内容,新建sheet页 一次性贴入。
遇到过 删除最后几行,还是会被读取到,字段显示为为null的问题,新建的sheet不会产生这种现象。
commons-cli-1.0.jar
commons-logging.jar
crimson.jar
hsqldb.jar
jaxp.jar
jconfig.jar
jmxri.jar
jxl.jar
mysql-connector-java-3.0.10-stable-bin.jar
实际使用在项目中,很可能存在jar包冲突问题,。例如用在spring框架中,启动可能有报错,此时可以根据提示信息删除对应的非核心jar包,或者一个一个删除、重新启动,来排查 是哪个jar包有冲突。
建立连接后增删改查都可以高速执行(因为excel信息已缓存到内存,所有操作都在内存中进行),但执行增删改等非查询操作时,不会写入到excel文件,需要代码控制关闭数据库连接才可以写到文件,通过con.close()方式关闭(excel文件全部更新 跟内存中的数据库表一致)。项目中可提供保存更改按钮,用户点击
即执行关闭数据库连接操作,即可批量提交用户修改操作到excel,减少频繁耗时的excel读取操作。
sql语句可参考hsqldb数据库sql规范。
相关项目源码文件(正常使用下载这个):http://download.csdn.net/detail/ab2361936/9764570
xlsql-Y7源码项目文件(需要看xlsql-Y7.jar的源码的下载这个):http://download.csdn.net/detail/ab2361936/9764574
本文主要说明具体如何使用xlsql来实现java项目 通过jdbc方式连接excel文档,通过sql语句来执行增删改查等功能。
前言
因为想实现web项目直接发给用户,不需要用户安装任何程序,一键运行web项目,而遇到的问题。容器tomcat 可以指定相对路径的jdk ,用户可以不用安装jdk,都打包在一起即可,但数据库始终需要安装,所以考虑用excel代替数据库来进行读取,但用poi jxl 操作excel有一定学习成本,而且不方便excel 与数据库之间的切换,最终考虑用jdbc方式通过sql语句来操作excel文档。
(更新:发现自己犯傻了,居然忘了还有嵌入式数据库这种东西,直接用嵌入式数据就可以了,比如 SQLite
,运行效率更好,支持jdbc,完美整合spring等框架)
注意事项
Excel Jdbc Driver方式操作excel,需要excel格式固定(excel需要老版本97-03 ):第一行为 英文 大写
的字段名(汉字也可以,尽量不要使用汉字做为字段名),第二行开始为字段信息。
如图:
,
数据一次性录入,尽量不要多次编辑修改,可先修改好内容,新建sheet页 一次性贴入。
遇到过 删除最后几行,还是会被读取到,字段显示为为null的问题,新建的sheet不会产生这种现象。
需要的jar包
xlsql-Y7.jar 核心jar包(官方的使用有问题,本人用的是ailvey博主提供的jar包,并进行了修改,解决了查询结果包含表头问题,现在默认为第二行开始,不包含第一行表头)commons-cli-1.0.jar
commons-logging.jar
crimson.jar
hsqldb.jar
jaxp.jar
jconfig.jar
jmxri.jar
jxl.jar
mysql-connector-java-3.0.10-stable-bin.jar
实际使用在项目中,很可能存在jar包冲突问题,。例如用在spring框架中,启动可能有报错,此时可以根据提示信息删除对应的非核心jar包,或者一个一个删除、重新启动,来排查 是哪个jar包有冲突。
代码示例
完全为java jdbc操作,读取excel需要一定时间,建议数据库连接设计为单例,不要关闭,防止重复建立数据库连接 耗时。建立连接后增删改查都可以高速执行(因为excel信息已缓存到内存,所有操作都在内存中进行),但执行增删改等非查询操作时,不会写入到excel文件,需要代码控制关闭数据库连接才可以写到文件,通过con.close()方式关闭(excel文件全部更新 跟内存中的数据库表一致)。项目中可提供保存更改按钮,用户点击
即执行关闭数据库连接操作,即可批量提交用户修改操作到excel,减少频繁耗时的excel读取操作。
sql语句可参考hsqldb数据库sql规范。
String driver = "com.nilostep.xlsql.jdbc.xlDriver"; Class.forName(driver).newInstance(); String protocol = "jdbc:nilostep:excel"; String database = "C:\\e";//填写excel文件所在的文件夹路径 String url = protocol + ":" + database; Connection con = DriverManager.getConnection(url); Statement stm = con.createStatement(); String sql = "select * from \"DEMO.Sheet1\""; //表名称为 excel文件名加上sheet页名称,中间·连接,外面需要有双引号 并\转义 ResultSet rs = stm.executeQuery(sql); ResultSetMetaData m = null; m = rs.getMetaData(); int columns = m.getColumnCount(); while (rs.next()) { for (int i = 1; i <= columns; i++) { 8234 // 循环获取字段信息。()里面也可以写字段名字来一次性获取字段信息 rs.getString("name"); System.out.print(rs.getString(i)); System.out.print("\t\t"); } System.out.println(); }
相关项目源码文件(正常使用下载这个):http://download.csdn.net/detail/ab2361936/9764570
xlsql-Y7源码项目文件(需要看xlsql-Y7.jar的源码的下载这个):http://download.csdn.net/detail/ab2361936/9764574
相关文章推荐
- Hibernate操作Blob类型字段出现java.lang.AbstractMethodError: oracle.jdbc.driver.OracleResultSetImpl.getBlob(Ljava/lang/String;)Ljava/sql/
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 ‘xxx’ 无效
- java.sql.SQLException: [ Microsoft ][SQLServer 2000 Driver for JDBC ] Error establishing socket.
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver Eclipse3.1 数据库连接测试程序(SQL Server 2000 Driver for JDBC Service Pack 3 安装测试)
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
- java.sql.SQLException [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名'*'无效
- 关于javax.servlet.ServletException: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket. 错
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Underlying input stream returned zero bytes
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Software caused
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'xxx' 无效
- JDBC规范-java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]The specified SQL type is not supported by this driver
- java.sql.SQLWarning: [Microsoft][SQLServer 2000 Driver for JDBC]Database changed to jive
- java.sql.sqlexception microsoft sqlserver 2000 driver for jdbc sqlserver 对象名 无效。
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 ‘xxx’ 无效
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]The DBMS returned an unspecified error.
- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing