DBConnect.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. /**
  2. *
  3. */
  4. package openapi.base.data.db;
  5. import openapi.base.BaseClass;
  6. import openapi.base.data.Row;
  7. import openapi.base.data.Rows;
  8. import p2.p2server.P2Server;
  9. import java.sql.*;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. /**
  13. * @author SJW
  14. *
  15. */
  16. public class DBConnect extends BaseClass {
  17. String datakey;
  18. public DBConnect() {
  19. this.datakey = "P2DATA";
  20. if (!DBConnectPool.propertiesMap.containsKey(datakey)) {
  21. String connectstring = P2Server.getP2Server().getDBConnProvider().getProperties().getProperty("p2.db.connectstring");
  22. String loginid = P2Server.getP2Server().getDBConnProvider().getProperties().getProperty("p2.db.loginid");
  23. String password = P2Server.getP2Server().getDBConnProvider().getProperties().getProperty("p2.db.password");
  24. String ipaddress = connectstring.substring(connectstring.indexOf("inetdae7:"), connectstring.indexOf("?")).substring(9);
  25. String dataname = connectstring.substring(connectstring.indexOf("database="), connectstring.indexOf("&")).substring(9);
  26. String url = "jdbc:sqlserver://" + ipaddress + ";databasename=" + dataname;
  27. String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
  28. new SQLiteJDBC().createP2DataConfig(datakey, driver, loginid, password, url);
  29. }
  30. }
  31. public DBConnect(String datakey) {
  32. this.datakey = datakey;
  33. }
  34. private void close(Connection conn, PreparedStatement statement) {
  35. if (statement != null) {
  36. try {
  37. statement.close();
  38. statement = null;
  39. } catch (SQLException e) {
  40. e.printStackTrace();
  41. printErrOut("statement关闭失败", e.getMessage(), false);
  42. }
  43. }
  44. if (conn != null) {
  45. new DBConnectPool().close(datakey, conn);
  46. }
  47. }
  48. public boolean test() {
  49. return true;
  50. }
  51. public Rows runSqlQuery(String SQL) {
  52. Connection conn = new DBConnectPool().getConnect(datakey);
  53. if (conn == null) {
  54. return new Rows();
  55. }
  56. Rows rows = new Rows();
  57. ResultSet resultSet = null;
  58. PreparedStatement statement = null;
  59. try {
  60. statement = conn.prepareStatement(SQL);
  61. resultSet = statement.executeQuery();
  62. ResultSetMetaData rsmd = resultSet.getMetaData();
  63. int colCount = rsmd.getColumnCount();
  64. List<String> colNameList = new ArrayList<String>(16);
  65. List<String> colTypeList = new ArrayList<String>();
  66. for (int i = 0; i < colCount; i++) {
  67. colNameList.add(rsmd.getColumnName(i + 1));
  68. colTypeList.add(rsmd.getColumnTypeName(i + 1));
  69. }
  70. while (resultSet.next()) {
  71. Row row = new Row();
  72. for (int i = 0; i < colCount; i++) {
  73. String key = colNameList.get(i);
  74. String type = colTypeList.get(i);
  75. Object value;
  76. switch (type) {
  77. case "int":
  78. value = resultSet.getInt(colNameList.get(i));
  79. break;
  80. case "bigint":
  81. value = resultSet.getLong(colNameList.get(i));
  82. break;
  83. case "smallint":
  84. //value = resultSet.getShort(colNameList.get(i));
  85. value = resultSet.getString(colNameList.get(i));
  86. break;
  87. case "numeric":
  88. value = resultSet.getDouble(colNameList.get(i));
  89. break;
  90. case "decimal":
  91. value = resultSet.getBigDecimal(colNameList.get(i));
  92. break;
  93. case "datetime":
  94. value = resultSet.getString(colNameList.get(i));
  95. if (value != null) {
  96. value = ((String) value).replace(" 00:00:00.0", "");
  97. }
  98. break;
  99. default:
  100. value = resultSet.getString(colNameList.get(i));
  101. break;
  102. }
  103. if ("total".equals(key)) {
  104. rows.totalRows = (Integer) value;
  105. } else if ("pageTotal".equals(key)) {
  106. rows.totalPage = new Double((Double) value).intValue();
  107. } else {
  108. row.put(key, value);
  109. }
  110. }
  111. rows.add(row);
  112. }
  113. if (rows.totalRows == 0) {
  114. rows.totalRows = rows.size();
  115. rows.totalPage = 1;
  116. }
  117. } catch (SQLException e) {
  118. e.printStackTrace();
  119. printErrOut(e.getMessage(), SQL, false);
  120. rows.errmsg = e.getMessage();
  121. try {
  122. conn.close();
  123. conn = null;
  124. } catch (SQLException e1) {
  125. // TODO Auto-generated catch block
  126. e1.printStackTrace();
  127. }
  128. } finally {
  129. if (resultSet != null) {
  130. try {
  131. resultSet.close();
  132. resultSet = null;
  133. } catch (SQLException e) {
  134. printErrOut(e.getMessage(), SQL, false);
  135. e.printStackTrace();
  136. }
  137. }
  138. close(conn, statement);
  139. }
  140. return rows;
  141. }
  142. public String runSqlUpdate(String SQL) {
  143. Connection conn = new DBConnectPool().getConnect(datakey);
  144. if (conn == null) {
  145. return datakey + "连接失败";
  146. }
  147. PreparedStatement statement = null;
  148. String status = "true";
  149. try {
  150. statement = conn.prepareStatement(SQL);
  151. statement.executeUpdate();
  152. conn.commit();
  153. } catch (SQLException e) {
  154. printErrOut(e.getMessage(), SQL, false);
  155. status = e.getMessage();
  156. try {
  157. conn.rollback();
  158. } catch (SQLException e1) {
  159. printErrOut(e.getMessage(), SQL, false);
  160. e1.printStackTrace();
  161. }
  162. try {
  163. conn.close();
  164. conn = null;
  165. } catch (SQLException e1) {
  166. // TODO Auto-generated catch block
  167. e1.printStackTrace();
  168. }
  169. } finally {
  170. close(conn, statement);
  171. }
  172. return status;
  173. }
  174. public String runSqlUpdate(ArrayList<String> SQLlist) {
  175. Connection conn = new DBConnectPool().getConnect(datakey);
  176. if (conn == null) {
  177. return datakey + "连接失败";
  178. }
  179. PreparedStatement statement = null;
  180. String status = "true";
  181. StringBuffer buffer = new StringBuffer();
  182. try {
  183. for (String sql : SQLlist) {
  184. buffer.append(sql);
  185. statement = conn.prepareStatement(sql);
  186. statement.executeUpdate();
  187. }
  188. conn.commit();
  189. } catch (SQLException e) {
  190. printErrOut("sql执行错误", e.getMessage() + ":" + buffer.toString(), false);
  191. status = e.getMessage();
  192. try {
  193. conn.rollback();
  194. } catch (SQLException e1) {
  195. printErrOut(e.getMessage(), buffer.toString(), false);
  196. e1.printStackTrace();
  197. }
  198. try {
  199. conn.close();
  200. conn = null;
  201. } catch (SQLException e1) {
  202. // TODO Auto-generated catch block
  203. e1.printStackTrace();
  204. }
  205. } finally {
  206. buffer = null;
  207. close(conn, statement);
  208. }
  209. return status;
  210. }
  211. }