복붙노트

[SQL] 안드로이드에 SQLite 데이터베이스에 ArrayList에 저장

SQL

안드로이드에 SQLite 데이터베이스에 ArrayList에 저장

나는 안드로이드에 SQLite는 함께 일한지 나는 테이블의 컬럼에 ArrayList에 추가 한 다음 ArrayList에 같은 데이터 등을 가져 싶습니다. ArrayList에 걷고 목록입니다. 나는, SQL은 BLOBS를 저장하는 옵션이 있습니다 것으로 나타났습니다 내가 바이트로 ArrayList를 변환해야처럼, 그러나 그것은 보인다 [] 첫째 내 SQLite는 데이터베이스에 BLOB으로 저장할 수있는 전.

사람이 크게 감사하겠습니다 SQLite는 데이터베이스에 arraylists를 저장하는 방법에 대한 솔루션을 제공합니다. 또는 데이터의 내 배열을 저장하기위한 다른 옵션은 내가 고려해야 있나요?

해결법

  1. ==============================

    1.에 삽입 :

    에 삽입 :

    ArrayList<String> inputArray=new ArrayList<String>();
    

    inputArray에 //....Add 값

    Gson gson = new Gson();
    
    String inputString= gson.toJson(inputArray);
    
    System.out.println("inputString= " + inputString);
    

    SQLite 데이터베이스에서의 ArrayList의 값을 저장하기 위해 "inputString"를 사용

    검색하려면 :

    당신이 저장하고 아래와 같이 ArrayList의 타입으로 변경 어떤 SQLite는 데이터베이스에서 문자열을 가져옵니다 : outputarray이 예제의 SQLiteDatabase에서 얻을 수있는 문자열입니다.

    Type type = new TypeToken<ArrayList<String>>() {}.getType();
    
    ArrayList<String> finalOutputString = gson.fromJson(outputarray, type);
    
  2. ==============================

    2.잔인 MySQL의 테이블에 배열을 저장하는 VARCHAR 대 BLOB에 내 이전 대답을 표절 저를 용서해주세요. 저기 다른 답변도 매우 관련있다.

    잔인 MySQL의 테이블에 배열을 저장하는 VARCHAR 대 BLOB에 내 이전 대답을 표절 저를 용서해주세요. 저기 다른 답변도 매우 관련있다.

    나는 콘의 접근 방식이 더 나은 자바의 내장 직렬화가 추가 바이트가 필요합니다, 비 - 자바 응용 프로그램이 데이터를 다루는 어려워 시간이 때문에 자바 직렬화를 사용하는 것보다 아마 생각합니다.

    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;
        }
    
    }
    

    참고 : 목록 때로는 31 개 이상의 정수 (Long) (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
    
  3. ==============================

    3.나는 두 개의 ArrayList를 <문자열>, 의지 모두 1000 개 항목을했다. 신용이 여기있다 - 나는 과정을 가속화하고 사용할 수가 삽입 방법을 변경하고 database.insert 치우는로했다 만들기에 대한 해결책을 모양 바이트 보았다,하지만 나를 위해.

    나는 두 개의 ArrayList를 <문자열>, 의지 모두 1000 개 항목을했다. 신용이 여기있다 - 나는 과정을 가속화하고 사용할 수가 삽입 방법을 변경하고 database.insert 치우는로했다 만들기에 대한 해결책을 모양 바이트 보았다,하지만 나를 위해.

    private static final String INSERT = "insert into "
                + YOUR_TABLE_NAME+ " (" + COLUMN_1 + ", "
                + COLUMN_2 + ") values (?, ?)";
    
    public void insertArrayData(ArrayList<String> array1,
                ArrayList<String> 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();
            }
        }
    

    그것은 걷고 및 정수 등 쉽게 적응하고 빠른 번개입니다. 그래서 고맙게도 나는 모양과 바이트에 대해 더 이상 어떤 내 머리를 긁어하지 않았다! 희망이 도움이.

  4. ==============================

    4.완전히 다른 방식으로 같은 일을 할 쉬운 방법이있다. 당신은 모든 배열 값으로 구성되는 문자열을 만들 수 있습니다. 그 위해의 StringBuilder를하고 당신이 당신의 배열 값을 사용하지 것이다 simbole 당신 같은 분리기 (와 지속적 offcource 값을 추가, 예를 들어 가상. '|'. 예를 들어 코드 :

    완전히 다른 방식으로 같은 일을 할 쉬운 방법이있다. 당신은 모든 배열 값으로 구성되는 문자열을 만들 수 있습니다. 그 위해의 StringBuilder를하고 당신이 당신의 배열 값을 사용하지 것이다 simbole 당신 같은 분리기 (와 지속적 offcource 값을 추가, 예를 들어 가상. '|'. 예를 들어 코드 :

    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();
    

    당신이 그들을 가져오고 값을 사용하고자 할 때. 그것은 u는 쉽게 사용할 수있는 것보다 배열의 열의 배열의 각 값 문자열과 순수한 splite () opration 순수 데이터베이스에서 열을 얻을 :)

    코드에서 작업을 수행 할 수 있습니다 :

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

    간단한 변환하면 더블로 사용할 수 있습니다;

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

    어쩌면 표준 아니지만, 희망 도움이 도움이됩니다)

  5. ==============================

    5.당신 같은 소리는 List를 직렬화합니다. 여기에 튜토리얼 / 소개 자바 직렬화에 대한 API이다.

    당신 같은 소리는 List를 직렬화합니다. 여기에 튜토리얼 / 소개 자바 직렬화에 대한 API이다.

  6. ==============================

    6.당신은 수동으로해야 할 목록의 각 항목을 통해 이동하고 데이터베이스에 저장하기 전에 바이트로 변경합니다

    당신은 수동으로해야 할 목록의 각 항목을 통해 이동하고 데이터베이스에 저장하기 전에 바이트로 변경합니다

    for (long l : array<long>){
    //change to byte here
    //Store in database here
    }
    
  7. ==============================

    7.

        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]);
    
  8. from https://stackoverflow.com/questions/3142285/saving-arraylist-in-sqlite-database-in-android by cc-by-sa and MIT license