JDBC实现纵向导出数据库数据

2023-10-26

使用到的技术点:

1.Java写文件;

2.熟悉JDBC API;

3.Java集合ArrayList的使用;

4.Java字符串截取;


本代码仅供测试,如要使用,需自行增加数据库列类型定义和判定逻辑。


DBConnectMySQL.java

package com.manny.util.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBConnectMySQL {
	private static String userName = "root";
	private static String password = "123456";
	private static String driver = "com.mysql.jdbc.Driver";

	
	public Connection getConnection()
	{
		Connection conn = null;
		try {
			Class.forName(driver);

			String url = "jdbc:mysql://localhost:3306/life";
			conn = DriverManager.getConnection(url, userName, password);
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
}

ExportLongitudinalData.java

package com.manny.util;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.manny.db.common.DataTypeConstant;
import com.manny.util.db.DBConnectMySQL;

public class ExportLongitudinalData
{

	public static void main(String[] args)
	{

		DBConnectMySQL cm = new DBConnectMySQL();

		Connection conn = null;
		Statement sts = null;
		ResultSet rs = null;
		try
		{
			conn = cm.getConnection();
			sts = conn.createStatement();

			String sql = "select * from life.pictures";
			rs = sts.executeQuery(sql);

			ResultSetMetaData rsmd = rs.getMetaData();

			int colCount = rsmd.getColumnCount();

			System.out.println("colCount=" + colCount);

			List colNameAndDatas = new ArrayList();

			for (int i = 1; i <= colCount; i++)
			{

				String colTypeName = rsmd.getColumnTypeName(i);
				String colClassName = rsmd.getColumnClassName(i);

				String colName = rsmd.getColumnName(i);

				colNameAndDatas.add(colName);
			}

			while (rs.next())
			{

				for (int i = 1; i <= colCount; i++)
				{

					String colTypeName = rsmd.getColumnTypeName(i);

					String colData = getColumnData(rs, i, colTypeName);

					String currentData = (String) colNameAndDatas.get(i - 1);

					colNameAndDatas.set(i - 1, currentData + "," + colData);
				}

			}
			String fileName = getTableNameFromSQL(sql, "CSV");
			outputToFile(colNameAndDatas, fileName);

		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		catch (SecurityException e)
		{
			e.printStackTrace();
		}
		catch (IllegalArgumentException e)
		{
			e.printStackTrace();
		}

		finally
		{
			try
			{
				if (rs != null && !rs.isClosed())
					rs.close();
				if (sts != null && !sts.isClosed())
					sts.close();
				if (conn != null && !conn.isClosed())
					conn.close();
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}
		}

	}

	private static String getColumnData(ResultSet rs, int columnIndex, String colTypeName)
	{
		try
		{
			if (DataTypeConstant.TYPE_VARCHAR.equals(colTypeName))
			{
				return rs.getString(columnIndex);
			}
			if (DataTypeConstant.TYPE_CHAR.equals(colTypeName))
			{
				return rs.getString(columnIndex);
			}
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		return "";
	}

	private static void outputToFile(List rowDataList, String fileName)
	{
		try
		{
			String filePath = "D:\\temp\\";
			File dir = new File(filePath);
			if (!dir.exists())
			{
				dir.mkdirs();
			}
			File exportFile = new File(filePath + File.separator + fileName);
			if (!exportFile.exists())
			{
				exportFile.createNewFile();
			}

			FileWriter fw = new FileWriter(exportFile);

			for (Iterator iterator = rowDataList.iterator(); iterator.hasNext();)
			{
				String rowData = (String) iterator.next();
				System.out.println(rowData);

				fw.write(rowData + "\n");
			}
			fw.flush();
			fw.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	private static String getTableNameFromSQL(String sql, String fileExt)
	{
		String fileName = "";
		if (sql != null)
		{
			sql = sql.toUpperCase().trim();
			int whInd = sql.indexOf(" WHERE ");
			int frmInd = sql.indexOf(" FROM ");
			int ordInd = sql.indexOf(" ORDER BY ");
			if (frmInd == -1)
			{
				fileName = "ErrorSQL";
			}
			frmInd+=5;
			if (whInd > 0)
			{
				fileName = sql.substring(frmInd, whInd).trim();
			}
			else if (ordInd > 0)
			{
				fileName = sql.substring(frmInd, ordInd).trim();
			}
			else
			{
				fileName = sql.substring(frmInd).trim();
			}
		}
		return fileName + "." + fileExt;
	}

}
DataTypeConstant.java
package com.manny.db.common;
public interface DataTypeConstant
{
	public static String TYPE_VARCHAR="VARCHAR";
	public static String TYPE_CHAR="CHAR";
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC实现纵向导出数据库数据 的相关文章

随机推荐

  • 面试常用算法归纳

    面试常用算法归纳 算法时间复杂度 二叉查找树的时间复杂度 递归和分治 递归思维 汉诺塔问题 排序算法 最长子串 子序列 一维dp 有断层 最长递增子序列 最大子数组和 无重复字符的最长子串 买卖股票的最佳时机 二维dp 组合 子集 和排列
  • YOLOv5改进算法之添加CA注意力机制模块

    目录 1 CA注意力机制 2 YOLOv5添加注意力机制 送书活动 1 CA注意力机制 CA Coordinate Attention 注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制 CA 注意力机制的核心思想是引
  • Atmel Studio 7.0 快速上手指南(基于ASF)

    Atmel Studio 7 0 快速上手指南 基于ASF 程序员大本营 pianshen com
  • 【Kubernetes部署篇】K8s图形化管理工具Dasboard部署及使用

    文章目录 一 Dashboard简介 二 Dashboard部署安装 三 配置Dashboard登入用户 1 通过Token令牌登入 2 通过kubeconfig文件登入 四 Dashboard创建容器 五 扩展 一 Dashboard简介
  • switch...case...和if...else...区别

    switch 和 if 都是用来处理分支语句的 那么使用的时候 考虑到代码效率问题 就必须先来了解他们有什么区别 先来看看这两个语句的使用格式 if else if 表达式1 语句1 else if 表达式2 语句2 else if 表达式
  • Altium Designer (AD) 元器件出现绿色叉叉报错的解决办法

    出现报错的原因 元器件的安全间距小于设定的安全间距 但通常情况下 这个问题并不严重 可以理解为是一个警告 不去处理也可以 解决办法 点击菜单栏的工具 T 再点击复位错误标志 M 即可解决报错
  • 一个爬虫代码价值 7000 万

    一个爬虫代码价值 7000 亿 这样的代码你听说过吗 这是一个爬取比特币密钥的代码 比特币相信大家都有听说过 尤其最近比特币价格还突破了 5 万美元大关 现在1 枚比特币就价值 35 万人民币 难怪有句说 币圈一天 人间一年 最近朋友圈关于
  • 登录,注册HTML页面,详细过程

    1 页面说明 登录和注册切换按钮 当点击登录按钮时 显示登录表单 当点击注册按钮时 显示注册表单 每个表单都有对应的 JavaScript 校验函数 校验用户名 邮箱和密码是否为空 如果为空 会弹出警告框 2 效果图展示 3 代码部分 3
  • 手把手教你快速上手人体姿态估计(MMPose)

    最近在研究如何快速实现图像中人体姿态的估计 也就是常见的pose estimation任务 花了些时间 实际对比了AlphaPose BlazePose和MMPose BlazePose主要为移动端设计 AlphaPose安装配置比较麻烦
  • 服务器显卡驱动重装系统,windows7旗舰版系统重装显卡驱动的方法

    在windows7旗舰版电脑中 我们都是需要安装显卡驱动 但是如果显卡驱动安装不合适的话 就会容易导致电脑出现问题 所以如果有碰到安装到不合适的显卡驱动的话我们可以通过重装显卡驱动来解决 那么该怎么操作呢 为此小编这就给大家讲解一下wind
  • 图片 url blob base64 互转

    待补充 url to blob export const urlToBlob async url string gt return new Promise resolve gt fetch url then res gt res blob
  • Nginx

    HTTP和反向代理web服务器 Nginx是一个高性能的HTTP和反向代理web服务器 同时也提供了IMAP POP3 SMTP服务 Nginx是一款轻量级的Web服务器反向代理服务器及电子邮件 IMAP POP3 代理服务器 nginx反
  • 结合 服务器+后端+前端,完成 vue项目 后台管理系统

    目录 以上是项目的服务器php 后端 前端 已经可以正常运行 一 登录 登录页进度条 戳这里Vue项目电商后台管理系统 nprogress 进度条 活在风浪里的博客 CSDN博客 二 侧导航 三 列表页源码 四 角色分配 五 权限页面开发
  • 多线程实现Runable接口和Callable接口的区别

    先看源码callable接口 返回泛型v 可以抛出异常 Runable接口是抽象方法run 没有返回值 不能抛出异常 有异常在run方法内部处理 总结 区别1 两者最大的区别 实现Callable接口的任务线程能返回执行结果 而实现Runn
  • 交换机电口、光口、网络速率的基本概念总结

    电口和光口 千兆网 万兆网 POE 包转发率 背板带宽 交换容量 光纤跳线 电口和光口 电口 电口也即RJ45口 插双绞线的端口 网线 一般速率为10M或100M 即为百兆工业交换机 部分支持1000M 即为千兆交换机 光口 工业以太网交换
  • python sklearn 梯度下降法_Python与机器学习:梯度下降

    梯度下降 Gradient Descent 梯度下降法不是一个机器学习算法 是一种基于搜索的最优化算法 目的是最小化一个损失函数 同样 梯度上升法用于最大化一个效用函数 求解损失函数的最小值有两种方法 1 正规方程求解 上一章已经讲使用线性
  • java多线程和高并发系列三 & Synchronized锁详解

    目录 设计同步器的意义 如何解决线程并发安全问题 同步器的本质就是加锁 synchronized原理详解 synchronized底层原理 Monitor监视器锁 什么是monitor 对象的内存布局 对象头 对象头分析工具 锁的膨胀升级过
  • Python入门教学——多进程和多线程

    目录 一 线程和进程 1 线程和进程的基本概念 2 线程和进程的关系 3 串行 并行和并发 二 创建多个线程 1 线程相关的模块 2 创建线程 2 1 通过Thread类构造器来创建新线程 2 2 通过继承于Thread类来创建新线程 三
  • Kubernetes 集群使用 NFS 网络文件存储

    文章目录 1 NFS 介绍 2 环境 软件准备 3 Kubernetes HA 集群搭建 4 直接挂载 NFS 5 PV PVC 方式使用 NFS 6 StorageClasses 动态创建 PV 方式使用 NFS 1 NFS 介绍 Kub
  • JDBC实现纵向导出数据库数据

    使用到的技术点 1 Java写文件 2 熟悉JDBC API 3 Java集合ArrayList的使用 4 Java字符串截取 本代码仅供测试 如要使用 需自行增加数据库列类型定义和判定逻辑 DBConnectMySQL java pack