当前位置:   article > 正文

java arraylist 数据库,关于java:在Android中的SQLite数据库中保存ArrayList

安卓的arrylist算数据库存储吗

我一直在Android上使用SQLite,我想在表中的列中添加一个arraylist,然后将数据作为arraylist获取。 arraylist是Longs的列表。 我注意到SQL有一个存储BLOBS的选项,但是看起来我需要先将arraylist转换为byte [],然后才能将它作为blob存储在我的SQLite数据库中。

如果有人有一个如何将arraylists保存到SQLite数据库的解决方案,将非常感激。 或者是否有任何其他选项来保存我的数据数组,我应该考虑?

要插入:

ArrayList inputArray=new ArrayList();

//添加值为inputArray

Gson gson = new Gson();

String inputString= gson.toJson(inputArray);

System.out.println("inputString=" + inputString);

使用"inputString"在SQLite数据库中保存ArrayList的值

要撤消:

从SQLiteDatabse获取您保存的字符串并将其更改为ArrayList类型,如下所示:

outputarray是一个String,它是从SQLiteDatabase获取的示例。

Type type = new TypeToken>() {}.getType();

ArrayList finalOutputString = gson.fromJson(outputarray, type);

在SQLite中使用text作为格式来存储字符串Value .....

什么是Gson? 没有选择强加这个班级。

@ Md.ImranChoudhury'Gson(github.com/google/gson)是一个用于使用反射将Java对象转换为JSON和从JSON转换的库。

谢谢@sandrstar

请原谅我剽窃我之前对BLOB vs. VARCHAR的回答,以便在MySQL表中存储数组。那里的其他答案也非常相关。

我认为Con的方法可能比使用java序列化更好,因为java的内置序列化将需要额外的字节,而非Java应用程序将更难处理数据。

public static void storeInDB(ArrayList longs) throws IOException, SQLException {

ByteArrayOutputStream bout = new ByteArrayOutputStream();

DataOutputStream dout = new DataOutputStream(bout);

for (long l : longs) {

dout.writeLong(l);

}

dout.close();

byte[] asBytes = bout.toByteArray();

PreparedStatement stmt = null;  // however you get this...

stmt.setBytes(1, asBytes);

stmt.executeUpdate();

stmt.close();

}

public static ArrayList readFromDB() throws IOException, SQLException {

ArrayList longs = new ArrayList();

ResultSet rs = null;  // however you get this...

while (rs.next()) {

byte[] asBytes = rs.getBytes("myLongs");

ByteArrayInputStream bin = new ByteArrayInputStream(asBytes);

DataInputStream din = new DataInputStream(bin);

for (int i = 0; i < asBytes.length/8; i++) {

longs.add(din.readLong());

}

return longs;

}

}

注意:如果您的列表有时包含超过31个长度(248个字节),那么您将需要使用BLOB。你不能在MySQL中使用BINARY()或VARBINARY()。我意识到你在问SQLite,但本着完全抄袭我以前的答案的精神,我会假装你在问MySQL:

mysql> CREATE TABLE t (a VARBINARY(2400)) ;

ERROR 1074 (42000): Column length too big for column 'a' (max = 255);

use BLOB or TEXT instead

我有两个ArrayList,两个都是1000多个条目。我查看blob和字节,但对我来说,加快进程并使其可用的解决方案是通过更改插入方法并摆脱database.insert - 这是对此的信用。

private static final String INSERT ="insert into"

+ YOUR_TABLE_NAME+" (" + COLUMN_1 +","

+ COLUMN_2 +") values (?, ?)";

public void insertArrayData(ArrayList array1,

ArrayList array2) {

try {

database.open();

} catch (SQLException e) {

e.printStackTrace();

}

int aSize = array1.size();

database.beginTransaction();

try {

SQLiteStatement insert = database.compileStatement(INSERT);

for (int i = 0; i < aSize; i++) {

insert.bindString(1, array1.get(i));

insert.bindString(2, array2.get(i));

insert.executeInsert();

}

database.setTransactionSuccessful();

} catch (SQLException e) {

e.printStackTrace();

} finally {

database.endTransaction();

}

try {

database.close();

} catch (Exception e) {

e.printStackTrace();

}

}

它很容易适应Longs和Integers等,并且快速闪电。所以谢天谢地,我不再需要关注blob和字节了!希望能帮助到你。

有一种更简单的方法可以用另一种方式完成这样的事情。

你可以创建一个包含所有数组值的字符串。

为此创建一个StringBuilder并使用分隔符连续附加值和offcource(就像你在数组值中不会使用的simbole一样。例如virtual'|'。

在代码中例如:

double[] mylist = new double[]{23, 554, 55};

StringBuilder str = null;

str = new StringBuilder();

for(int i=0;i

str.append(mylist[i]+"|");

}

String result = str.toString();

db.open();

db.insert(result);

db.close();

当你想要获取它们并使用这些值时。从数据库中获取列,将其纯化为String,并使用splite()opration pure,数组中的每个数组值都比u更容易使用:)

让我们在代码中执行:

String str = db.getdata();

String[] list = str.split("|");

通过简单的转换,您可以将它们用作双倍;

double mydouble = Double.parsDouble(list[1].toString());

也许它不是标准但它是有帮助的,希望帮助;)

听起来你想序列化List。这是Java Serialization API的教程/介绍。

链接死了......

链接转到java.com/

您必须手动执行此操作,遍历列表中的每个项目并将其更改为字节,然后再将其存储在数据库中

for (long l : array){

//change to byte here

//Store in database here

}

ArrayList list = new ArrayList();

list.add("Item 1");

list.add("Item 2");

list.add("Item 3");

String joined = TextUtils.join(",", list);

Log.i(TAG,"joined strings:" + joined);

String[] array = TextUtils.split(joined,",");

Log.i(TAG,"joined strings:" + array[0] + array[1] + array[2]);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/77284
推荐阅读
相关标签
  

闽ICP备14008679号