数据库字段 到类 java bean_将数据库中表的字段自动转换为javaBean实体类

具体代码如下:

package param;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.sql.Connection;

import java.sql.DatabaseMetaData;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.ResultSetMetaData;

import java.util.ArrayList;

import java.util.List;

public class AutoCreateBean {

// mysql 驱动类

private static final String DRIVER = "com.mysql.jdbc.Driver";

// 数据库登录用户名

private static final String USER = "root";

// 数据库登录密码

private static final String PASSWORD = "123456";

// 数据库连接地址

private static final String URL = "jdbc:mysql://localhost:3306/ssm";

private static String tablename;

private String[] colnames; // 列名数组

private String[] colTypes; // 列名类型数组

private int[] colSizes; // 列名大小数组

private boolean f_util = false; // 是否需要导入包java.util.*

private boolean f_sql = false; // 是否需要导入包java.sql.*

/**

* 获取指定数据库中包含的表 TBlist

*

* @packageName com.util

* @return 返回所有表名(将表名放到一个集合中)

* @throws Exception

*/

public List TBlist() throws Exception {

// 访问数据库 采用 JDBC方式

Class.forName(DRIVER);

Connection con = DriverManager.getConnection(URL, USER, PASSWORD);

DatabaseMetaData md = con.getMetaData();

List list = null;

ResultSet rs = md.getTables(null, null, null, null);

if (rs != null) {

list = new ArrayList();

}

while (rs.next()) {

/*

* 设置表名

*/

String tableName = rs.getString("TABLE_NAME");

list.add(tableName);

}

rs = null;

md = null;

con = null;

return list;

}

public void GenEntity(List TBlist, String packageName)throws Exception {

Connection conn = null;

PreparedStatement pstmt = null;

ResultSetMetaData rsmd = null;

// 访问数据库 采用 JDBC方式

Class.forName(DRIVER);

conn = DriverManager.getConnection(URL, USER, PASSWORD);

for (int k = 0; k < TBlist.size(); k++) {

tablename = TBlist.get(k);

String strsql = "select * from " + tablename;

pstmt = conn.prepareStatement(strsql);

rsmd = pstmt.getMetaData();

int size = rsmd.getColumnCount();

// 共有多少列

colnames = new String[size];

colTypes = new String[size];

colSizes = new int[size];

for (int i = 0; i < rsmd.getColumnCount(); i++) {

colnames[i] = rsmd.getColumnName(i + 1);

colTypes[i] = rsmd.getColumnTypeName(i + 1);

if (colTypes[i].equalsIgnoreCase("datetime")) {

f_util = true;

}

if (colTypes[i].equalsIgnoreCase("image")

|| colTypes[i].equalsIgnoreCase("text")) {

f_sql = true;

}

colSizes[i] = rsmd.getColumnDisplaySize(i + 1);

}

markerBean(initcap(tablename), parse(), packageName);

}

pstmt = null;

rsmd = null;

conn = null;

}

/**

* 解析处理(生成实体类主体代码)

*/

private String parse() {

StringBuffer sb = new StringBuffer();

if (f_util) {

sb.append("import java.util.Date;\r\n");

}

if (f_sql) {

sb.append("import java.sql.*;\r\n\r\n\r\n");

}

sb.append("public class " + initcap(tablename) + " {\r\n");

processAllAttrs(sb);

processAllMethod(sb);

sb.append("}\r\n");

return sb.toString();

}

/**

* 创建java 文件 将生成的属性 get/set 方法 保存到 文件中 markerBean

*

* @packageName fanshe

* @param className

* 类名称

* @param content

* 类内容 包括属性 getset 方法

*/

public void markerBean(String className, String content, String packageName) {

String folder = System.getProperty("user.dir") + "/src/" + packageName + "/";

File file = new File(folder);

if (!file.exists()) {

file.mkdirs();

}

String fileName = folder + className + ".java";

try {

File newdao = new File(fileName);

FileWriter fw = new FileWriter(newdao);

fw.write("package\t" + packageName.replace("/", ".") + ";\r\n");

fw.write(content);

fw.flush();

fw.close();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 生成所有的方法

*

* @param sb

*/

private void processAllMethod(StringBuffer sb) {

for (int i = 0; i < colnames.length; i++) {

sb.append("\tpublic void set" + initcap(colnames[i]) + "("

+ sqlType2JavaType(colTypes[i]) + " " + colnames[i]

+ "){\r\n");

sb.append("\t\tthis." + colnames[i] + " = " + colnames[i] + ";\r\n");

sb.append("\t}\r\n");

sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get"

+ initcap(colnames[i]) + "(){\r\n");

sb.append("\t\treturn " + colnames[i] + ";\r\n");

sb.append("\t}\r\n");

}

}

/**

* 解析输出属性

*

* @return

*/

private void processAllAttrs(StringBuffer sb) {

for (int i = 0; i < colnames.length; i++) {

sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colnames[i] + ";\r\n");

}

}

/**

* 把输入字符串的首字母改成大写

*

* @param str

* @return

*/

private String initcap(String str) {

char[] ch = str.toCharArray();

if (ch[0] >= 'a' && ch[0] <= 'z') {

ch[0] = (char) (ch[0] - 32);

}

return new String(ch);

}

private String sqlType2JavaType(String sqlType) {

if (sqlType.equalsIgnoreCase("bit")) {

return "bool";

} else if (sqlType.equalsIgnoreCase("tinyint")) {

return "byte";

} else if (sqlType.equalsIgnoreCase("smallint")) {

return "short";

} else if (sqlType.equalsIgnoreCase("int")) {

return "int";

} else if (sqlType.equalsIgnoreCase("bigint")) {

return "long";

} else if (sqlType.equalsIgnoreCase("float")) {

return "float";

} else if (sqlType.equalsIgnoreCase("decimal")

|| sqlType.equalsIgnoreCase("numeric")

|| sqlType.equalsIgnoreCase("real")) {

return "double";

} else if (sqlType.equalsIgnoreCase("money")

|| sqlType.equalsIgnoreCase("smallmoney")) {

return "double";

} else if (sqlType.equalsIgnoreCase("varchar")

|| sqlType.equalsIgnoreCase("char")

|| sqlType.equalsIgnoreCase("nvarchar")

|| sqlType.equalsIgnoreCase("nchar")) {

return "String";

} else if (sqlType.equalsIgnoreCase("datetime")

||sqlType.equalsIgnoreCase("date")){

return "Date";

}

else if (sqlType.equalsIgnoreCase("image")) {

return "Blob";

} else if (sqlType.equalsIgnoreCase("text")) {

return "Clob";

}

return null;

}

public static void main(String[] args) throws Exception {

AutoCreateBean auto = new AutoCreateBean();

List list = auto.TBlist();

auto.GenEntity(list, "bean");

System.out.println("成功!");

}

}

