数据库保存数据,类型为List<String>

下面展示一些 内联代码片

数据库保存数据,类型为List<String> ,字段只需设置为varchar[],然后导入下述类,并在实体类的对应字段位置加上@Type(type = "XX.ListToStringArrayUserType"),这里写保存工具类的包路径
/**
 * @Author ZGM
 * @DateTime 2021/8/26
 * @description
 */
public class ListToStringArrayUserType implements UserType, ParameterizedType, Serializable {
    protected static final int[] SQL_TYPES = {Types.ARRAY};

    /**
     * 默认 ArrayList
     */
    private Class listType;


    @Override
    public int[] sqlTypes() {
        return new int[]{Types.ARRAY};
    }

    @Override
    public Class returnedClass() {
        return listType;
    }

    @Override
    public boolean equals(Object o, Object o1) throws HibernateException {
        if (o == null) {
            return o1 == null;
        }
        return o.equals(o1);
    }

    @Override
    public int hashCode(Object o) throws HibernateException {
        return o.hashCode();
    }

    @Override
    public Object nullSafeGet(ResultSet resultSet, String[] strings, SharedSessionContractImplementor sharedSessionContractImplementor, Object o) throws HibernateException, SQLException {
        if (resultSet.getArray(strings[0]) == null) {
            return null;
        }

        Array array = resultSet.getArray(strings[0]);

        List<String> result = newList();

        String[] javaArray = (String[]) array.getArray();

        result.addAll(Arrays.asList(javaArray));

        return result;
    }

    @Override
    public void nullSafeSet(PreparedStatement preparedStatement, Object o, int i, SharedSessionContractImplementor sharedSessionContractImplementor) throws HibernateException, SQLException {
        Connection connection = preparedStatement.getConnection();
        if (o == null) {
            preparedStatement.setNull(i, SQL_TYPES[12]);
        } else {
            List castObject = (List) o;
            Object[] intArr = castObject.toArray();
            Array array = connection.createArrayOf("VARCHAR", intArr);
            preparedStatement.setArray(i, array);
        }
    }


    @Override
    public Object deepCopy(Object o) throws HibernateException {
        if (o == null) return null;
        List copyList = newList();
        copyList.addAll((List) o);
        return copyList;
    }

    @Override
    public boolean isMutable() {
        return true;
    }

    @Override
    @SuppressWarnings("unchecked")
    public Serializable disassemble(Object o) throws HibernateException {
        return ((Serializable) o);
    }

    @Override
    public Object assemble(Serializable serializable, Object o) throws HibernateException {
        return serializable;
    }

    @Override
    public Object replace(Object o, Object o1, Object o2) throws HibernateException {
        return o;
    }

    @Override
    public void setParameterValues(Properties properties) {

        String listType = (String) properties.get("listType");
        if (!Strings.isNullOrEmpty(listType)) {
            try {
                this.listType = Class.forName(listType);
            } catch (ClassNotFoundException e) {
                throw new HibernateException(e);
            }
        } else {
            this.listType = java.util.ArrayList.class;
        }

    }

    private List newList() {
        try {
            return (List) listType.newInstance();
        } catch (Exception e) {
            throw new HibernateException(e);
        }
    }
}

在Android上操作数据库通常使用SQLite,它是一个轻量级的关系型数据库管理系统。首先,你需要在`/storage/emulated/0/AudioProject/MedioVideo/`目录下创建一个SQLite数据库文件。这里我们假设已有一个名为`MedioVideo.db`的数据库。以下是步骤: **步骤1:创建数据库表** 在项目中创建一个SQLiteOpenHelper类,例如`DatabaseHelper.java`,并设置一个对应的SQLiteOpenHelper子类: ```java public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "MedioVideo.db"; private static final int DATABASE_VERSION = 1; private static final String TABLE_NAME = "data_table"; private static final String COLUMN_DATA = "data"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String createTableQuery = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_DATA + " TEXT)"; db.execSQL(createTableQuery); } // 其他方法... } ``` **步骤2:保存List<String>到数据库** 在需要的地方,比如Activity或Fragment中,你可以通过一个ContentProvider来插入数据: ```java List<String> dataList = ...; // 你的字符串列表 // 获取数据库实例 DatabaseHelper dbHelper = new DatabaseHelper(getBaseContext()); SQLiteDatabase db = dbHelper.getWritableDatabase(); for (String data : dataList) { ContentValues contentValues = new ContentValues(); contentValues.put(COLUMN_DATA, data); db.insert(TABLE_NAME, null, contentValues); } db.close(); ``` **步骤3:从数据库读取数据List<String>** 然后,在需要读取数据的时候,可以这样做: ```java Cursor cursor = dbHelper.rawQuery("SELECT * FROM " + TABLE_NAME, null); if (cursor.moveToFirst()) { List<String> retrievedData = new ArrayList<>(); do { String rowData = cursor.getString(cursor.getColumnIndex(COLUMN_DATA)); retrievedData.add(rowData); } while (cursor.moveToNext()); cursor.close(); } // 现在retrievedData就是从数据库中读取的数据 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值