Java 在Android中保存SQLite数据库中的ArrayList

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。您必须手

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


如果有人能找到将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]);