package com.example.demo.car.controller;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test {
static String driverClass="oracle.jdbc.driver.OracleDriver"; //oracle的驱动
static String url="jdbc:oracle:thin:@localhost:1521:orcl"; //连接oracle路径方式 “”gfs“”是要建立连接的数据库名 1521端口
static String user="scott"; //user是数据库的用户名
static String password="scott"; //用户登录密码
static Pattern linePattern = Pattern.compile("_(\\w)");
static String sql = "select A.column_name ,A.COMMENTS,B.DATA_TYPE\r\n" +
"from user_col_comments A INNER JOIN user_tab_columns B\r\n" +
"ON A.column_name=B.column_name\r\n" +
"AND A.Table_Name=B.Table_Name\r\n" +
"where A.Table_Name=? \r\n" +
"order by column_name ASC";
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();
}
public static Connection getconn() { //为了方便下面的讲解,这里专门建立了一个用于数据库连接的一个方法
Connection conn=null;
try {
//首先建立驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//驱动成功后进行连接
conn=DriverManager.getConnection(url, user, password);
System.out.println("连接成功");
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return conn; //返回一个连接
}
public static List<String> connSqlList(String tableName) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs =null;
List<String> list=new ArrayList<>();
try {
conn = getconn();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, tableName.toUpperCase());
rs = pstmt.executeQuery();
while (rs.next()) {
list.add(rs.getString(1)+"&&"+rs.getString(2)+"&&"+rs.getString(3));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
if(rs != null) {
rs.close();
}
if(pstmt != null) {
pstmt.close();
}
if(conn != null) {
conn.close();
}
}catch(Exception e) {
}
}
return list;
}
public static String getEntity(String tableName,String className,String packFile) {
List<String> list=connSqlList(tableName);
StringBuilder entityBuild=new StringBuilder();
entityBuild.append("package \n");
entityBuild.append("import \r\n");
entityBuild.append("public class "+className+"{\n");
list.forEach(c->{
String arr[]=c.split("&&");
if("VARCHAR2".equalsIgnoreCase(arr[2])) {
entityBuild.append("\t/**"+arr[1]+"*/\n \tprivate String "+lineToHump(arr[0])+";\r\n");
}else if("NUMBER".equalsIgnoreCase(arr[2])) {
entityBuild.append("\t/**"+arr[1]+"*/\n \tprivate int "+lineToHump(arr[0])+";\r\n");
}else if("DATE".equalsIgnoreCase(arr[2])) {
entityBuild.append("\t/**"+arr[1]+"*/\n \tprivate Date "+lineToHump(arr[0])+";\r\n");
}else if("CLOB".equalsIgnoreCase(arr[2]) || "BLOB".equalsIgnoreCase(arr[2])) {
entityBuild.append("\t/**"+arr[1]+"*/\n \tprivate String "+lineToHump(arr[0])+";\r\n");
}else {
entityBuild.append("\t/**"+arr[1]+"*/\n \tprivate String "+lineToHump(arr[0])+";\r\n");
}
});
entityBuild.append("\n}");
return entityBuild.toString();
}
//生成查询语句sql
public static String columnToTable(String tableName,String str) {
List<String> list=connSqlList(tableName);
String columnStr="";//表的所有字段,包含字段别名 A a,B b 用于别名查询
String columnStr1="";//表的所有字段,示例:A,B,C 用于没有别名查询,新增
String columnStr2="";//表的所有字段,示例:#{a} 用于新增
String columnStr3="";//表的所有字段,示例:A=#{a} 用于修改
for (int i = 0; i < list.size(); i++) {
String arr[]=list.get(i).split("&&");
columnStr+=arr[0]+" "+lineToHump(arr[0])+",";
columnStr1+=arr[0]+",";
columnStr2+="#{"+lineToHump(arr[0])+"},";
columnStr3+=arr[0]+"="+columnStr2;
}
if("select".equals(str)) {
columnStr="select "+columnStr.substring(0,columnStr.length()-1)+" from "+tableName +"where ";
}else if("insert".equals(str)) {
columnStr="insert into "+tableName+"() values() ";
}else if("update".equals(str)) {
columnStr="update "+tableName+" set ";
}else if("delete".equals(str)) {
columnStr="delete from "+tableName+" where ";
}
return columnStr;
}
public static void main(String[] args) {
String aa=getEntity("car","aa","");
System.out.print(aa);
}
}