2
13693261870
2022-09-16 653761a31dfeb50dd3d007e892d69c90bf0cdafc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
package com.landtool.lanbase.modules.api.utils;
 
 
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.LinkedHashMap;
import java.util.Map;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
 
/**
 * @Author: lizhao
 * @Date: 2018-04-17 17:17
 * @param:连接多个数据库的工具类(Oracle,sqlserver)
 * @Description:
 *
 */
public class JDBCUtils {
    
 
    public static void main(String[] args) {
 
       
 
    }
    /**
     * @Author: lizhao
     * @Date: 2018-04-17 15:58
     * @param hostName :服务器地址;sid:数据库名称;user:用户名;password:密码;port:端口
     * @Description:
     *
     */
    public static String OracleConnUtils(String hostName, String sid, String user, String password, String port, String sql){
        //声明Connection对象
        Connection con;
        //驱动程序名
        String driver = "oracle.jdbc.driver.OracleDriver";
        //URL指向要访问的数据库名
        String url =  "jdbc:oracle:thin:@"+hostName+":"+port+"/"+sid+"";
        System.out.println(url);
        //遍历查询结果集
        return getString(user, password, sql, driver, url);
 
 
    }
    public static String SqlServerConnUtils(String hostName, String sid, String user, String password,  String sql){
        //声明Connection对象
        Connection con;
        //驱动程序名
        String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        //URL指向要访问的数据库名
        String url = "jdbc:sqlserver://"+hostName+";database="+sid+"";
        //遍历查询结果集
        return getString(user, password, sql, driver, url);
 
    }
 
    public static String MysqlConnUtils(String hostName, String sid, String user, String password, String port,String sql){
        String driver = "com.mysql.jdbc.Driver";
        String url =  "jdbc:mysql://"+hostName+":"+port+"/"+sid;
      //遍历查询结果集
        return getString(user, password, sql, driver, url);
    }
 
    private static String getString(String user, String password, String sql, String driver, String url) {
        Connection con;
        try {
            //加载驱动程序
            Class.forName(driver);
            //1.getConnection()方法,连接数据库!!
            con = DriverManager.getConnection(url,user,password);
            if(!con.isClosed())
                System.out.println("Succeeded connecting to the Database!");
            //2.创建statement类对象,用来执行SQL语句!!
            Statement statement = con.createStatement();
            //要执行的SQL语句
            //3.ResultSet类,用来存放获取的结果集!!
            try {
                ResultSet rs = statement.executeQuery(sql);
                String res=resultSetToJson(rs);
                rs.close();
                con.close();
                return "[{success: true, data: '" + res + "'}]";
            }catch (Exception e){
                return "[{success: false, msg: '" + e.getMessage().replace("'","") + "'}]";
            }
//            return res;
        } catch(ClassNotFoundException e) {
            //数据库驱动类异常处理
            System.out.println("Sorry,can`t find the Driver!");
            return "[{success: false, msg: '" + e.getMessage() + "'}]";
        } catch(SQLException e) {
            //数据库连接失败异常处理
            e.printStackTrace();
            return "[{success: false, msg: '" + e.getMessage() + "'}]";
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            return "[{success: false, msg: '" + e.getMessage() + "'}]";
        }
    }
 
    public static String htmlEncodeByRegExp(String str){
        String s = "";
        if(str.equals("")) return "";
        s = str.replace("&", "&");
        s = s.replace("<", "&lt;");
        s = s.replace(">", "&gt;");
        s = s.replace("\'", "&#39;");
        s = s.replace("\"", "&quot;");
        return s;
    }
 
 
 
    public static String resultSetToJson(ResultSet rs) throws SQLException,JSONException
    {
        // json数组
        JSONArray array = new JSONArray();
        // 获取列数
        ResultSetMetaData metaData = rs.getMetaData();
        Map result = new LinkedHashMap();
        int columnCount = metaData.getColumnCount();
        // 遍历ResultSet中的每条数据
        while (rs.next()) {
            JSONObject jsonObj = new JSONObject();
            // 遍历每一列
            for (int i = 1; i <= columnCount; i++) {
                String columnName =metaData.getColumnLabel(i);
                if(rs.getObject(columnName) == null) {
                    jsonObj.put(columnName, rs.getObject(columnName));
                }
                else {
                    jsonObj.put(columnName, htmlEncodeByRegExp(rs.getObject(columnName).toString()));
                }
                int type = metaData.getColumnType(i); // 获取列的类型
                if(type == Types.INTEGER) { // 如果是rs.getInt
                    jsonObj.put(columnName,rs.getInt(columnName));
                }
                if(type == Types.ARRAY) { // 如果是rs.getArray
                    jsonObj.put(columnName, rs.getArray(columnName));
                }
                if(type == Types.BIGINT) {
                    jsonObj.put(columnName, rs.getInt(columnName));
                }
                if(type == Types.BOOLEAN) { // 如果是rs.getInt
                    jsonObj.put(columnName, rs.getBoolean(columnName));
                }
                if(type == Types.BLOB) { // 如果是rs.getInt
                    jsonObj.put(columnName, htmlEncodeByRegExp(rs.getBlob(columnName).toString()));
                }
                if(type == Types.DOUBLE) { // 如果是rs.getInt
                    jsonObj.put(columnName, rs.getDouble(columnName));
                }
                if(type == Types.FLOAT) { // 如果是rs.getInt
                    jsonObj.put(columnName, rs.getFloat(columnName));
                }
                if(type == Types.NVARCHAR) { // 如果是rs.getInt
                    if(rs.getNString(columnName)==null){
                        jsonObj.put(columnName, "");
                    //包含特殊字符无法转换json
                    }else if(rs.getNString(columnName).contains("\\") || rs.getNString(columnName).contains("\"") || rs.getNString(columnName).contains("'")){
                        jsonObj.put(columnName, htmlEncodeByRegExp(rs.getNString(columnName)));
                    }else {
                        jsonObj.put(columnName, rs.getNString(columnName));
                    }
                }
                if(type == Types.VARCHAR) {// 如果是rs.getInt
                    if(rs.getString(columnName)==null){
                        jsonObj.put(columnName, "");
                    //包含特殊字符无法转换json
                    }else if(rs.getString(columnName).contains("\\") || rs.getString(columnName).contains("\"") || rs.getString(columnName).contains("'")){
                        jsonObj.put(columnName, htmlEncodeByRegExp(rs.getString(columnName)));
                    }else {
                        jsonObj.put(columnName, rs.getString(columnName));
                    }
 
                }
                if(type == Types.TINYINT) { // 如果是rs.getInt
                    jsonObj.put(columnName, rs.getInt(columnName));
                }
                if(type == Types.SMALLINT) { // 如果是rs.getInt
                    jsonObj.put(columnName, rs.getInt(columnName));
                }
                if(type == Types.DATE) { // 如果是rs.getInt
                    jsonObj.put(columnName, rs.getDate(columnName));
                }
                if(type == Types.TIMESTAMP) { // 如果是rs.getInt
                    jsonObj.put(columnName, rs.getTimestamp(columnName));
                }
 
 
            }
            array.put(jsonObj);
        }
 
        return array.toString();
    }
 
}