在此处的"bean"对应的是项目下的bean包,如下所示:

32915e6ec4067d78e859c140ccee502a.png

67700d9f3436730a4ff2ace01cc9c5bc.png

数据库里有多少张表就会创建多少张javaBean。最后结果如下:

df3dc3f84065a2c93ed625698080588e.png

特别在此声明,期间可能遇到错误,所以可以用下面的类来进行测试是否连接成功:

package param;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class ConnectToDataBase {

public static Connection getDataBaseConnection(){

String driver="com.mysql.jdbc.Driver";

String url="jdbc:mysql://localhost:3306/ssm";

String user="root";

String password="123456";

//加载驱动程序

try {

Class.forName(driver);

//System.out.println("驱动程序加载成功");

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

//链接数据库

Connection conn=null;

try {

conn=DriverManager.getConnection(url, user, password);

if (!conn.isClosed()) {

System.out.println("连接数据库成功");

}

} catch (SQLException e) {

System.out.println("链接数据库失败: "+e.getMessage());

}

return conn;

}

public static void main(String[] args) {

getDataBaseConnection();

}

}

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

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

相关文章

el-drawer点击的时候为什么有边框_剪映教学之视频拍摄加剪辑【一】:出视频上下黑色边框模糊效果,视频广告配音...

抖音小视频已经成为风靡全国的一个app了&#xff0c;很多人都喜欢看抖音来打发时间&#xff0c;而经常看小视频的应该都见到过这种现象&#xff0c;就是有一些小视频我们在观看的时候&#xff0c;发现这个小视频的上下都有黑色边框或者模糊的效果&#xff0c;实际这都是一些拍摄…

java synchronized 静态_Java之Synchronized修饰实例方法和静态方法

一、Synchronized修饰实例方法&#xff0c;实际上是对调用该方法的对象加锁&#xff0c;俗称“对象锁”情况一&#xff1a;​同一个对象在两个线程中分别访问该对象的两个同步实例方法结果&#xff1a;会产生互斥​原因&#xff1a;因为锁针对的是对象&#xff0c;当对象调用​…

网站漏洞扫描工具_如何实现免费网站漏洞扫描?推荐一款神器给你

网站漏洞想必有网站的人都比较了解&#xff0c;想要了解网站漏洞&#xff0c;最好的办法就是给网站做一次漏洞扫描&#xff0c;网站漏扫产品比较多&#xff0c;费用也从几十/次到几千/次不等&#xff0c;但是对于我这种小企业来说&#xff0c;几千一次也是非常贵的&#xff0c;…

java mvc设计模式_JavaEE知识点:MVC设计模式

MVC全名是Model View Controller&#xff0c;是模型(model)-视图(view)-控制器(controller)的缩写&#xff0c;是一种软件设计典范&#xff0c;用一种业务逻辑、数据、界面显示分离的方法组织代码&#xff0c;将业务逻辑聚集到一个部件里面&#xff0c;在改进和个性化定制界面及…

mysql 导出数据字典_操作MySQL?这个库比pymysql香一百倍

原创&#xff1a; 阿亮 Python极客社区操作MySQL&#xff0c;我们都习惯于用pymsq&#xff0c;基本流程就是创建连接创建游标执行SQL关闭连接代码是这样的import pymysql# 1.创建连接conn pymysql.connect(host127.0.0.1, port3306, userroot, passwordroot, charsetutf8)# 2.…

java putifabsent_java8中Map的一些骚操作总结

一 前言本篇内容是关于 map 新特性的一些方法使用上的介绍&#xff0c;如果有不足之处欢迎补充&#xff01;&#xff01;二 map新特性关于以下函数式编程的函数的计算知识追寻者都使用 简单字符串代替了&#xff0c;参数无非就是Key,value&#xff1b;2.1 forEachforEach迭代&a…

java 注解 target_详解JDK 5 Annotation 注解之@Target的用法

前言目前&#xff0c;越来越多的架构设计在使用注解&#xff0c;例如spring3.0、struts2等框架。让我们先来看看注解的定义。如下是一段使用了JDK 5 Annotation Target的代码&#xff1a;Target({ElementType.METHOD})Retention(RetentionPolicy.RUNTIME)InheritedDocumentedpu…

pajek软件使用方法_使用Jco远程连接SAP软件系统方法

作者&#xff1a;JongWill声明&#xff1a;本文章仅用于SAP软件的应用与学习&#xff0c;不代表SAP公司。(注&#xff1a;文中所示截图来源SAP软件&#xff0c;相应著作权归SAP所有。)SAP公司的ERP系统是一套成熟的套装软件&#xff0c;它是博大精深的&#xff0c;但也不是无所…

镜像浏览器_害怕win10镜像有第三方软件,直接到微软官网下载,原汁原味

很多时候我们在网上下载的一些win10镜像ISO文件都包含有一些第三方的软件&#xff0c;虽然这都是网站为了盈利而不得不做的&#xff0c;但是辛苦下载安装好的windows系统&#xff0c;如果有乱七八糟的软件心里真的会非常不舒服&#xff0c;甚至以前电脑城的win7所谓正版光碟都是…

post大小限制_作为一个程序员,面试中常问的get和post的区别,你真的知道吗

作为一个程序员无论是搞前端的还是搞后端的&#xff0c;只要问起来GET和POST的区别&#xff0c;都能说出来个一二三四来。你可能自己写过无数个GET和POST请求&#xff0c;或者也看过很多权威网站总结出来的区别&#xff0c;你非常清楚的知道什么时候用GET什么时候用POST.当你在…

java static 修饰变量吗_Java面试 - static 修饰的变量和方法有哪些特点?

1、static修饰的变量和方法&#xff0c;在类加载时即被初始化&#xff0c;可直接通过类名.变量名和类型.方法名进行调用。2、static修饰的变量&#xff0c;在类加载时会被分配到数据区的方法区。类的实例可共享方法区中的变量。如果static修饰的变量发生改变&#xff0c;那么所…

安卓手机如何防盗_如何设置安卓手机各版本USB调试模式

关注我们&#xff0c;获得更多资讯在这篇教学中&#xff0c;小蛙会详细向大家讲解USB调试模式的开启及关闭方法&#xff0c;以及其用途。在这个过程中&#xff0c;由于Android 机型众多&#xff0c;所以无办法列举太多。但请相信小蛙&#xff0c;开启USB 调试的操作方法基本上是…

iphone同步助手_iPhone 与安卓手机之间如何进行资料迁移

​上一期我们介绍了 iPhone 之间和安卓手机之间如何备份和进行资料迁移&#xff0c;很多朋友都留言说想知道 iPhone 与安卓手机之间如何进行资料迁移&#xff0c;看来双十一大家都剁手换了手机啊&#xff0c;嘴上说着不要&#xff0c;到头来还是管不住自己的手。同操作系统的手…

当前记录集不支持更新_不断中招的你还放心升级win10吗?wi10近期更新问题及解决办法...

.专于心 精于形.Win10用户升级5月更新后屏幕出现蓝绿伪影&#xff1a;或跟调节色温软件有关随着五月更新升级范围的扩大&#xff0c;一些问题也是加速展现在微软面前。现在&#xff0c;有不少Windows 10用户反馈称&#xff0c;自己升级至五月更新后&#xff0c;屏幕出现了蓝绿伪…

易班自动答题脚本_如何使用python进行自动网上考试

前言文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者&#xff1a; HIS HackerPS&#xff1a;如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun背景说明在github上发现一…

两个子集pom互相调用_声明式服务调用组件Feign

什么是Feign&#xff1f; Feign是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端。Feign内置了Ribbon&#xff0c;用来做客户端负载均衡&#xff0c;去调用服务注册中心的服务。什么是OpenFeign&#xff1f;OpenFeign是SpringCloud在Feign的基础上支持了SpringMVC的…

安卓手机主题软件_安卓手机安装不了软件原因和方法

安卓手机不能安装软件其实有很多的原因&#xff0c;排除可以避免的原因(google授权)&#xff0c;其他的硬件设施的支持&#xff0c;也可能出现软件不能安装的现象。有的是可以解决的&#xff0c;但有的是强制性原因&#xff0c;那就没有办法了。下面就来分析下软件不能安装的几…

excel插入页码_Excel里毫不起眼的页眉页脚,居然有这3种高能用法!

点击上方蓝字关注星标★不迷路本文作者&#xff1a;小敏本文编辑&#xff1a;小叮一说到页眉页脚&#xff0c;你脑海中出现的&#xff0c;是不是这样一个画面&#xff1f;规规矩矩的页眉页脚&#xff0c;比如&#xff0c;公司 logo 或者文件名称放在页眉位置&#xff0c;底部加…

前端怎么获取cookie的值_京东购物小程序cookie方案实践(附Demo)

一、前言早期为了解决“会话保持”的需求&#xff0c;社区中出现了「cookie 方案」并最终成为 W3C 标准&#xff1a;当某个网站登录成功后&#xff0c;客户端(浏览器)收到一个 cookie 标识(文本)并保存下来&#xff0c;在后续请求中会自动带上这个字段&#xff0c;由此 Web 后台…

R 语言怎么保存工作目录到当前路径_【R语言基础】01.R语言软件环境搭建及常用操作...

一、R语言简介R语言是专业的统计分析软件&#xff0c;来自著名数据科学网站&#xff08;http://www.kdnuggets.com/&#xff09;发起的一个2019年统计分析和数据挖掘软件使用情况的调查结果&#xff1a;表明R语言是该领域近年来最受欢迎的软件之一。R语言的优势&#xff1a;(1)…