[SQL] 안드로이드에 SQLite 데이터베이스에 ArrayList에 저장
SQL안드로이드에 SQLite 데이터베이스에 ArrayList에 저장
나는 안드로이드에 SQLite는 함께 일한지 나는 테이블의 컬럼에 ArrayList에 추가 한 다음 ArrayList에 같은 데이터 등을 가져 싶습니다. ArrayList에 걷고 목록입니다. 나는, SQL은 BLOBS를 저장하는 옵션이 있습니다 것으로 나타났습니다 내가 바이트로 ArrayList를 변환해야처럼, 그러나 그것은 보인다 [] 첫째 내 SQLite는 데이터베이스에 BLOB으로 저장할 수있는 전.
사람이 크게 감사하겠습니다 SQLite는 데이터베이스에 arraylists를 저장하는 방법에 대한 솔루션을 제공합니다. 또는 데이터의 내 배열을 저장하기위한 다른 옵션은 내가 고려해야 있나요?
해결법
-
==============================
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.잔인 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.나는 두 개의 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.완전히 다른 방식으로 같은 일을 할 쉬운 방법이있다. 당신은 모든 배열 값으로 구성되는 문자열을 만들 수 있습니다. 그 위해의 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.당신 같은 소리는 List를 직렬화합니다. 여기에 튜토리얼 / 소개 자바 직렬화에 대한 API이다.
당신 같은 소리는 List를 직렬화합니다. 여기에 튜토리얼 / 소개 자바 직렬화에 대한 API이다.
-
==============================
6.당신은 수동으로해야 할 목록의 각 항목을 통해 이동하고 데이터베이스에 저장하기 전에 바이트로 변경합니다
당신은 수동으로해야 할 목록의 각 항목을 통해 이동하고 데이터베이스에 저장하기 전에 바이트로 변경합니다
for (long l : array<long>){ //change to byte here //Store in database here }
-
==============================
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]);
from https://stackoverflow.com/questions/3142285/saving-arraylist-in-sqlite-database-in-android by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] .NET에 대한 데이터베이스를 내장 (0) | 2020.06.24 |
---|---|
[SQL] 일반 LINQ 쿼리의 조건? (0) | 2020.06.24 |
[SQL] 어떻게 일련의 숫자에서 누락 된 번호를 확인하려면? (0) | 2020.06.24 |
[SQL] 다른 MySQL의 데이터베이스에 하나의 MySQL 데이터베이스에서 테이블을 복사하는 방법 (0) | 2020.06.24 |
[SQL] 어떻게 SQL Server의 문자열에서 공백 문자를 제거 (0) | 2020.06.24 |