备注:select查询出来的数据转成insert语句,可以直接执行SQL

package com.ed.core.util;import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import org.apache.commons.lang.StringUtils;import com.ed.core.domain.PProject;import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;public class CreateInsert {private static Pattern linePattern = Pattern.compile("_(\\w)");/*** 生成插入语句* @param tablename 表明* @param clazz 与数据库中字段一一对应的类* @param t 有数据的实体* @param <T> 数据实体类型 如 User*/public static  <T> String getInsertSql(String tablename, Class<T> clazz, T t){//insert into table_name (column_name1,column_name2, ...) values (value1,value2, ...)String sql = "";Field[] fields = ReflectUtil.getFieldsDirectly(clazz, false);StringBuffer topHalf = new StringBuffer("insert into "+tablename+" (");StringBuffer afterAalf = new StringBuffer("values (");for (Field field : fields) {/*if ("ID".equals(field.getName()) || "id".equals(field.getName())){continue;   //id 自动生成无需手动插入}*/topHalf.append(field.getName() + ",");if (ReflectUtil.getFieldValue(t, field.getName()) instanceof String) {afterAalf.append("'" + ReflectUtil.getFieldValue(t, field.getName()) + "',");} else {afterAalf.append(ReflectUtil.getFieldValue(t, field.getName()) + ",");}}topHalf = new StringBuffer(StrUtil.removeSuffix(topHalf.toString(), ","));afterAalf = new StringBuffer(StrUtil.removeSuffix(afterAalf.toString(), ","));topHalf.append(") ");afterAalf.append(") ");sql = topHalf.toString() + afterAalf.toString();return sql;}/*** 生成更新语句* 必须含有id* 数据实体中 null 与 空字段不参与更新* @param tablename 数据库中的表明* @param clazz 与数据库中字段一一对应的类* @param t 有数据的实体* @param <T> 数据实体类型,如 User*/public static  <T> String getUpdateSql(String tablename, Class<T> clazz, T t){//UPDATE table_name SET column_name1 = value1, column_name2 = value2, ... where ID=xxx//or//UPDATE table_name SET column_name1 = value1, column_name2 = value2, ... where id=xxxString sql = "";String id = ""; //保存id名:ID or idField[] fields = ReflectUtil.getFieldsDirectly(clazz, false);sql = "update "+tablename+" set ";for (Field field : fields) {StringBuffer tmp = new StringBuffer();if ("ID".equals(field.getName()) || "id".equals(field.getName())){id = field.getName();continue;//更新的时候无需set id=xxx}if (ReflectUtil.getFieldValue(t, field.getName()) != null && ReflectUtil.getFieldValue(t, field.getName()) != "") {tmp.append( field.getName() + "=");if (ReflectUtil.getFieldValue(t, field.getName()) instanceof String) {tmp.append( "'" + ReflectUtil.getFieldValue(t, field.getName()) + "',");} else {tmp.append(ReflectUtil.getFieldValue(t, field.getName()) + ",");}sql += tmp;}}sql = StrUtil.removeSuffix(sql, ",") + " where " + id + "='" + ReflectUtil.getFieldValue(t, id)+"'";return sql;}/*** //根据数据库生成字段 例如 private Object a;* @param dbname 数据库名* @param tablename 表名称* @return 成员变量拼接后的字符串* @throws SQLException*/public static <T> String getPirvateObjectXxx(String dbname,String tablename, T t) throws SQLException, ClassNotFoundException, IllegalAccessException, InstantiationException, ParseException {Class.forName("org.postgresql.Driver").newInstance();Connection conn = DriverManager.getConnection("jdbc:postgresql://xxx.xxx.x.xx:端口号/数据库名", "用户名", "密码");/*获取你的数据库连接*/;Statement stat = conn.createStatement();//select COLUMN_NAME from information_schema.columns where table_schema='public' and table_name='p_project';
//        ResultSet rs = stat.executeQuery("select COLUMN_NAME,COLUMN_TYPE from information_schema.COLUMNS where table_name = '"+tablename+"' and table_schema = '"+dbname+"'");ResultSet rs = stat.executeQuery("select COLUMN_NAME from information_schema.columns where table_schema='public' and table_name='"+tablename+"'");StringBuffer topHalf = new StringBuffer("insert into "+tablename+" (");StringBuffer afterAalf = new StringBuffer("values (");while (rs.next()) {
//            sb.append("private Object "+rs.getObject(1)+";\n");/*加上id是因为有些文件的路径通过id来拼接的路径if(StringUtils.equals(rs.getObject(1).toString(), "id")) {continue;}*/topHalf.append(rs.getObject(1)+ ",");
//          System.out.println("***"+rs.getObject(1));//只需要判断string类型和data类型,string类型需要加引号(''),时间需要转换并加引号Field field = ReflectUtil.getField(t.getClass(), lineToHump(rs.getObject(1).toString()));if (field.getGenericType().toString().equals("class java.lang.String")) {afterAalf.append("'" + ReflectUtil.getFieldValue(t,lineToHump(rs.getObject(1).toString())) + "',");}else if(field.getGenericType().toString().equals("class java.util.Date")){/*** lineToHump(rs.getObject(1).toString() 获取bean里面的属性* ReflectUtil.getFieldValue(t, lineToHump(rs.getObject(1).toString()))  根据bean里的属性获取具体的值*/Object fieldValue = ReflectUtil.getFieldValue(t, lineToHump(rs.getObject(1).toString()));if(fieldValue != null){afterAalf.append("'" + CSTtoDate(fieldValue.toString()) + "',");}}else {afterAalf.append(ReflectUtil.getFieldValue(t,lineToHump(rs.getObject(1).toString())) + ",");}//topHalf.append(rs.getObject(1)+";" + ",");/* if (ReflectUtil.getFieldValue(t, rs.getObject(1).toString()) instanceof String) {afterAalf.append("'" + ReflectUtil.getFieldValue(t,lineToHump(rs.getObject(1).toString())) + "',");} else {afterAalf.append(ReflectUtil.getFieldValue(t,lineToHump(rs.getObject(1).toString())) + ",");}*/}topHalf = new StringBuffer(StrUtil.removeSuffix(topHalf.toString(), ","));afterAalf = new StringBuffer(StrUtil.removeSuffix(afterAalf.toString(), ","));topHalf.append(") ");afterAalf.append(") ");String sql = topHalf.toString() + afterAalf.toString();
//        while (rs.next()) {
//            sb.append("private Object "+rs.getObject(1)+";\n");
//        }
//        System.out.print(sb.toString());rs.close();stat.close();conn.close();
//        return sb.toString();return sql;}getInsertSql生成insert语句测试public static void main(String[] args) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException, ParseException {//String result = lineToHump("project_id");PProject project= new PProject();project.setPeojectId(1);project.setProjectName("测试项目");project.setProjectCode("cs001");project.setProjectDescribe("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaa");project.setStatus(1);project.setCreateDate(new Date(System.currentTimeMillis()));String insertSql = getInsertSql("p_project", PProject.class, project);System.out.println(insertSql);String insertSqlDataBase = getPirvateObjectXxx("public", "p_project", project);//System.out.println(insertSql);System.out.println(insertSqlDataBase);System.out.println(CSTtoDate("Thu Feb 27 22:14:18 CST 2020"));}/*** 获取bean里面的属性* @param str* @return*/public static String lineToHump(String str) {str = str.toLowerCase();Matcher matcher = linePattern.matcher(str);StringBuffer sb = new StringBuffer();while (matcher.find()) {matcher.appendReplacement(sb, matcher.group(1).toUpperCase());}matcher.appendTail(sb);return sb.toString();}/*** 时间转换* @param dateStr* @return* @throws ParseException*/public static String CSTtoDate(String dateStr) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);Date date = (Date) sdf.parse(dateStr);String formatStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);return formatStr;}
}

select转insert语句相关推荐

  1. 使用select和insert的小细节

    做后台开发的,接触数据库是常见的事情,select和insert语句在平时写存储过程时也用的很多,今天来说一下select和insert的规范用法.很简单,但是也是值得注意一下. mysql> ...

  2. mybatis的select、insert、update、delete语句

    一.select <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String&qu ...

  3. Oracle中5个核心Sql语句的基本构造:Select、Insert、Update、Delete和Merge

    Sql语言提供了很多不同的选择来得到同样的结果集,关键是需要搞清楚在不同的使用场景下哪种构造是最高效的. 1.Select语句 Select语句用来从一个表中,或者其他数据库对象中提取数据. sele ...

  4. 将insert语句转化为select语句,进行校验,验证是否插入成功

    前言   公司的测试和运维不太懂sql,每次将sql文件交给他们到测试或者生产数据库中执行sql的时候,他们都是全部执行,不看是否执行成功.因此,就会导致有些insert语句没有执行成功,等到功能验证 ...

  5. mysql 用select 语句的查询结果当作 insert 语句需要插入的值

    在实际使用中会遇到这样的场景,需要根据一个表里的内容在其他表中添加关联的数据,这时候就会用到 insert into {table_name} select x1,x2,x3... from {tab ...

  6. INSERT INTO SELECT语句与SELECT INTO FROM语句区别

    1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,-) select value1,value2,- from Table1 ...

  7. mysql insert 嵌套_「insert语句」数据库插入insert语句中添加嵌套查询select - seo实验室...

    insert语句 示例: insert into mytable(X,Y,Z) Values((SELECT X from basetable WHERE ID = 8),(SELECT Y from ...

  8. 零基础学习数据库SQL教程(一)(简单的SELECT语句 简单的INSERT语句 简单的UPDATE语句 简单的DELETE语句)

    写在前面的话:本文章内容是自己在LintCode网站SQL教程学习过程中做的学习总结,以便自己复习和大家学习,如果去刷此网站的题,也可以把此文作为参考答案来使用.例题的答案是本人所写,并且已经运行成功 ...

  9. Excel操作之拼接sql语句操作(insert、select等sql语句)

    前言 为啥要写这篇文章呢,原因是2022年元旦前一天项目加班,加班到元旦凌晨6点多,才上线完成,打车回家.这期间看着朋友圈到处发的去年总结.今年祝福.周围环境红灯酒绿,再看看当时的我,正在公司加班,埋 ...

最新文章

  1. C#和Java的对比
  2. [PHP] 项目实践中使用的IOC容器思想
  3. 大数据时代 | 数据分析方法及理论详解
  4. 企业微服务:实现crud操作之创建实体类
  5. CodeForces - 1562E Rescue Niwen!(dp)
  6. 区块链技术指南笔记(三):区块链运作的核心技术
  7. Linux下PortSentry的配置
  8. 关于tag,viewWithTag
  9. boolean 默认_MySQL数据类型测试:BOOLEAN、TINYINT测试数据总结(第八节)
  10. CodeForces - 1013B And 与运算暴力
  11. 2020年PHP面试题大全
  12. php中几个数组函数array_slice() array_filter array_unique() in_array()
  13. 无线传感网络定向扩散路由仿真matlab,确定性无线传感器网络定向扩散路由协议...
  14. sql优化的N种方法_持续更新
  15. python3d旋转相册,用HTML+CSS代码制作3D旋转相册
  16. JS一些常用证件信息的正则表达式
  17. 何园–中国晚清第一园
  18. 如何提高游戏中的打击感?
  19. 【汇总】ThinkPHP6入门手册
  20. 聚合供应链,Saas系统

热门文章

  1. 设计模式的意图、动机
  2. 获取视频位置信息的方法
  3. 燕京理工学院java期末_2020-2021年燕京理工学院寒假放假时间安排及校历开学时间...
  4. 使用MyEclipse制作报表
  5. ZBrush中标准几何体与Polymesh
  6. remoting 突然出现 服务器遇到内部错误。有关更多信息,请关闭服务器的 .config 文件中的 customErrors。
  7. 模拟新浪微博登录:从原理分析到实现
  8. ABB机械臂乱弹1-ABB机器人选项功能
  9. JavaScript基础(3)函数
  10. RocksDB Tombstone 详解