sujinwen
2017-07-24 ba120c368480d2c5c5f31eee26ec954e332afd71
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
package cn.com.basic.face.service.sqlite;
 
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
 
import cn.com.basic.face.base.MainActivity;
 
/**
 *    数据同步dao层
 *
 */
public class DataSynchronDao {
 
    public static DataSynchronDao instance = new DataSynchronDao();
 
//##################增删改查案例##########################
 
 
    /***
     * 创建一个表
     * @param db
     */
    private void createTable(SQLiteDatabase db){
    //创建表SQL语句
        String stu_table="create table usertable(_id integer primary key autoincrement,sname text,snumber text)";
    //执行SQL语句
        db.execSQL(stu_table);
    }
 
 
 
 
 
    /***
     * 添加案例
     * @param db
     *
     * 参数1  表名称,
       参数2  空列的默认值
       参数3  ContentValues类型的一个封装了列名称和列值的Map;
     ()
     */
    private void insert(SQLiteDatabase db){
    //实例化常量值
    ContentValues cValue = new ContentValues();
    //添加用户名
    cValue.put("sname","xiaoming");
    //添加密码
    cValue.put("snumber","01005");
    //调用insert()方法插入数据
    db.insert("stu_table",null,cValue);
}
 
 
    /***
     * 删除数据
     * @param db
     * 参数1  表名称
       参数2  删除条件
       参数3  删除条件值数组
     */
    private void delete(SQLiteDatabase db) {
    //删除条件
        String whereClause = "id=?";
    //删除条件参数
        String[] whereArgs = {String.valueOf(2)};
    //执行删除
        db.delete("stu_table",whereClause,whereArgs);
    }
 
 
    /***
     * 修改数据
     * @param db
     *
     * 参数1  表名称
       参数2  跟行列ContentValues类型的键值对Key-Value
       参数3  更新条件(where字句)
       参数4  更新条件数组
     */
    private void update(SQLiteDatabase db) {
    //实例化内容值
    ContentValues values = new ContentValues();
    //在values中添加内容
        values.put("snumber","101003");
    //修改条件
        String whereClause = "id=?";
    //修改添加参数
        String[] whereArgs={"2"};
    //修改
        db.update("usertable",values,whereClause,whereArgs);
    }
 
 
    /***
     * 查询数据
     * @param db
     *
     在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。
     它提供了很多有关查询的方法,具体方法如下:
    public  Cursor query(String table,String[] columns,String selection,String[]  selectionArgs,String groupBy,String having,String orderBy,String limit);
    各个参数的意义说明:
    参数table:表名称
    参数columns:列名称数组
    参数selection:条件字句,相当于where
    参数selectionArgs:条件字句,参数数组
    参数groupBy:分组列
    参数having:分组条件
    参数orderBy:排序列
    参数limit:分页查询限制
    参数Cursor:返回值,相当于结果集ResultSet
    Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.
 
 
    方法描述
    getCount()                   :获得总的数据项数
    isFirst()                    :判断是否第一条记录
    isLast()                     :判断是否最后一条记录
    moveToFirst()                :移动到第一条记录
    moveToLast()                 :移动到最后一条记录
    move(int offset)             :移动到指定记录
    moveToNext()                 :移动到下一条记录
    moveToPrevious()             :移动到上一条记录
    getColumnIndexOrThrow(String  columnName)        :根据列名称获得列索引
    getInt(int columnIndex)      :获得指定列索引的int类型值
    getString(int columnIndex)   :获得指定列缩影的String类型值
     */
    private void query(SQLiteDatabase db)  {
    //查询获得游标
        Cursor cursor = db.query("usertable",null,null,null,null,null,null);
 
    //判断游标是否为空
        if(cursor.moveToFirst()){
    //遍历游标
            for(int i=0;i<cursor.getCount();i++){
                cursor.move(i);
    //获得ID
                int id = cursor.getInt(0);
    //获得用户名
                String username=cursor.getString(1);
    //获得密码
                String password=cursor.getString(2);
    //输出用户信息
                System.out.println(id+":"+username+":"+password);
            }
        }
    }
 
 
//#######################以上为增删改查DEMO#################################
 
 
 
 
    /**
     * 获取dao对象
     * @return
     */
    public static DataSynchronDao getInstance() {
        return instance;
    }
 
    /**
     * 单向同步,从客户端同步到服务器端
     * @param clientTable
     */
    public static void clientToService(String clientTable){
    //public  Cursor query(String table,String[] columns,String selection,String[]  selectionArgs,String groupBy,String having,String orderBy,String limit);
        SQLiteDatabase db = MainActivity.getInstance().db;
 
        db.execSQL("");
        db.endTransaction();
        //1.根据上次同步时间找出需要上传的数据
 
        db.execSQL("");
        //1.根据上次同步时间找出需要上传的数据
 
 
        String selection="is_synchron=?";
        String[] selectionArgs=new String[]{"N"};
        String orderBy="update_time desc";
        Cursor cursor = db.query(clientTable,null,selection,selectionArgs,null,null,orderBy,null);
 
        while (cursor.moveToNext())
        {
            int useid = cursor.getInt(cursor.getColumnIndex("useid"));
            String date = cursor.getString(cursor.getColumnIndex("date"));
            String content = cursor.getString(cursor.getColumnIndex("content"));
            int  fangxiang =cursor.getShort(cursor.getColumnIndex("dirr"));
            boolean dirr;
        }
 
        cursor.close();
        db.close();
 
    }
 
 
 
 
    /**
     * 单向同步,从服务端同步到客户端
     * @param clientTable
     * @param serviceTable
     */
    public static void serviceToClient(String clientTable,String serviceTable){
        //1.根据上次同步时间获取需要同步的数据
 
        //2.保存数据到客户端
    }
    /**
     * 双向同步,本地同步到服务器,服务器同步到本地
     * @param clientTable
     * @param serviceTable
     */
    public static void synchroData(String clientTable,String serviceTable){
        //1.根据上次同步时间和标记未同步条件查找出本地需要同步到服务器端的数据
 
        //2.将数据发送给服务器,服务器保存后返回需要同步到客户端的数据,同时修改同步时间
 
        //3.保存数据到客户端
    }
 
}