|
|
|
@ -13,7 +13,7 @@
|
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
|
* limitations under the License.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
// 该类定义了访问本地 SQLite 数据库中笔记数据表的方法
|
|
|
|
|
package net.micode.notes.gtask.data;
|
|
|
|
|
|
|
|
|
|
import android.content.ContentResolver;
|
|
|
|
@ -36,11 +36,11 @@ import org.json.JSONObject;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class SqlData {
|
|
|
|
|
private static final String TAG = SqlData.class.getSimpleName();
|
|
|
|
|
private static final String TAG = SqlData.class.getSimpleName();// 日志 TAG
|
|
|
|
|
|
|
|
|
|
private static final int INVALID_ID = -99999;
|
|
|
|
|
private static final int INVALID_ID = -99999;// 无效的数据 ID
|
|
|
|
|
|
|
|
|
|
public static final String[] PROJECTION_DATA = new String[] {
|
|
|
|
|
public static final String[] PROJECTION_DATA = new String[] {// 数据表中常用的列
|
|
|
|
|
DataColumns.ID, DataColumns.MIME_TYPE, DataColumns.CONTENT, DataColumns.DATA1,
|
|
|
|
|
DataColumns.DATA3
|
|
|
|
|
};
|
|
|
|
@ -55,10 +55,10 @@ public class SqlData {
|
|
|
|
|
|
|
|
|
|
public static final int DATA_CONTENT_DATA_3_COLUMN = 4;
|
|
|
|
|
|
|
|
|
|
private ContentResolver mContentResolver;
|
|
|
|
|
|
|
|
|
|
private boolean mIsCreate;
|
|
|
|
|
private ContentResolver mContentResolver;// ContentResolver 用于访问本地数据库
|
|
|
|
|
|
|
|
|
|
private boolean mIsCreate;// 是否为新建的数据
|
|
|
|
|
// 数据的各个列的值
|
|
|
|
|
private long mDataId;
|
|
|
|
|
|
|
|
|
|
private String mDataMimeType;
|
|
|
|
@ -69,9 +69,9 @@ public class SqlData {
|
|
|
|
|
|
|
|
|
|
private String mDataContentData3;
|
|
|
|
|
|
|
|
|
|
private ContentValues mDiffDataValues;
|
|
|
|
|
private ContentValues mDiffDataValues; // 修改时的差异数据
|
|
|
|
|
|
|
|
|
|
public SqlData(Context context) {
|
|
|
|
|
public SqlData(Context context) {// 构造方法1:用于新建数据
|
|
|
|
|
mContentResolver = context.getContentResolver();
|
|
|
|
|
mIsCreate = true;
|
|
|
|
|
mDataId = INVALID_ID;
|
|
|
|
@ -82,14 +82,14 @@ public class SqlData {
|
|
|
|
|
mDiffDataValues = new ContentValues();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public SqlData(Context context, Cursor c) {
|
|
|
|
|
public SqlData(Context context, Cursor c) {// 构造方法2:用于从数据库中读取数据
|
|
|
|
|
mContentResolver = context.getContentResolver();
|
|
|
|
|
mIsCreate = false;
|
|
|
|
|
loadFromCursor(c);
|
|
|
|
|
mDiffDataValues = new ContentValues();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void loadFromCursor(Cursor c) {
|
|
|
|
|
private void loadFromCursor(Cursor c) {// 从 Cursor 中读取数据
|
|
|
|
|
mDataId = c.getLong(DATA_ID_COLUMN);
|
|
|
|
|
mDataMimeType = c.getString(DATA_MIME_TYPE_COLUMN);
|
|
|
|
|
mDataContent = c.getString(DATA_CONTENT_COLUMN);
|
|
|
|
@ -97,7 +97,7 @@ public class SqlData {
|
|
|
|
|
mDataContentData3 = c.getString(DATA_CONTENT_DATA_3_COLUMN);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void setContent(JSONObject js) throws JSONException {
|
|
|
|
|
public void setContent(JSONObject js) throws JSONException {//建立连接
|
|
|
|
|
long dataId = js.has(DataColumns.ID) ? js.getLong(DataColumns.ID) : INVALID_ID;
|
|
|
|
|
if (mIsCreate || mDataId != dataId) {
|
|
|
|
|
mDiffDataValues.put(DataColumns.ID, dataId);
|
|
|
|
@ -144,8 +144,13 @@ public class SqlData {
|
|
|
|
|
return js;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void commit(long noteId, boolean validateVersion, long version) {
|
|
|
|
|
|
|
|
|
|
public void commit(long noteId, boolean validateVersion, long version) {//提交数据更改
|
|
|
|
|
/* 如果 mIsCreate 为 true,表示正在创建新的笔记。
|
|
|
|
|
在这种情况下,首先会检查 mDataId 是否为无效值,
|
|
|
|
|
如果是,并且 mDiffDataValues 中包含了 DataColumns.ID,
|
|
|
|
|
则会将其移除。然后将 noteId 放入 mDiffDataValues 中,
|
|
|
|
|
并通过 mContentResolver 根据 mDiffDataValues 插入数据到 Notes.CONTENT_DATA_URI 中,
|
|
|
|
|
并获取插入数据的路径信息。最后将路径中的第二个片段转换为 Long 值存储到 mDataId */
|
|
|
|
|
if (mIsCreate) {
|
|
|
|
|
if (mDataId == INVALID_ID && mDiffDataValues.containsKey(DataColumns.ID)) {
|
|
|
|
|
mDiffDataValues.remove(DataColumns.ID);
|
|
|
|
@ -159,7 +164,15 @@ public class SqlData {
|
|
|
|
|
Log.e(TAG, "Get note id error :" + e.toString());
|
|
|
|
|
throw new ActionFailureException("create note failed");
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
/*如果 mIsCreate 不为 true,表示正在更新现有笔记。
|
|
|
|
|
首先判断 mDiffDataValues 的大小是否大于 0,如果是,
|
|
|
|
|
根据是否需要验证版本号通过 mContentResolver 更新数据。如果不需要验证版本号,
|
|
|
|
|
则直接根据 mDataId 更新数据;如果需要验证版本号,
|
|
|
|
|
则使用 NoteColumns.ID 和 NoteColumns.VERSION 字段进行联合查询,
|
|
|
|
|
并以 noteId 和 version 的值作为参数,通过 mContentResolver 更新数据。
|
|
|
|
|
更新完成后,如果结果为 0,表示没有更新成功 */
|
|
|
|
|
else {
|
|
|
|
|
if (mDiffDataValues.size() > 0) {
|
|
|
|
|
int result = 0;
|
|
|
|
|
if (!validateVersion) {
|
|
|
|
@ -183,7 +196,7 @@ public class SqlData {
|
|
|
|
|
mIsCreate = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public long getId() {
|
|
|
|
|
public long getId() {//获取ID
|
|
|
|
|
return mDataId;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|