将 MySQL 表数据导出为 CSV 文件

目录

一、实现思路

二、核心代码

1. 数据库连接部分

2. 数据导出核心逻辑

3. CSV文件写入

三、完整代码实现

五、输出结果


 

一、实现思路

  1. 建立数据库连接

  2. 查询目标表的数据总量和具体数据

  3. 获取表的列名作为CSV文件的表头

  4. 将查询结果转换为二维数组格式

  5. 使用Hutool工具库将数据写入CSV文件

二、核心代码

1. 数据库连接部分

// 声明一个连接对象Connection conn;public void connDB() {try {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jk202508", "root", "152602");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
  • 使用Class.forName()加载MySQL JDBC驱动

  • 通过DriverManager.getConnection()建立数据库连接

  • 需要替换数据库URL、用户名和密码为实际值

2. 数据导出核心逻辑

// 查询数据总量
String sql1 = "select count(*) from " + tableName;// 查询所有数据
String sql2 = "select * from " + tableName;// 获取表结构信息
ResultSetMetaData rsmd = rs2.getMetaData();
int column = rsmd.getColumnCount();// 提取列名作为CSV表头
String[] heads = new String[column];
for(int i = 0; i < column; i++) {heads[i] = rsmd.getColumnName(i + 1);
}

3. CSV文件写入

// 创建CSV写入器,指定GBK编码以支持中文
CsvWriter cwriter = CsvUtil.getWriter("d:/emp.csv", CharsetUtil.CHARSET_GBK);// 写入表头
cwriter.writeHeaderLine(heads);// 逐行写入数据
for (int k = 0; k < datas.length; k++) {cwriter.write(datas[k]);
}
  • 使用Hutool工具库进行CSV文件的写入操作
  • 使用GBK编码以保证中文内容正常显示

三、完整代码实现

