用java实现把sql语句查询的结果集写到dbf文件中
来源:互联网 发布:华为交换机 允许mac表 编辑:程序博客网 时间:2024/06/06 02:53
这个其实就是一个导出生成DBF文件的功能,实现思路是这样:首先动态拼接一个sql语句,执行后返回结果集到代码中,再通过dbfwriter对象把结果集的数据写到dbf文件里。
1、打开数据库连接,执行sql语句,获得结果集
private Connection bakConn;private ResultSet RowSet = null;private Statement stats = null;private String formate = "yyyyMMdd";@Overridepublic void run() {try {bakConn = DatabaseConn.getConnection();} catch (Exception e1) {e1.printStackTrace();}String sql = "select * from tablename";stats = bakConn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);RowSet = stats.executeQuery(sql);RowSet.beforeFirst();2、定义需要写到dbf的字段名,类型,长度,定义dbf文件的字段名,类型(从结果集中的数据库类型对应转换过来)
String[] strutName = new String[] {...} // field name
String[] rsTypejc = new String[] {...} // field type
int[] strutLength2 = new int[] { ...} // field length
/** * 把数据库字段类型转换成DBF字段类型 */public static byte ResultsetTypeToDbfType(String rsType) {byte strutType = DBFField.FIELD_TYPE_C;if (rsType == null) {return DBFField.FIELD_TYPE_C;}rsType = rsType.trim().toLowerCase();if (rsType.equals("float") || rsType.equals("int")|| rsType.equals("numeric") || rsType.equals("decimal")|| rsType.equals("smallint") || rsType.equals("tinyint")) {// rsType.equals("bigint")// ||strutType = DBFField.FIELD_TYPE_N;} else if (rsType.equals("datetime") || rsType.equals("smalldatetime")) {strutType = DBFField.FIELD_TYPE_C;} else if (rsType.equals("bit")) {strutType = DBFField.FIELD_TYPE_L;} else {strutType = DBFField.FIELD_TYPE_C;}return strutType;}上面是把数据库类型转为dbf类型。
下面是具体的dbf写操作:
填充field,填入转换后类型等等,把结果集rowset里的数据逐条遍历,把数据放进writer里
// 定义dbf对象DBFField[] fields = new DBFField[strutName.length];System.out.println(fields);byte[] strutTypejc = new byte[strutName.length];for (int i = 0; i < strutName.length; i++) {fields[i] = new DBFField();fields[i].setName(strutName[i]);strutTypejc[i] = ResultsetTypeToDbfType(rsTypejc[i]);fields[i].setDataType(strutTypejc[i]);fields[i].setFieldLength(strutLength[i]);}DBFWriter writer = new DBFWriter();System.out.println(fields);writer.setFields(fields);writer.setCharactersetName("GBK");// 一条条的写入记录Object[] rowData = new Object[strutName.length];RowSet.last();RowSet.beforeFirst();while (RowSet.next()) {rowData = ResultsetToArrayJCTP(RowSet, rowData, "jc",strutName, rsTypejc);if (rowData != null) {writer.addRecord(rowData);}}// 把装了文件的输出流放到writer里writer.write(fos);这里注意:fos是文件输出流,具体处理在下面
file = new File("C:" + File.separator + "xxx"+ File.separator + "001" );if (file.isFile()) {file.delete();}OutputStream fos = null;// 定义输出流,并关联的一个文件 try { // 把文件放到输出流fos = new FileOutputStream(file);} catch (FileNotFoundException e2) {e2.printStackTrace();}dbf对象的writer通过文件流来操作文件,不是直接写入文件,如下:
writer = new DBFWriter(file);
writer.write();这种做法是不正确的,会导致文件无法及时释放,直至整个应用关闭才可释放。
最后是资源的释放:
finally { // 按顺序释放资源// 关闭连接try {// 流关闭fos.close();// 关闭结果集if (this.getRowSet() != null) {this.getRowSet().close();this.setRowSet(null);}if (this.getStats() != null) { // 关闭语句this.getStats().close();this.setStats(null);}if (this.getBakConn() != null) { // 关闭连接this.getBakConn().close();this.setBakConn(null);}} catch (Exception e1) {e1.printStackTrace();}}
在finally块中按顺序释放资源
阅读全文
0 0
- 用java实现把sql语句查询的结果集写到dbf文件中
- 如何用C#来实现把FoxPro(以.dbf结尾文件)和Excle数据导入SQL语句中
- 直接用SQL语句把DBF导入SQLServer
- 怎么把DBF文件导入到SQL SERVER 2000中?
- 把sql查询结果输出到文件
- 如何在sql/plus中把select语句查询显示出来的结果中的显示字段长度缩小
- sql查询语句的结果字段中有空值
- java中把查询出来的结果进行分页
- SQL中,把SQL查询分析器查询出来的结果,导出到EXCEL表格
- sql中把一个查询结果当做一个新表来查询
- 查询结果分页显示的SQL语句
- 查询结果分页显示的sql语句
- 用java把从数据库中查询出的结果集重新按照结果中的几个字段重新排序
- 把查询语句放到XML文件中
- 将VFP的DBF文件导入SQL-Server2005中
- 关于把解析SQL文件和把解析的结果导入Excel中
- SQL语句中一个查询结果集作为另一个查询的范围
- 关于Java数据库查询结果保存到DBF的小小总结^_^
- Spring中bean的含义
- React-Native 学习笔记1
- 第12周项目2- Kruskal算法的验证
- ScrollView嵌套webview之后滑动冲突的解决方案
- 打印输入中单词长度的水平直方图
- 用java实现把sql语句查询的结果集写到dbf文件中
- coursera视频无法播放的解决方法
- 数据结构(栈)
- Android中TabLayout修改字体大小
- 第九周项目三
- 数据结构上机实践第11周项目1
- 第10周项目3- 中序线索化二叉树的算法验证
- Linux command
- 自己看别人看了没用-多组调图