前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android中关于UUID的操作

Android中关于UUID的操作

作者头像
佛系编码
发布2018-05-22 11:16:00
2.2K0
发布2018-05-22 11:16:00
举报
文章被收录于专栏:Android学习之路Android学习之路

UUID

通用唯一识别码(Universally Unique Identifier)是一种软件建构的标准; UUID的目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不是需要通过中央控制端来做辨识信息的指定。如此以阿里,每个人都可以创建与其他人不冲突的UUID。在这种情况下,就不需要考虑数据库创建时的重复问题; UUID是由一组32位数的16进制数字构成,UUID的标准形式包含32个16进制数字,以连字号分为五段。形式为 8-4-4-12的32个字符。 550e8400-e29b-41d4-a716-446655440000

参考链接:https://zh.wikipedia.org/wiki

UUID的生成

java中提供了 UUID类来生成UUID

代码语言:javascript
复制
UUID uuid = UUID.randomUUID();

UUID ,byte[],16进制字符串之间的转换

代码语言:javascript
复制
/**
 * uuid转化 byte[]
 * @param uuid
 * @return
 */
public static byte[] toByte(UUID uuid) {
    ByteBuffer buffer = ByteBuffer.wrap(new byte[16]);
    buffer.putLong(uuid.getMostSignificantBits());
    buffer.putLong(uuid.getLeastSignificantBits());
    return buffer.array();
}

/**
 * byte[] 转换 uuid
 * @param bytes
 * @return
 */
public static UUID toUUID(byte[] bytes) {
    ByteBuffer buffer = ByteBuffer.wrap(bytes);
    long fistLong = buffer.getLong();
    long secondLong = buffer.getLong();
    return new UUID(fistLong, secondLong);
}

/**
 * byte[] 转换为 16进制字符串啊
 * @param bytes
 * @return
 */
public static String bytesToHexStr(byte[] bytes) {
    StringBuffer sb = new StringBuffer();
    for (byte b : bytes) {
        int v = b & 0xff;
        String hv = Integer.toHexString(v);
        if (hv.length() < 2) {
            sb.append("0");
        }
        sb.append(hv);
    }
    return sb.toString();
}

参考链接:http://stackoverflow.com/questions/17893609/convert-uuid-to-byte-that-works-when-using-uuid-nameuuidfrombytesb

https://my.oschina.net/u/347386/blog/182717

sqlite中 guid类型数据的操作

表结构

表结构
表结构

插入

代码语言:javascript
复制
private void insert() {
    UUID uuid = UUID.randomUUID();
    String name = "mxc";
    byte[] bytes = UUIDUtils.toByte(uuid);
    ContentValues cv = new ContentValues();
    cv.put("id",bytes);
    cv.put("name",name);

    SQLiteDatabase db = helper.getWritableDatabase();
    db.beginTransaction();
    db.insert("tb0",null,cv);
    db.setTransactionSuccessful();
    db.endTransaction();
}

修改

代码语言:javascript
复制
private void update(){
    /**
     * 对于uuid的比较 ,转换为16进制字符串
     */
    String hexStr = UUIDUtils.bytesToHexStr(bytes);
    SQLiteDatabase db = helper.getWritableDatabase();
    ContentValues cv = new ContentValues();
    cv.put("name","sky-mxc");
    cv.put("age",23);
    Log.e(TAG, "update: hexStr="+hexStr);
    db.beginTransaction();
    db.update("tb0",cv,"id = x'"+hexStr+"'",null);
    db.setTransactionSuccessful();
    db.endTransaction();
    query();
}

查询

代码语言:javascript
复制
private void query(){
    StringBuffer sb = new StringBuffer("数据如下:\n");
    SQLiteDatabase db = helper.getReadableDatabase();
    Cursor cursor = db.query("tb0", new String[]{"id", "name", "age"}, null, null, null, null, null);
    while (cursor.moveToNext()){
        byte[] ids = cursor.getBlob(cursor.getColumnIndex("id"));
        bytes = ids;
        UUID uuid = UUIDUtils.toUUID(ids);
        String name = cursor.getString(cursor.getColumnIndex("name"));
        int age = cursor.getInt(cursor.getColumnIndex("age"));
        sb.append("uuid="+uuid.toString());
        sb.append(";\n");
        String hexStr = UUIDUtils.bytesToHexStr(ids);
       sb.append("hexStr="+hexStr);
        sb.append(";\n");
        Log.e(TAG, "query: hexStr="+hexStr);
        sb.append("name="+name);
        sb.append(";\n");
        sb.append("age="+age);
        sb.append(";\n");
        sb.append("---------------------------\n");
    }
    cursor.close();
    tvShow.setText(sb.toString());
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • UUID
    • UUID的生成
      • UUID ,byte[],16进制字符串之间的转换
        • sqlite中 guid类型数据的操作
          • 插入
          • 修改
          • 查询
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档