数据库字段 到类 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 swt 下拉列表_求助:SWT 下拉列表

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼public class HelloWorldCombo {//下拉列表项 private static final String[] ITEMS { "Alpha", "Bravo", "Charlie", "Delta","Echo", "Foxtrot", "Golf"…

python html转换为普通文本_将HTML表转换为可读的纯文本的Python解决方案

用这个怎么样&#xff1a;但是&#xff0c;使用collections.OrderedDict()而不是简单字典来保持顺序。有了字典之后&#xff0c;很容易从中获取和格式化文本&#xff1a;使用Colt 45溶液&#xff1a;import xml.etree.ElementTreeimport collectionss """\Heig…

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…

python对操作系统要求_python之--并发编程__操作系统

操作系统1.操作系统的发展史1)手工操作 —— 穿孔卡片1946年第一台计算机诞生--20世纪50年代中期&#xff0c;计算机工作还在采用手工操作方式。此时还没有操作系统的概念。程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机&#xff0c;然后启动输入机把程序和数据输…

macd 公式 java_EMA指标和MACD指标的JAVA语言实现

最近做的项目需要实现EMA和MACD&#xff0c;但苦于网上没有具体的实现算法。所以自己尝试着编写了一套。已经和通达信等主流股票分析软件核对过结果&#xff0c;并将其开源放在GitHub上&#xff0c;含Junit 测试用例。GitHub地址&#xff1a;https://github.com/wizardbyron/fi…

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

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

python现在时间减去过去时间等于20分钟怎么写_获取当前时间减去10分钟的话SQL语句怎么写...

展开全部对于每个类型拥有的值范围以及并且指定日期e68a84e8a2ad62616964757a686964616f31333363353834何时间值的有效格式的描述见7.3.6 日期和时间类型。这里是一个使用日期函数的例子。下面的查询选择了所有记录&#xff0c;其date_col的值是在最后30天以内&#xff1a;mysq…

java 并发测试main方法_Java并发测试

要求&#xff1a;模拟200个设备&#xff0c;尽量瞬间并发量达到200。思路第一种&#xff1a;线程池模拟200个线程——wait等待线程数达200——notifyAll唤醒所有线程第二种&#xff1a;线程池模拟200个线程——阻塞线程——达到200条件释放比较两种方案都可以实现瞬时高并发的模…

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

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

linux mysql 安装innodb_在ubuntu Mysql 5.7 安装InnoDB Memcached 插件

在ubuntu Mysql 5.7 安装Memcached 插件参考&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/innodb-memcached-setup.htmlMySQL 5.7 Reference Manual / The InnoDB Storage Engine / InnoDB memcached Plugin15.20 InnoDB memcached Plugin15.20.1 Benefits of the Inn…

python怎么定义正方形函数_python – Matplotlib自定义图例以显示正方形而不是矩形...

这是我尝试将条形图的图例从矩形更改为方形&#xff1a;import matplotlib.patches as patchesrect1 patches.Rectangle((0,0),1,1,facecolor#FF605E)rect2 patches.Rectangle((0,0),1,1,facecolor#64B2DF)plt.legend((rect1, rect2), (2016, 2015))但是当我绘制这个时,我仍然…

java 排列3_java中的三大排序算法

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/pqwGreenhand/article/details/53581577一、冒泡排序已知一组无序数据a[1]、a[2]、……a[n]&#xff…

python 批量查询网页导出结果_python批量查询网页的HTTP状态码

最近业余时间在改版一个网站&#xff0c;改版之前频繁调整了一些栏目的属性&#xff0c;包括栏目的层级&#xff0c;这种最怕就是调整了栏目的从属关系&#xff0c;导致了栏目的URL地址改变&#xff0c;一旦改版就导致整个栏目及其下面的文章页地址变更&#xff0c;成为死链。而…

java 文件夹存在文件_Java判断是否存在文件和文件夹

获取项目绝对路径&#xff1a;this.getClass().getClassLoader().getResource(".").getPath()1、判断文件是否存在&#xff0c;不存在创建文件File filenew File("C:\\Users\\QPING\\Desktop\\JavaScript\\2.htm");if(!file.exists()){try {file.createNew…

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

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