package com.demo1;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;import cn.hutool.core.text.csv.CsvUtil;
import cn.hutool.core.text.csv.CsvWriter;
import cn.hutool.core.util.CharsetUtil;public class ProduceCSV {// 声明一个连接对象Connection conn;public void connDB() {try {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jk202508", "root", "152602");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void exportCsv(String tableName) {// 查询数据总量String sql1 = "select count(*)  from  " + tableName;// 查询所有数据String sql2 = "select  *  from  " + tableName;String[][] datas = null;try {PreparedStatement pstmt1 = conn.prepareStatement(sql1);ResultSet rs1 = pstmt1.executeQuery();int row = 0;while (rs1.next()) {row = rs1.getInt(1);}PreparedStatement pstmt2 = conn.prepareStatement(sql2);ResultSet rs2 = pstmt2.executeQuery();// Java8 Stream 对数据的一个流式处理// 从功耗的角度,我们对数据库动作了2次。ResultSetMetaData rsmd = rs2.getMetaData();int column = rsmd.getColumnCount();// 提取列名作为CSV表头String[]  heads   = new String[column];for( int i =0;i<column;i++){heads[i] = rsmd.getColumnName(i+1);System.out.println(heads[i]);}datas = new String[row][column];int count = 0;while (rs2.next()) {for (int i = 0; i < column; i++) {datas[count][i] = rs2.getString(i + 1);}count++;}// 创建CSV写入器,指定GBK编码以支持中文CsvWriter cwriter = CsvUtil.getWriter("d:/emp.csv", CharsetUtil.CHARSET_GBK);// 二维数组,数组中的数组,{{},{},{}};// 写入表头cwriter.writeHeaderLine(heads);for (int k = 0; k < datas.length; k++) {cwriter.write(datas[k]);}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(null!=conn){try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}public static void main(String[] args) {ProduceCSV  p   = new ProduceCSV();p.connDB();p.exportCsv("t_emp");}}

五、输出结果

执行程序后,将在D盘根目录生成emp.csv文件,文件内容包含:

  1. 第一行为表头(数据库表的列名)

  2. 后续每一行对应数据库中的一条记录

  3. 文件使用GBK编码,支持中文显示

数据库中的t_emp表:

D盘根目录:

生成的CSV文件:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97916.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂RAG:从生活场景到核心逻辑,AI“查资料答题”原来这么简单

一文读懂RAG&#xff1a;从生活场景到核心逻辑&#xff0c;AI“查资料答题”原来这么简单 要理解 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;&#xff0c;不需要先背复杂公式&#xff0c;我们可以从一个生活场景切入——它本质是让AI…

git将当前分支推送到远端指定分支

在 Git 中&#xff0c;将当前本地分支推送到远程仓库的指定分支&#xff0c;可以使用 git push 命令&#xff0c;并指定本地分支和远程分支的映射关系。 基本语法 git push <远程名称> <本地分支名>:<远程分支名><远程名称>&#xff1a;通常是 origin&…

【Linux】线程封装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、为什么需要封装线程库&#xff1f; pthread的痛点&#xff1a; 封装带来的好处&#xff1a; 二、线程封装核心代码解析 1. 头文件定义&#xff08;Thread.hpp&a…

智慧交通管理信号灯通信4G工业路由器应用

在交通信号灯管理中传统的有线通讯&#xff08;光纤、网线&#xff09;存在部署成本高、偏远区域覆盖难、故障维修慢等问题&#xff0c;而4G工业路由器凭借无线化、高稳定、强适配的特性&#xff0c;成为信号灯与管控平台间的数据传输核心&#xff0c;适配多场景需求。智慧交通…

《Python Flask 实战:构建一个可交互的 Web 应用,从用户输入到智能响应》

《Python Flask 实战:构建一个可交互的 Web 应用,从用户输入到智能响应》 一、引言:从“Hello, World!”到“你好,用户” 在 Web 应用的世界里,最打动人心的功能往往不是炫酷的界面,而是人与系统之间的真实互动。一个简单的输入框,一句个性化的回应,往往能让用户感受…

开发效率翻倍:资深DBA都在用的MySQL客户端利器

MySQL 连接工具&#xff08;也称为客户端或图形化界面工具&#xff0c;GUI Tools&#xff09;是数据库开发、管理和运维中不可或缺的利器。它们比命令行更直观&#xff0c;能极大提高工作效率。以下是一份主流的 MySQL 连接工具清单&#xff0c;并附上了它们的优缺点和适用场景…

基于Docker和Kubernetes的CI/CD流水线架构设计与优化实践

基于Docker和Kubernetes的CI/CD流水线架构设计与优化实践 本文分享了在生产环境中基于Docker和Kubernetes构建高效可靠的CI/CD流水线的实战经验&#xff0c;包括业务场景、技术选型、详细方案、踩坑与解决方案&#xff0c;以及最终的总结与最佳实践&#xff0c;帮助后端开发者快…

Trae x 图片素描MCP一键将普通图片转换为多风格素描效果

目录前言一、核心工具与优势解析二、操作步骤&#xff1a;从安装到生成素描效果第一步&#xff1a;获取MCP配置代码第二步&#xff1a;下载第三步&#xff1a;在 Trae 中导入 MCP 配置并建立连接第四步&#xff1a;核心功能调用三、三大素描风格差异化应用四.总结前言 在设计创…

2 XSS

XSS的原理 XSS&#xff08;跨站脚本攻击&#xff09;原理 1. 核心机制 XSS攻击的本质是恶意脚本在用户浏览器中执行。攻击者通过向网页注入恶意代码&#xff0c;当其他用户访问该页面时&#xff0c;浏览器会执行这些代码&#xff08;没有对用户的输入进行过滤导致用户输入的…

GitHub每日最火火火项目(9.3)

1. pedroslopez / whatsapp-web.js 项目名称&#xff1a;whatsapp-web.js项目介绍&#xff1a;基于 JavaScript 开发&#xff0c;是一个用于 Node.js 的 WhatsApp 客户端库&#xff0c;通过 WhatsApp Web 浏览器应用进行连接&#xff08;A WhatsApp client library for NodeJS …

Ansible变量

Ansible变量定义变量规则&#xff1a;由字母/数字/下划线组成&#xff0c;变量需要以字母开头&#xff0c;ansible内置的关键字不能作为变量。ansible中&#xff0c;可以将变量简化为三个范围&#xff1a;Global范围&#xff08;高&#xff09;&#xff1a;从命令行和ansible配…

Elasticsearch 核心特性与应用指南

最近在准备面试&#xff0c;正把平时积累的笔记、项目中遇到的问题与解决方案、对核心原理的理解&#xff0c;以及高频业务场景的应对策略系统梳理一遍&#xff0c;既能加深记忆&#xff0c;也能让知识体系更扎实&#xff0c;供大家参考&#xff0c;欢迎讨论。一、核心优势 Ela…

力扣115:不同的子序列

力扣115:不同的子序列题目思路代码题目 给你两个字符串 s 和 t &#xff0c;统计并返回在 s 的 子序列 中 t 出现的个数。 测试用例保证结果在 32 位有符号整数范围内。 思路 首先我们来考虑特殊情况&#xff0c;当s串的长度小于t串时s串肯定就没有t串了。其他情况我们就需…

2004-2023年各省生活垃圾无害化处理率数据(无缺失)

2004-2023年各省生活垃圾无害化处理率数据&#xff08;无缺失&#xff09; 1、时间&#xff1a;2004-2023年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;生活垃圾无害化处理率 4、范围&#xff1a;30省 5、指标解释&#xff1a;生活垃圾无害化处理率指报…

【Python练习题】Python小白必练100题答案-第21-40题

练习题直达链接Python小白必练100题答案-第1-20题点我直达Python小白必练100题答案-第21-40题点我直达Python小白必练100题答案-第41-60题点我直达Python小白必练100题答案-第61-80题点我直达Python小白必练100题答案-第81-97题点我直达目录专栏导读循环结构 字符串操作第三部…

添加⽂件--场景⼆

添加⽂件–场景⼆ 学习到这⾥&#xff0c;我们已经清楚了如何向仓库中添加⽂件&#xff0c;并且对于⼯作区、暂存区、版本库也有了⼀定的认识。那么我们再展⽰⼀种添加⽂件的场景&#xff0c;能加深对⼯作区、暂存区、版本库的理解&#xff0c;⽰例如下&#xff1a; roothcss-e…

华为网路设备学习-31(BGP协议 六)

BGP路由属性的几种常见使用方法&#xff1a; 29章是 BGP路由汇总 与 as-path-filter&#xff08;正则表达式&#xff09; 30章是 Community 的使用方法 本章是 ip前缀列表ip-prefix 、 路由过滤 filter-policy 和路由策略 route-policy 一、在BGP中的 ip前缀列表&#xf…

Windows PostgreSQL JDBC驱动安装包位置

要在Windows系统上获取PostgreSQL JDBC驱动安装包&#xff08;后缀为.jar的文件&#xff09;&#xff0c;可通过以下官方及常用渠道获取&#xff0c;具体位置如下&#xff1a; ###&#x1f527; 1. 官方网站下载&#xff08;推荐&#xff09; 下载地址&#xff1a;https://jdb…

机器学习从入门到精通 - 聚类算法大比拼:K-Means、DBSCAN实战与评估陷阱

机器学习从入门到精通 - 聚类算法大比拼&#xff1a;K-Means、DBSCAN实战与评估陷阱 开场白&#xff1a;推开无监督学习的大门 朋友们&#xff0c;不知道你们有没有对着堆积如山、没有标签的数据发过愁&#xff1f;想从里面找出点规律&#xff0c;分组什么的&#xff0c;结果发…

AI 重构内容创作:从文案生成到视频剪辑,创作者该如何与 AI 协同共生?

一、引言&#xff1a;AI 掀起内容创作的 “重构浪潮”​行业现象引入&#xff1a;列举 AI 在内容创作领域的爆发式应用案例&#xff08;如某平台 AI 文案工具日生成量破百万、AI 视频剪辑软件用户增长超 300%&#xff09;​创作者需求变化&#xff1a;通过调研数据说明创作者对…