fa3820a6b117657b064a73fe398f5bfe82b1e4d0.svn-base 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package org.jeecg.modules.online.config.util;
  2. import java.sql.Connection;
  3. import java.sql.DatabaseMetaData;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import javax.sql.DataSource;
  10. import org.jeecg.common.constant.DataBaseConstant;
  11. import org.jeecg.common.util.SpringContextUtils;
  12. import org.jeecg.common.util.oConvertUtils;
  13. import org.jeecg.modules.online.config.exception.DBException;
  14. import org.jeecg.modules.online.config.service.DbTableHandleI;
  15. import org.jeecg.modules.online.config.service.impl.MysqlTableHandle;
  16. import org.jeecg.modules.online.config.service.impl.OracleTableHandle;
  17. import org.jeecg.modules.online.config.service.impl.PgTableHandle;
  18. import org.jeecg.modules.online.config.service.impl.SqlServerTableHandle;
  19. import lombok.extern.slf4j.Slf4j;
  20. @Slf4j
  21. public class TableUtil {
  22. public static String DATABASE_TYPE = "";
  23. public TableUtil() {
  24. }
  25. public static DbTableHandleI getTableHandle() throws SQLException, DBException {
  26. DbTableHandleI dbTableHandle = null;
  27. String databaseType = getDatabaseType();
  28. switch(databaseType) {
  29. case DataBaseConstant.DB_TYPE_ORACLE:
  30. dbTableHandle = new OracleTableHandle();
  31. break;
  32. case DataBaseConstant.DB_TYPE_POSTGRESQL:
  33. dbTableHandle = new PgTableHandle();
  34. break;
  35. case DataBaseConstant.DB_TYPE_MYSQL:
  36. dbTableHandle = new MysqlTableHandle();
  37. break;
  38. case DataBaseConstant.DB_TYPE_SQLSERVER:
  39. dbTableHandle = new SqlServerTableHandle();
  40. }
  41. return dbTableHandle;
  42. }
  43. public static Connection getConnection() throws SQLException {
  44. DataSource ds = SpringContextUtils.getApplicationContext().getBean(DataSource.class);
  45. return ds.getConnection();
  46. }
  47. public static String getDatabaseType() throws SQLException, DBException {
  48. if (oConvertUtils.isNotEmpty(DATABASE_TYPE)) {
  49. return DATABASE_TYPE;
  50. } else {
  51. DataSource ds = SpringContextUtils.getApplicationContext().getBean(DataSource.class);
  52. return getDatabaseType(ds);
  53. }
  54. }
  55. public static boolean isOracle() {
  56. try {
  57. return DataBaseConstant.DB_TYPE_ORACLE.equals(getDatabaseType());
  58. } catch (SQLException | DBException e) {
  59. e.printStackTrace();
  60. }
  61. return false;
  62. }
  63. public static String getDatabaseType(DataSource ds) throws SQLException, DBException {
  64. if ("".equals(DATABASE_TYPE)) {
  65. Connection conn = ds.getConnection();
  66. try {
  67. DatabaseMetaData dbMetaData = conn.getMetaData();
  68. String dbProductName = dbMetaData.getDatabaseProductName().toLowerCase();
  69. if (dbProductName.indexOf("mysql") >= 0) {
  70. DATABASE_TYPE = DataBaseConstant.DB_TYPE_MYSQL;
  71. } else if (dbProductName.indexOf("oracle") >= 0) {
  72. DATABASE_TYPE = DataBaseConstant.DB_TYPE_ORACLE;
  73. } else if (dbProductName.indexOf("sqlserver") < 0 && dbProductName.indexOf("sql server") < 0) {
  74. if (dbProductName.indexOf("postgresql") < 0) {
  75. throw new DBException("数据库类型:[" + dbProductName + "]不识别!");
  76. }
  77. DATABASE_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL;
  78. } else {
  79. DATABASE_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER;
  80. }
  81. } catch (Exception e) {
  82. log.error(e.getMessage(), e);
  83. } finally {
  84. conn.close();
  85. }
  86. }
  87. return DATABASE_TYPE;
  88. }
  89. public static String getDatabaseType(Connection conn) throws SQLException, DBException {
  90. if ("".equals(DATABASE_TYPE)) {
  91. DatabaseMetaData var1 = conn.getMetaData();
  92. String var2 = var1.getDatabaseProductName().toLowerCase();
  93. if (var2.indexOf("mysql") >= 0) {
  94. DATABASE_TYPE = DataBaseConstant.DB_TYPE_MYSQL;
  95. } else if (var2.indexOf("oracle") >= 0) {
  96. DATABASE_TYPE = DataBaseConstant.DB_TYPE_ORACLE;
  97. } else if (var2.indexOf("sqlserver") < 0 && var2.indexOf("sql server") < 0) {
  98. if (var2.indexOf("postgresql") < 0) {
  99. throw new DBException("数据库类型:[" + var2 + "]不识别!");
  100. }
  101. DATABASE_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL;
  102. } else {
  103. DATABASE_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER;
  104. }
  105. }
  106. return DATABASE_TYPE;
  107. }
  108. /*public static String getDatabaseType(Session session) throws SQLException, DBException {
  109. return getDatabaseType();
  110. }*/
  111. public static String fixTableName(String tableName, String databaseType) {
  112. switch(databaseType) {
  113. case DataBaseConstant.DB_TYPE_ORACLE:
  114. return tableName.toUpperCase();
  115. case DataBaseConstant.DB_TYPE_POSTGRESQL:
  116. return tableName.toLowerCase();
  117. default:
  118. return tableName;
  119. }
  120. }
  121. public static Boolean isTableExist(String tableName) {
  122. Connection conn = null;
  123. ResultSet rs = null;
  124. Boolean isTableExist;
  125. try {
  126. String[] var3 = new String[]{"TABLE"};
  127. conn = getConnection();
  128. DatabaseMetaData databaseMetaData = conn.getMetaData();
  129. String databaseProductName = databaseMetaData.getDatabaseProductName().toUpperCase();
  130. String dbTableName = fixTableName(tableName, databaseProductName);
  131. rs = databaseMetaData.getTables(null, null, dbTableName, var3);
  132. if (rs.next()) {
  133. log.info("数据库表:【" + tableName + "】已存在");
  134. isTableExist = true;
  135. return isTableExist;
  136. }
  137. isTableExist = false;
  138. } catch (SQLException e) {
  139. throw new RuntimeException();
  140. } finally {
  141. try {
  142. if (rs != null) {
  143. rs.close();
  144. }
  145. if (conn != null) {
  146. conn.close();
  147. }
  148. } catch (SQLException e) {
  149. log.error(e.getMessage(), e);
  150. }
  151. }
  152. return isTableExist;
  153. }
  154. public static Map<String, Object> a(List<Map<String, Object>> var0) {
  155. Map<String, Object> result = new HashMap<>();
  156. for(int var2 = 0; var2 < var0.size(); ++var2) {
  157. result.put(var0.get(var2).get("column_name").toString(), var0.get(var2));
  158. }
  159. return result;
  160. }
  161. public static String getDialect() throws SQLException, DBException {
  162. String databaseType = getDatabaseType();
  163. return getJdbcDriver(databaseType);
  164. }
  165. public static String getJdbcDriver(String databaseType) throws SQLException, DBException {
  166. String driver = "org.hibernate.dialect.MySQL5InnoDBDialect";
  167. switch(databaseType) {
  168. case DataBaseConstant.DB_TYPE_ORACLE:
  169. driver = "org.hibernate.dialect.OracleDialect";
  170. break;
  171. case DataBaseConstant.DB_TYPE_POSTGRESQL:
  172. driver = "org.hibernate.dialect.PostgreSQLDialect";
  173. break;
  174. case DataBaseConstant.DB_TYPE_SQLSERVER:
  175. driver = "org.hibernate.dialect.SQLServerDialect";
  176. }
  177. return driver;
  178. }
  179. public static String c(String var0) {
  180. return var0;
  181. }
  182. }