Java 在Android中保存SQLite数据库中的ArrayList
我一直在android上使用SQLite,我想向表中的列添加一个arraylist,然后将数据作为arraylist取回。arraylist是一个长列表。我注意到SQL有一个用于存储blob的选项,但是看起来我需要先将arraylist转换为byte[],然后才能将其作为blob存储在SQLite数据库中Java 在Android中保存SQLite数据库中的ArrayList,java,sql,android,sqlite,arraylist,Java,Sql,Android,Sqlite,Arraylist,我一直在android上使用SQLite,我想向表中的列添加一个arraylist,然后将数据作为arraylist取回。arraylist是一个长列表。我注意到SQL有一个用于存储blob的选项,但是看起来我需要先将arraylist转换为byte[],然后才能将其作为blob存储在SQLite数据库中 如果有人能找到将ArrayList保存到SQLite数据库的解决方案,我们将不胜感激。或者有其他的选择来保存我的数据数组,我应该考虑?听起来好像你想序列化列表。到Java序列化API。您必须手
如果有人能找到将ArrayList保存到SQLite数据库的解决方案,我们将不胜感激。或者有其他的选择来保存我的数据数组,我应该考虑?
听起来好像你想序列化列表。到Java序列化API。
您必须手动执行此操作,检查列表中的每个项目,并将其更改为字节,然后再将其存储到数据库中for (long l : array<long>){
//change to byte here
//Store in database here
}
for(长l:数组){
//在这里改为字节
//存储在数据库中
}
请原谅我野蛮地抄袭了我之前的答案。那边的其他答案也很中肯
我认为Con的方法可能比使用java序列化更好,因为java的内置序列化将需要额外的字节,而非java应用程序处理数据的难度更大
public static void storeInDB(ArrayList<Long> 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<Long> readFromDB() throws IOException, SQLException {
ArrayList<Long> longs = new ArrayList<Long>();
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;
}
}
我有两个ArrayList
,都将有1000多个条目。我查看了BLOB和字节,但对我来说,加快进程并使其可用的解决方案是更改insert方法并去掉数据库
private static final String INSERT=“插入到”
+您的_表_名称+”(“+列_1+”,”
+_2+)列)值(?,)”;
公共无效插入ArrayData(ArrayList array1,
ArrayList array2){
试一试{
open();
}捕获(SQLE异常){
e、 printStackTrace();
}
int aSize=array1.size();
database.beginTransaction();
试一试{
SQLiteStatement insert=数据库.compileStatement(insert);
for(int i=0;i
它很容易适应长码和整数等,发光速度快。所以,谢天谢地,我再也不用为这些小数据块和字节挠头了!希望能有帮助 插入:
ArrayList<String> inputArray=new ArrayList<String>();
使用“inputString”在SQLite数据库中保存ArrayList的值
检索:
从SQLiteDatabase获取您保存并更改为ArrayList类型的字符串,如下所示:
outputarray是一个字符串,在本例中是从SQLiteDatabase获取的
Type type = new TypeToken<ArrayList<String>>() {}.getType();
ArrayList<String> finalOutputString = gson.fromJson(outputarray, type);
Type Type=new-TypeToken(){}.getType();
ArrayList finalOutputString=gson.fromJson(outputarray,type);
- 在SQLite中,使用文本作为格式来存储字符串值
有一种更简单的方法可以完全用另一种方式来做这件事。
您可以创建一个由所有数组值组成的字符串。
为此,请创建一个StringBuilder,并使用分隔符(例如,在数组值中不使用的simbole)连续地、不连续地附加值。
例如,在代码中:
double[] mylist = new double[]{23, 554, 55};
StringBuilder str = null;
str = new StringBuilder();
for(int i=0;i<mylist.length;i++){
str.append(mylist[i]+"|");
}
String result = str.toString();
db.open();
db.insert(result);
db.close();
通过简单的转换,您可以将其用作双精度
double mydouble = Double.parsDouble(list[1].toString());
也许它不是标准的,但它很有用,希望有帮助;)ArrayList list=new ArrayList();
列表。添加(“第1项”);
列表。添加(“第2项”);
列表。添加(“第3项”);
连接的字符串=TextUtils.join(“,”列表);
Log.i(标记“连接字符串:”+连接);
字符串[]数组=TextUtils.split(已联接,“,”);
Log.i(标记,“连接字符串:”+array[0]+array[1]+array[2]);
链接到java.com/Gson是什么?没有强制使用此类的选项。@Md.ImranChoudhury“Gson()是一个库,用于使用反射将Java对象与JSON进行转换。”
Type type = new TypeToken<ArrayList<String>>() {}.getType();
ArrayList<String> finalOutputString = gson.fromJson(outputarray, type);
double[] mylist = new double[]{23, 554, 55};
StringBuilder str = null;
str = new StringBuilder();
for(int i=0;i<mylist.length;i++){
str.append(mylist[i]+"|");
}
String result = str.toString();
db.open();
db.insert(result);
db.close();
String str = db.getdata();
String[] list = str.split("|");
double mydouble = Double.parsDouble(list[1].toString());
ArrayList<String> list = new ArrayList<String>();
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]);