|
|
@@ -0,0 +1,371 @@
|
|
|
+package com.minpay.common.util;
|
|
|
+
|
|
|
+import java.lang.reflect.Field;
|
|
|
+import java.sql.Connection;
|
|
|
+import java.sql.DriverManager;
|
|
|
+import java.sql.PreparedStatement;
|
|
|
+import java.sql.ResultSet;
|
|
|
+import java.sql.ResultSetMetaData;
|
|
|
+import java.sql.SQLException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 连接数据库
|
|
|
+ *
|
|
|
+ * 因为是数据迁移,数据量会很大,分页要采用下面的方式,自己拼装
|
|
|
+ * limit m语句:
|
|
|
+ * select * from dept where deptno >10 order by deptno asc limit n;//下一页
|
|
|
+ * select * from dept where deptno <60 order by deptno desc limit n//上一页
|
|
|
+ * 这种方式不管翻多少页只需要扫描n条数据。
|
|
|
+ * @author zhangzz
|
|
|
+ *
|
|
|
+ */
|
|
|
+public class JdbcUtils {
|
|
|
+ static String imgUrlPath = "http://img.xx.com/imgpath/oldImngpath/";
|
|
|
+ //数据库用户名
|
|
|
+ protected static String USERNAME = "";
|
|
|
+ //数据库密码
|
|
|
+ protected static String PASSWORD = "";
|
|
|
+ //驱动信息
|
|
|
+ protected static String DRIVER = "com.mysql.cj.jdbc.Driver";
|
|
|
+ //数据库地址
|
|
|
+ protected static String URL = "";
|
|
|
+ private Connection connection;
|
|
|
+ private PreparedStatement pstmt;
|
|
|
+ private ResultSet resultSet;
|
|
|
+ public JdbcUtils() {
|
|
|
+ // TODO Auto-generated constructor stub
|
|
|
+ try{
|
|
|
+ Class.forName(DRIVER);
|
|
|
+ }catch(Exception e){
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获得数据库的连接
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Connection getConnection(){
|
|
|
+ try {
|
|
|
+ connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
|
|
|
+ } catch (SQLException e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ checkConnect();
|
|
|
+ return connection;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void checkConnect() {
|
|
|
+ if(connection == null) {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Thread.currentThread().sleep(1000);//毫秒
|
|
|
+ }
|
|
|
+ catch(Exception e){}
|
|
|
+ getConnection();
|
|
|
+ checkConnect();
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 增加、删除、改
|
|
|
+ * @param sql
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ * @throws SQLException
|
|
|
+ */
|
|
|
+ public boolean updateByPreparedStatement(String sql, List<Object>params)throws SQLException{
|
|
|
+ boolean flag = false;
|
|
|
+ int result = -1;
|
|
|
+ pstmt = connection.prepareStatement(sql);
|
|
|
+ int index = 1;
|
|
|
+ if(params != null && !params.isEmpty()){
|
|
|
+ for(int i=0; i<params.size(); i++){
|
|
|
+ pstmt.setObject(index++, params.get(i));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ result = pstmt.executeUpdate();
|
|
|
+ flag = result > 0 ? true : false;
|
|
|
+ return flag;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询单条记录
|
|
|
+ * @param sql
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ * @throws SQLException
|
|
|
+ */
|
|
|
+ public Map<String, Object> findSimpleResult(String sql, List<Object> params) throws SQLException{
|
|
|
+ Map<String, Object> map = new HashMap<String, Object>();
|
|
|
+ int index = 1;
|
|
|
+ pstmt = connection.prepareStatement(sql);
|
|
|
+ if(params != null && !params.isEmpty()){
|
|
|
+ for(int i=0; i<params.size(); i++){
|
|
|
+ pstmt.setObject(index++, params.get(i));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resultSet = pstmt.executeQuery();//返回查询结果
|
|
|
+ ResultSetMetaData metaData = resultSet.getMetaData();
|
|
|
+ int col_len = metaData.getColumnCount();
|
|
|
+ while(resultSet.next()){
|
|
|
+ for(int i=0; i<col_len; i++ ){
|
|
|
+ String cols_name = metaData.getColumnName(i+1);
|
|
|
+ Object cols_value = resultSet.getObject(cols_name);
|
|
|
+ if(cols_value == null){
|
|
|
+ cols_value = "";
|
|
|
+ }
|
|
|
+ map.put(cols_name, cols_value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**查询多条记录
|
|
|
+ * @param sql
|
|
|
+ * @param params
|
|
|
+ * @return
|
|
|
+ * @throws SQLException
|
|
|
+ */
|
|
|
+ public List<Map<String, Object>> findModeResult(String sql, List<Object> params) throws SQLException{
|
|
|
+ List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
|
|
|
+ int index = 1;
|
|
|
+ pstmt = connection.prepareStatement(sql);
|
|
|
+ if(params != null && !params.isEmpty()){
|
|
|
+ for(int i = 0; i<params.size(); i++){
|
|
|
+ pstmt.setObject(index++, params.get(i));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resultSet = pstmt.executeQuery();
|
|
|
+ ResultSetMetaData metaData = resultSet.getMetaData();
|
|
|
+ int cols_len = metaData.getColumnCount();
|
|
|
+ while(resultSet.next()){
|
|
|
+ Map<String, Object> map = new HashMap<String, Object>();
|
|
|
+ for(int i=0; i<cols_len; i++){
|
|
|
+ String cols_name = metaData.getColumnName(i+1);
|
|
|
+ if("hftime".equals(cols_name)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Object cols_value = resultSet.getObject(cols_name);
|
|
|
+ if(cols_value == null){
|
|
|
+ cols_value = "";
|
|
|
+ }
|
|
|
+ map.put(cols_name, cols_value);
|
|
|
+ }
|
|
|
+ list.add(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**通过反射机制查询单条记录
|
|
|
+ * @param sql
|
|
|
+ * @param params
|
|
|
+ * @param cls
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ public <T> T findSimpleRefResult(String sql, List<Object> params,
|
|
|
+ Class<T> cls )throws Exception{
|
|
|
+ T resultObject = null;
|
|
|
+ int index = 1;
|
|
|
+ pstmt = connection.prepareStatement(sql);
|
|
|
+ if(params != null && !params.isEmpty()){
|
|
|
+ for(int i = 0; i<params.size(); i++){
|
|
|
+ pstmt.setObject(index++, params.get(i));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resultSet = pstmt.executeQuery();
|
|
|
+ ResultSetMetaData metaData = resultSet.getMetaData();
|
|
|
+ int cols_len = metaData.getColumnCount();
|
|
|
+ while(resultSet.next()){
|
|
|
+ //通过反射机制创建一个实例
|
|
|
+ resultObject = cls.newInstance();
|
|
|
+ for(int i = 0; i<cols_len; i++){
|
|
|
+ String cols_name = metaData.getColumnName(i+1);
|
|
|
+ Object cols_value = resultSet.getObject(cols_name);
|
|
|
+ if(cols_value == null){
|
|
|
+ cols_value = "";
|
|
|
+ }
|
|
|
+ Field field = cls.getDeclaredField(cols_name);
|
|
|
+ field.setAccessible(true); //打开javabean的访问权限
|
|
|
+ field.set(resultObject, cols_value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return resultObject;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**通过反射机制查询多条记录
|
|
|
+ * @param sql
|
|
|
+ * @param params
|
|
|
+ * @param cls
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ public <T> List<T> findMoreRefResult(String sql, List<Object> params,
|
|
|
+ Class<T> cls )throws Exception {
|
|
|
+ List<T> list = new ArrayList<T>();
|
|
|
+ int index = 1;
|
|
|
+ pstmt = connection.prepareStatement(sql);
|
|
|
+ if(params != null && !params.isEmpty()){
|
|
|
+ for(int i = 0; i<params.size(); i++){
|
|
|
+ pstmt.setObject(index++, params.get(i));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ resultSet = pstmt.executeQuery();
|
|
|
+ ResultSetMetaData metaData = resultSet.getMetaData();
|
|
|
+ int cols_len = metaData.getColumnCount();
|
|
|
+ while(resultSet.next()){
|
|
|
+ //通过反射机制创建一个实例
|
|
|
+ T resultObject = cls.newInstance();
|
|
|
+ for(int i = 0; i<cols_len; i++){
|
|
|
+ String cols_name = metaData.getColumnName(i+1);
|
|
|
+ Object cols_value = resultSet.getObject(cols_name);
|
|
|
+ if(cols_value == null){
|
|
|
+ cols_value = "";
|
|
|
+ }
|
|
|
+ Field field = cls.getDeclaredField(cols_name);
|
|
|
+ field.setAccessible(true); //打开javabean的访问权限
|
|
|
+ field.set(resultObject, cols_value);
|
|
|
+ }
|
|
|
+ list.add(resultObject);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 释放数据库连接
|
|
|
+ */
|
|
|
+ public void releaseConn(){
|
|
|
+ if(resultSet != null){
|
|
|
+ try{
|
|
|
+ resultSet.close();
|
|
|
+ }catch(SQLException e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(connection != null) {
|
|
|
+ try {
|
|
|
+ connection.close();
|
|
|
+ connection = null;
|
|
|
+ } catch (SQLException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 转换图片地址
|
|
|
+ * @param imgUrl
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String imgZH(String imgUrl) {
|
|
|
+ String[] imgArr = imgUrl.split(",");
|
|
|
+ String retUrl = "";
|
|
|
+ for(String url : imgArr) {
|
|
|
+ if(!"".equals(retUrl)) {
|
|
|
+ retUrl += "," + imgUrlPath + url;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ retUrl += imgUrlPath + url;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return retUrl;
|
|
|
+ }
|
|
|
+ public static String getUSERNAME() {
|
|
|
+ return USERNAME;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void setUSERNAME(String uSERNAME) {
|
|
|
+ USERNAME = uSERNAME;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String getPASSWORD() {
|
|
|
+ return PASSWORD;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void setPASSWORD(String pASSWORD) {
|
|
|
+ PASSWORD = pASSWORD;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String getURL() {
|
|
|
+ return URL;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void setURL(String uRL) {
|
|
|
+ URL = uRL;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param args
|
|
|
+ */
|
|
|
+ public static void main(String[] args) throws SQLException {
|
|
|
+ // TODO Auto-generated method stub
|
|
|
+ JdbcUtils jdbcUtils = new JdbcUtils();
|
|
|
+ jdbcUtils.getConnection();
|
|
|
+
|
|
|
+ /*******************增*********************/
|
|
|
+ /* String sql = "insert into userinfo (username, pswd) values (?, ?), (?, ?), (?, ?)";
|
|
|
+ List<Object> params = new ArrayList<Object>();
|
|
|
+ params.add("小明");
|
|
|
+ params.add("123xiaoming");
|
|
|
+ params.add("张三");
|
|
|
+ params.add("zhangsan");
|
|
|
+ params.add("李四");
|
|
|
+ params.add("lisi000");
|
|
|
+ try {
|
|
|
+ boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
|
|
|
+ System.out.println(flag);
|
|
|
+ } catch (SQLException e) {
|
|
|
+ // TODO Auto-generated catch block
|
|
|
+ e.printStackTrace();
|
|
|
+ }*/
|
|
|
+
|
|
|
+
|
|
|
+ /*******************删*********************/
|
|
|
+ //删除名字为张三的记录
|
|
|
+ /* String sql = "delete from userinfo where username = ?";
|
|
|
+ List<Object> params = new ArrayList<Object>();
|
|
|
+ params.add("小明");
|
|
|
+ boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);*/
|
|
|
+
|
|
|
+ /*******************改*********************/
|
|
|
+ //将名字为李四的密码改了
|
|
|
+ /* String sql = "update userinfo set pswd = ? where username = ? ";
|
|
|
+ List<Object> params = new ArrayList<Object>();
|
|
|
+ params.add("lisi88888");
|
|
|
+ params.add("李四");
|
|
|
+ boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
|
|
|
+ System.out.println(flag);*/
|
|
|
+
|
|
|
+ /*******************查*********************/
|
|
|
+ //不利用反射查询多个记录
|
|
|
+ /* String sql2 = "select * from userinfo ";
|
|
|
+ List<Map<String, Object>> list = jdbcUtils.findModeResult(sql2, null);
|
|
|
+ System.out.println(list);*/
|
|
|
+
|
|
|
+ //利用反射查询 单条记录
|
|
|
+ String sql = "select * from userinfo where username = ? ";
|
|
|
+ List<Object> params = new ArrayList<Object>();
|
|
|
+ params.add("李四");
|
|
|
+// UserInfo userInfo;
|
|
|
+// try {
|
|
|
+// userInfo = jdbcUtils.findSimpleRefResult(sql, params, UserInfo.class);
|
|
|
+// System.out.print(userInfo);
|
|
|
+// } catch (Exception e) {
|
|
|
+// // TODO Auto-generated catch block
|
|
|
+// e.printStackTrace();
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|