Android学习(二):解析JSON,GSON,FASTJSON;JDBC编程

一、android使用JSON
JSON数据格式如下形式(以键值对的形式存在):
1
2
3
4
5
6
7
{
    "students":
    [
        {"name":"jack","age":10},
        {"name":"Lucy","age":40}
    ]
}
·解析JSON格式如下例子代码:
·1.首先定义Person类,创建Person.java
1
2
3
4
5
6
7
8
9
10
11
12
13
package com.qianfeng.domain;
public class Person {
    private int age; 
    private String name;
    public Person() { // TODO Auto-generated constructor stub }
    public Person(int age, String name) { super(); this.age = age; this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    @Override 
    public String toString() { return "Person [age=" + age + ", name=" + name + "]"; }
}
·2.JsonList数据,创建JsonList.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.qianfeng.service;
import java.util.ArrayList;
import java.util.List;
import com.qianfeng.domain.Person;
public class JsonList {
    public JsonList() {}
    public static List<Person> getList() {
        List<Person> list = new ArrayList<Person>();
        list.add(new Person(1002,"李四2"));
        list.add(new Person(1003,"李四3"));
        list.add(new Person(1001,"李四1"));
        return list;
    }
    public static Person getPerson(){
        return new Person(1002,"李四2"); 
    }
}
·3.JSON解析程序,创建JsonTools.java
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
package com.qianfeng.service;
import java.util.ArrayList;
import java.util.List;
import com.qianfeng.domain.Person;
import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
public class JsonTools {
    public JsonTools() {}
    public static String getString(Person person) {
        JSON json = JSONSerializer.toJSON(JsonList.getPerson());
        return json.toString();
    }
    public static Person getPerson(String msgString) {
        Person person = new Person();
        JSONArray array = new JSONArray();
        array.add(msgString);
        JSONObject obj = array.getJSONObject(0);
        // System.out.println(obj.get("age"));
        // System.out.println(obj.get("name"));
        person.setAge(obj.getInt("age"));
        person.setName(obj.getString("name"));
        return person;
    }
    public static String getListString(List<Person> listPersons) {
        JSON json = JSONSerializer.toJSON(listPersons);
        return json.toString();
    }
    /**
     * 将一个json格式的字符串转换成行对应的对象
     * @param str
     * @return
     */
    public static List<Person> getPersons(String str) {
        List<Person> list = new ArrayList<Person>();
        JSONArray array = new JSONArray();
        array.add(str);
        JSONArray array2 = array.getJSONArray(0);
        for (int i = 0; i <array2.size(); i++) {
            JSONObject jsonObject =  array2.getJSONObject(i);
            Person person = new Person();
            person.setAge(jsonObject.getInt("age"));
            person.setName(jsonObject.getString("name"));
            list.add(person);
        }
        return list;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // JSON json = JSONSerializer.toJSON(JsonList.getList());
        // System.out.println(getString(new Person(23,"jack")));
        // System.out.println(getPerson("{‘age‘:1002,‘name‘:‘李四2‘}").toString());
        // System.out.println(getListString(JsonList.getList()));
        String msgString = "[{‘age‘:1002,‘name‘:‘李四2‘},{‘age‘:1003,‘name‘:‘李四3‘},{‘age‘:1001,‘name‘:‘李四1‘}]";
        List<Person> lPersons = getPersons(msgString);
        for(Person p:lPersons){
            System.out.println(p.toString());
        }
    }
}
·
·二、android使用GSON
·?Gson这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。
·?Gson支持任意复杂Java对象包括没有源代码的对象。
·解析GSON格式如下例子代码:
·1.首先定义Person类,如上述
·2.创建GsonTools.java
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
package com.android.mygson;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.android.domain.Person;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonTools {
    public GsonTools() {}
    public static String createGsonString(Object object) {
        Gson gson = new Gson();
        String gsonString = gson.toJson(object);
        return gsonString;
    }
    public static <T> T changeGsonToBean(String gsonString, Class<T> cls) {
        Gson gson = new Gson();
        T t = gson.fromJson(gsonString, cls);
        return t;
    }
    public static <T> List<T> changeGsonToList(String gsonString, Class<T> cls) {
        Gson gson = new Gson();
        List<T> list_person = gson.fromJson(gsonString,
                new TypeToken<List<T>>() {
                }.getType());
        return list_person;
    }
    public static List<Map<String, Object>> changeGsonToListMaps(String gsonString) {
        List<Map<String, Object>> list = null;
        Gson gson = new Gson();
        list = gson.fromJson(gsonString,
                new TypeToken<List<Map<String, Object>>>() {
                }.getType());
        return list;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // Person person1 = new Person("张三1", 24, "北京1");
        // Person person2 = new Person("张三2", 23, "北京2");
        // List<Person> list = new ArrayList<Person>();
        // list.add(person1);
        // list.add(person2);
        //
        // String gsonString = createGsonString(list);
        // System.out.println(gsonString);
        // Gson gson = new Gson();
        // List<Person> list_person = changeGsonToList(gsonString,Person.class);
        // System.out.println(list_person.toString());
        // Person pp = changeGsonToBean(gsonString,Person.class);
        // System.out.println(pp);
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name""jack");
        map.put("age"23);
        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("name""rose");
        map2.put("age"24);
        list.add(map);
        list.add(map2);
        String gsonString = createGsonString(list);
        System.out.println(gsonString);
        List<Map<String, Object>> list2 = changeGsonToListMaps(gsonString);
        System.out.println(list2.toString());
    }
}
·
·三、android使用阿里巴巴fastjson技术
·?FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征
·?速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson
·?功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省。
·?无依赖,能够直接运行在Java SE 5.0以上版本
·?支持Android
·?开源 (Apache 2.0)
·解析GSON格式如下例子代码:
·1.首先定义Person类,如上述
·2.创建FastJsonTools.java
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
package com.android.myfastjson;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.asm.Type;
import com.alibaba.fastjson.util.TypeUtils;
public class FastJsonTools {
    public FastJsonTools() {}
    public static String createJsonString(Object object) {
        String jsonString = JSON.toJSONString(object);
        return jsonString;
    }
    public static <T> T createJsonBean(String jsonString, Class<T> cls) {
        T t = JSON.parseObject(jsonString, cls);
        return t;
    }
    public static <T> List<T> createJsonToListBean(String jsonString,
            Class<T> cls) {
        List<T> list = null;
        list = JSON.parseArray(jsonString, cls);
        return list;
    }
    public static List<Map<String, Object>> createJsonToListMap(
            String jsonString) {
        List<Map<String, Object>> list2 = JSON.parseObject(jsonString,
                new TypeReference<List<Map<String, Object>>>() {
                });
        return list2;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // Person person1 = new Person("张三1", 24, "北京1");
        // Person person2 = new Person("张三2", 23, "北京2");
        // List<Person> list = new ArrayList<Person>();
        // list.add(person1);
        // list.add(person2);
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name""jack");
        map.put("age"23);
        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("name""rose");
        map2.put("age"24);
        list.add(map);
        list.add(map2);
        String jsonString = JSON.toJSONString(list);
        System.out.println(jsonString);
        // JSON.parseArray(arg0, arg1)
        List<Map<String, Object>> list2 = JSON.parseObject(jsonString,
                new TypeReference<List<Map<String, Object>>>() {
                });
        // List<Person> lists = JSON.parseArray(arg0, arg1);
        System.out.println(list2.toString());
    }
}
·
·四、JDBC框架介绍
·JDBC程序访问数据库的步骤 
·?步骤一:加载JDBC驱动程序
·?步骤二:提供连接参数
·?步骤三:建立一个数据库的连接
·?步骤四:创建一个statement
·?步骤五:执行SQL语句
·?步骤六:处理结果
·?步骤七:关闭JDBC对象
·
·JDBC代码范例
·1.定义基类:UserInfo.java
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
package com.jdbc.dbutils.domain;
import java.io.Serializable;
public class UserInfo implements Serializable {
    private static final long serialVersionUID = 1L;
    private int id;
    private String username;
    private String pswd;
    @Override
    public String toString() {
        return "UserInfo [id=" + id + ", username=" + username + ", pswd="
                + pswd + "]";
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPswd() {
        return pswd;
    }
    public void setPswd(String pswd) {
        this.pswd = pswd;
    }
    public static long getSerialversionuid() {
        return serialVersionUID;
    }
    public UserInfo() {
        // TODO Auto-generated constructor stub
    }
}
·2.建立JdbcUtils.java类
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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
package com.jdbc.dbutils;
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;
import com.jdbc.dbutils.domain.UserInfo;
public class JdbcUtils {
    // 表示定义数据库的用户名
    private final String USERNAME = "root";
    // 定义数据库的密码
    private final String PASSWORD = "admin";
    // 定义数据库的驱动信息
    private final String DRIVER = "com.mysql.jdbc.Driver";
    // 定义访问数据库的地址
    private final String URL = "jdbc:mysql://localhost:3306/mydb";
    // 定义数据库的链接
    private Connection connection;
    // 定义sql语句的执行对象
    private PreparedStatement pstmt;
    // 定义查询返回的结果集合
    private ResultSet resultSet;
    public JdbcUtils() {
        try {
            Class.forName(DRIVER);
            System.out.println("注册驱动成功!!");
        catch (Exception e) {
            // TODO: handle exception
        }
    }
    // 定义获得数据库的链接
    public Connection getConnection() {
        try {
            connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        catch (Exception e) {
            // TODO: handle exception
        }
        return connection;
    }
    /**
     * 完成对数据库的表的添加删除和修改的操作
     
     * @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>> findMoreResult(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);
                Object cols_value = resultSet.getObject(cols_name);
                if (cols_value == null) {
                    cols_value = "";
                }
                map.put(cols_name, cols_value);
            }
            list.add(map);
        }
        return list;
    }
    // jdbc的封装可以用反射机制来封装:
    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的访问private权限
                field.set(resultObject, cols_value);
            }
        }
        return resultObject;
    }
    /**
     * 通过反射机制访问数据库
     
     * @param <T>
     * @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);
                field.set(resultObject, cols_value);
            }
            list.add(resultObject);
        }
        return list;
    }
    public void releaseConn() {
        if (resultSet != null) {
            try {
                resultSet.close();
            catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (pstmt != null) {
            try {
                pstmt.close();
            catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // 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("rose");
        // params.add("123");
        // try {
        // boolean flag = jdbcUtils.updateByPreparedStatement(sql, params);
        // System.out.println(flag);
        // } catch (SQLException e) {
        // // TODO Auto-generated catch block
        // e.printStackTrace();
        // }
        String sql = "select * from userinfo ";
//      List<Object> params = new ArrayList<Object>();
//      params.add(1);
        try {
            List<UserInfo> list = jdbcUtils.findMoreRefResult(sql,
                    null, UserInfo.class);
            System.out.println(list);
        catch (Exception e) {
            // TODO: handle exception
        finally {
            jdbcUtils.releaseConn();
        }
    }
}
·
·
·
·
·
·
·Over

Android学习(二):解析JSON,GSON,FASTJSON;JDBC编程

上一篇:android 电子书源码,翻页效果


下一篇:Android通讯录数据库介绍与基本操作(增删改查)