SQLite v 소개 ü SQLite 라이브러리를통해완전한관계형데이터베이스 (RDBMS) 기능제공 ü 오픈소스 ü 표준준수 ü 경량 ü 단일계층 2

Similar documents
BLOB NULL Binary 데이터 값이존재하지않음 테이블의작성예 Create table contact_list( _id integer primary key autoincrement, name text not null, tel text not null default

슬라이드 1

학습목표 SQLite 가뭔지알고, 이를사용할줄안다. SQL 의기본적인사용법들을안다. SQLite 을이용해기본적인데이터베이스응용프로그램을작성할수있다. 행을추가하는기본적인데이터베이스응용프로그램을작성할수있다. 쿼리를실행하는기본적인데이터베이스응용프로그램을작성할수있다. 쿼리결과

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

쉽게 풀어쓴 C 프로그래밊

( )부록

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

슬라이드 1

Microsoft PowerPoint Python-DB

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

Spring Boot/JDBC JdbcTemplate/CRUD 예제

어댑터뷰

교육자료

03장

Spring Data JPA Many To Many 양방향 관계 예제

01장

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

2 Application Name: Day10_yhg <LinearLayout android:layout_weight="3" > /> an

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

PowerPoint Presentation

13ÀåÃß°¡ºÐ

강의 개요

DBMS & SQL Server Installation Database Laboratory

JAVA PROGRAMMING 실습 08.다형성

PowerPoint 프레젠테이션

Microsoft PowerPoint - 04-UDP Programming.ppt

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

PowerPoint Presentation

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 09. 예외처리

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

쉽게 풀어쓴 C 프로그래밍

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

chap 5: Trees

untitled

MySQL-.. 1

PowerPoint 프레젠테이션

슬라이드 1

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

PowerPoint Presentation

윈도우시스템프로그래밍

10.ppt

rmi_박준용_final.PDF

1. 개요 - 계획서 프로젝트개요프로그램명 : 닥터 119 제작배경애완견을키우는사람들이부득이하게병원에가지못할경우에이앱을통해서자가진단을통해상태의심각성을알수있게되고또가까운동물병원으로갈수있는지도와전화번호를제공한다. 그리고애견다이어리기능을통해애견의성장과정과추억들을저

제11장 프로세스와 쓰레드

신림프로그래머_클린코드.key

13주-14주proc.PDF

Design Issues

개발문서 Oracle - Clob

PowerPoint Presentation

PowerPoint 프레젠테이션

슬라이드 1

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

DocsPin_Korean.pages

NoSQL

Microsoft PowerPoint - 10Àå.ppt

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

JAVA PROGRAMMING 실습 02. 표준 입출력

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

PowerPoint 프레젠테이션

PowerPoint Presentation

JUNIT 실습및발표

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

PowerPoint 프레젠테이션

PowerPoint Presentation

헬로, 안드로이드 13 주차 SQL 활용하기 (2) 강대기동서대학교컴퓨터정보공학부

3 S Q L A n t i p a t t e r n s Trees/intro/parent.sql CREATE TABLE Comments ( comment_id SERIAL PRIMARY KEY, parent_id BIGINT UNSIGNED, comment TEXT

FileMaker ODBC and JDBC Guide

Microsoft PowerPoint 세션.ppt

이것은리스트뷰의 setadapter 메소드에잘표현되어있습니다. setadapter 는리스트뷰에사용할데이터객체를넘겨주는메소드입니다. 일반적으로생각한다면 ArrayAdapter 객체를생성하여사용할데이터를저장할것이고데이터가저장된 ArrayAdapter 객체를 setadapt

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

JVM 메모리구조

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

12-file.key

슬라이드 1

90

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

윈도우시스템프로그래밍

PowerPoint Presentation

문서 템플릿

02 C h a p t e r Java

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

<C1A62038B0AD20B0ADC0C7B3EBC6AE2E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Java ...

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

FileMaker ODBC and JDBC Guide

Microsoft PowerPoint - Lect04.pptx

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

쉽게

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

PowerPoint 프레젠테이션

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint - CSharp-10-예외처리

adfasdfasfdasfasfadf

Microsoft PowerPoint - 2강

Transcription:

Android 데이터베이스 (SQLite) 모바일응용

SQLite v 소개 ü SQLite 라이브러리를통해완전한관계형데이터베이스 (RDBMS) 기능제공 ü 오픈소스 ü 표준준수 ü 경량 ü 단일계층 2

SQLite 데이터베이스라이브러리 v SQLiteDatabase ü 추가라이브러리 (android.database.sqlite.sqlitedatabase) ü 데이터베이스를다루는작업 ( 추가, 삭제, 수정, 질의 ) 를담당 v SQLiteOpenHelper ü 추가라이브러리 (android.database.sqlite.sqliteopenhelper) ü 데이터베이스의생성, 열기, 업그레이드를담당 3

SQLite 데이터베이스라이브러리 v 데이터베이스설계고려사항 ü 파일은보통데이터베이스테이블로저장하지않음 대신문자열을이용해해당파일의경로를저장한다. 정규화된콘텐트공급자 URI 이용 ü 거의모든테이블에자동증가키 (auto-increment key) 필드를포함시켜, 각행에대한인덱스값으로기능하도록하는것을적극권장. 4

SQLiteDatabase v SQLiteDatabase 이용하여데이터베이스열고생성하기 ü DDL구문을사용하기위해 SQLiteDatabase의 ExecSQL 메소드호출 ü SQLiteDatabase의 ExecSQL 메소드를이용한테이블생성 예제 private static final String DATABASE_NAME = "mydatabase.db"; private static final String TABLE_NAME = "maintable"; private static final String dbcreatestring = "create table " + TABLE_NAME + " ( _id integer primary key autoincrement," + "column_one text not null);"; 데이터베이스이름및테이블명전역변수선언 데이터베이스생성에대한쿼리문전역변수 SQLiteDatabase mydatabase; private void createdatabase() { mydatabase = openorcreatedatabase(database_name, Context.MODE_PRIVATE, null); mydatabase.execsql( dbcreatestring ); openorcreatedatabase 를호출하여새로운데이터베이스생성후인스턴스의 exesql 을호출하여 SQL 명령을실행한다. 5

SQLiteDatabase v 예제 : DB 및테이블생성 import java.util.locale; import android.app.activity; import android.os.bundle; import android.database.sqlite.sqlitedatabase; public class TestingData extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); SQLiteDatabase db; db = openorcreatedatabase( "TestingData.db", SQLiteDatabase.CREATE_IF_NECESSARY, null ); db.setversion(1); db.setlocale(locale.getdefault()); db.setlockingenabled(true); " final String CREATE_TABLE_COUNTRIES = "CREATE TABLE tbl_countries (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "country_name TEXT);"; final String CREATE_TABLE_STATES = "CREATE TABLE tbl_states (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "state_name TEXT," + "country_id INTEGER NOT NULL CONSTRAINT " + "contry_id REFERENCES tbl_contries(id) " + "ON DELETE CASCADE);"; db.execsql(create_table_countries); db.execsql(create_table_states); final String CREATE_TRIGGER_STATES = "CREATE TRIGGER fk_insert_state BEFORE " + "INSERT on tbl_states" + "FOR EACH ROW " + "BEGIN " + "SELECT RAISE(ROLLBACK, 'insert on table " + ""tbl_states" voilates foreign key constraint " + ""fk_insert_state"') WHERE (SELECT id FROM " + "tbl_countries WHERE id = NEW.country_id) IS NULL; + "END;"; db.execsql(create_trigger_states); 6

SQLiteDatabase v 데이터삽입하기 ü ContentValues 객체를이용하여데이터베이스테이블에새로운행을삽입가능 ü ContentValues 의값에대한열이름과맵으로서하나의행을나타냄 ü ContentValues 객체에데이터베이스테이블에맞는자료를입력후 SQLiteDatabase 클래스의 insert() 메소드를사용하여새로운레코드추가 ü 예제 ContentValues values = new ContentValues(); values.put("country_name", "US"); long countryid = db.insert("tbl_countries", null, values); ContentValues statevalues = new ContentValues(); statevalues.put("state_name", "Texas"); statevalues.put("country_id", Long.toString(countryId)); try { db.insertorthrow("tbl_states", null, statevalues); catch (Exception e) { //catch code ContentValues 객체에 put 메소드를사용하여데이터입력 Insert 메소드를사용하여 ContentValues 객체데이터입력 7

v 테이블 update 하기 ContentValues updatecountry = new ContentValues(); updatecountry.put("country_name", "United States"); db.update("tbl_countries", updatecountry, "id=?", new String[] {Long.toString(countryId)); v 테이블에서 ROW 삭제하기 db.delete("tbl_states", "id=?", new String[] {Long.toString(countryId)); 8

데이터베이스쿼리 ( 질의 ) v Query( 질의 ) ü 질의를통해데이터베이스를접근 ü 질의결과는 Cursor 객체형태로반환 ü 메소드형태 public Cursor query (String table, String[] columns, String selection, String[] selectionargs, String groupby, String having, String orderby, String limit) Table - 질의를수행할테이블이름입니다. columns - 자료를받아올필드들입니다. null을입력하면모든필드를반환합니다. selection - SQL의 "where" 구문에해당되는조건을입력합니다. 조건이많을경우,? 로대체합니다. selectionargs - selection을? 로지정하였을경우, 그조건들을입력합니다. groupby - SQL의 "group by" 구문에해당합니다. Having - groupby를지정했을경우, 그조건을넣어줍니다. orderby - 결과값정렬방식을지정합니다. null을입력하면기본정렬을수행합니다. limit 결과값의개수를제한합니다. ü 예제 ( 위메소드와다른형태 ) // 모든레코드를반환하는쿼리를실행합니다. Cursor all = mydb.query("data", null, null, null, null, null, null, null); // 이름이 google 인레코드를반환하는쿼리를실행합니다. Cursor sel = mydb.query("data", "name = google", null, null, null, null, null, null); 9

Cursor 와 ContentValues v Cursor ü 질의 (Queries) 결과를 Cursor 객체로반환받음 ü Cursor 객체는결과값의사본이아닌실제데이터 ( 레코드 ) 를가리키는역활 ü Cursor 클래스는질의결과탐색을위한여러함수를포함함 movetofirst 커서를질의결과내의첫번째행으로옮긴다. movetonext 커서를다음행으로옮긴다. movetoprevious 커서를이전행으로옮긴다. getcount 결과셋에있는행의수를리턴 getcloumnindexorthrow 지정된이름을가진열에대한인덱스를리턴 getcloumnname 지정된열인덱스의이름을리턴 getcolumnnames 현재커서에있는모든열이름을가진 String 배열하나를리턴 movetoposition 현재커서위치를리턴 getposition 커서가현재가리키고있는위치를반환 get< 데이터타입 >( 필드인덱스 ) 커서에서데이터를받아올때사용예제 ) 레코드로부터이름을받아옵니다. String name = result.getstring(1); 다른데이터형식 http://developer.android.com/reference/android/database/cursor.html 10

SQLite 데이터베이스 v 데이터베이스질의하기 ü 일반적인질의예제 ) String[] result_columns = new String[] {KEY_ID, KEY_COL1, KEY_COL3; Cursor allrows = mydatabase.query(true, DATABASE_TABLE, result_columns, null, null, null, null, null, null); 모든행의 1 열과 3 열을중복없이리턴하는질의 // Return all columns for rows where column 3 equals a set value // and the rows are ordered by column 5. String where = KEY_COL3 + "=" + requiredvalue; String order = KEY_COL5; Cursor myresult = mydatabase.query(database_table, null, where, null, null, null, order); 3 열의값과설정된값과같은행의모든열을리턴하고행들을 5 열기준으로정렬하는질의 11

SQLite 데이터베이스 v 데이터베이스질의하기 ü 커서에서결과얻어오는예제 ) int GOLD_HOARDED_COLUMN = 2; Cursor mygold = mydatabase.query("goldhoards", null, null, null, null, null, null); float totalhoard = 0f; // Make sure there is at least one row. if (mygold.movetofirst()) { // Iterate over each cursor. do { float hoard = mygold.getfloat(gold_hoarded_column); totalhoard += hoard; while(mygold.movetonext()); Float averagehoard = totalhoard / mygold.getcount(); GlodHoards 란문자를가진행들을커서에서지원한메소드를통해커서를이동하며커서가위치한데이터를안전하게가져와부동소수열을추출하여더하는작업을검색된수만큼반복하고있다. 12

SQLite 데이터베이스 v 데이터베이스행추가, 업데이트, 제거 ü SQLiteDatabase 클래스 삽입삭제업데이트 SQL문을메서드로가지고있음. 캡슐화하도록특화된메서드를제공 insert() delete() update() ü execsql 메서드 유효한 SQL 이라면어떠한것이든데이터베이스테이블상에실행가능함 13

SQLite 데이터베이스 v 새로운행삽입하기 ü 예제 ) // Create a new row of values to insert. ContentValues newvalues = new ContentValues(); // Assign values for each row. newvalues.put(column_name, newvalue); [... 각열마다반복... ] // Insert the row into your table mydatabase.insert(database_table, null, newvalues); 1. contentvalues 객체를통해삽입할새로운행하나를생성 2. 각열에값을할당 3. 값을할당받은행을테이블에삽입 14

SQLite 데이터베이스 v 데이터베이스에있는행업데이트하기 ü 예제 ) // Define the updated row content. ContentValues updatedvalues = new ContentValues(); // Assign values for each row. newvalues.put(column_name, newvalue); [... 각열마다반복... ] String where = KEY_ID + "=" + rowid; // Update the row with the specified index with the new values. mydatabase.update(database_table, newvalues, where, null); v 행삭제하기 ü 예제 ) 1. contentvalues 객체를통해업데이드할행하나를생성 2. 각열에값을할당 3. 업데이트할행인덱스값지정 4. 지정된인덱스의행을새로운값으로업데이트 mydatabase.delete(database_table, KEY_ID + "=" + rowid, null); 1. 테이블이름과지우고자하는행을리턴하는 where 절을지정하여삭제 15

SQLite 데이터베이스 v 트랜잭션지원 db.begintransaction(); Cursor cur = null; try { cur = db.query("tbl_countries", null, null, null, null, null, null); cur.movetoposition(0); ContentValues values = new ContentValues(); values.put("state_name", "Georgia"); values.put("country_id", cur.getstring(0)); long stateid = db.insert("tbl_states", null, values); db.settransactionsuccessful(); view.append("n" + Long.toString(stateId)); catch (Exception e) { Log.e("Error in transaction", e.tostring()); finally { db.endtransaction(); cur.close(); 16

SQLite 데이터베이스 v 예 : DB insert 와 query public class DBTest extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); SQLiteDatabase db = null; try { db = openorcreatedatabase("sample.db",sqlitedatabase.create_if_necessary, null); db.execsql("create TABLE IF NOT EXISTS fruit + " (id integer primary key autoincrement, name varchar(30));"); db.execsql("insert into fruit(name) values('grape');"); db.execsql("insert into fruit(name) values('apple');"); catch (Exception e) { // TODO: handle exception Log.e("ERROR","ERROR IN CODE:"+e.toString()); TextView tv = (TextView) findviewbyid(r.id.textview01); Cursor c = db.query("fruit", new String[] {"name", null, null, null, null, null); int rowcount = c.getcount(); c.movetofirst(); String str = ""; for (int i = 0; i < rowcount; i++) { str += c.getstring(0)+"\n"; c.movetonext(); tv.settext(str); if (db!= null) { db.close(); 17

DB Adapter 형태로만들어보기 v 전화번호부 DB Adapter 만들어보기 ü 메소드설계 Class PhoneDBAdapter open() close() public long createbook(string name, String phone) public boolean deletebook(long rowid) public Cursor fetchallbooks() public Cursor fetchbook(long rowid) public boolean updatebook(long rowid, String name, String phone) 18

DB Adapter 형태로만들어보기 v 전화번호부 DBAdapter 구현 public class DbAdapter { public static final String KEY_NAME = "name"; public static final String KEY_PHONE = "phone"; public static final String KEY_ROWID = "_id"; public static final int FIND_BY_NAME = 0; public static final int FIND_BY_PHONE = 1; private static final String TAG = "DbAdapter"; private DatabaseHelper mdbhelper; private SQLiteDatabase mdb; // 데이터베이스를저장 private static final String DATABASE_CREATE = "create table data (_id integer primary key autoincrement,"+ "name text not null, phone text not null);"; private static final String DATABASE_NAME = "datum.db"; private static final String DATABASE_TABLE = "data"; private static final int DATABASE_VERSION = 1; private final Context mctx; private class DatabaseHelper extends SQLiteOpenHelper{ public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub public void oncreate(sqlitedatabase db){ db.execsql(database_create); public void onupgrade(sqlitedatabase db, int oldversion, int newversion){ Log.w(TAG, "Upgrading db from version" + oldversion + " to" + newversion + ", which will destroy all old data"); db.execsql("drop TABLE IF EXISTS data"); oncreate(db); public DbAdapter(Context ctx){ this.mctx = ctx; public DbAdapter open() throws SQLException{ mdbhelper = new DatabaseHelper(mCtx); mdb = mdbhelper.getwritabledatabase(); return this; public void close(){ mdbhelper.close(); public long createbook(string name, String phone){ ContentValues initialvalues = new ContentValues(); initialvalues.put(key_name, name); initialvalues.put(key_phone, phone); return mdb.insert(database_table, null, initialvalues); public boolean deletebook(long rowid){ return mdb.delete(database_table, KEY_ROWID + "=" + rowid, null) > 0; public Cursor fetchbook(long rowid) throws SQLException{ Cursor mcursor = mdb.query(true, DATABASE_TABLE, new String[]{KEY_ROWID, KEY_NAME, KEY_PHONE, KEY_ROWID + "=" + rowid, null, null, null, null, null); if(mcursor!= null) mcursor.movetofirst(); return mcursor; public boolean updatebook(long rowid, String name, String phone){ ContentValues args = new ContentValues(); args.put(key_name, name); args.put(key_phone, phone); return mdb.update(database_table, args, KEY_ROWID + "=" + rowid, null) > 0; 19

SQLite 데이터베이스 v 예 : Android 폰의 Bookmark 보기 import android.app.activity; import android.os.bundle; import android.provider.browser; import android.widget.textview; import android.database.cursor; public class TestingData extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); TextView view = (TextView) findviewbyid(r.id.hello); String[] projection = new String[] { Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL ; Cursor mcur = managedquery(android.provider.browser.bookmarks_uri, projection, null, null, null ); mcur.movetofirst(); int titleidx = mcur.getcolumnindex(browser.bookmarkcolumns.title); int urlidx = mcur.getcolumnindex(browser.bookmarkcolumns.url); while (mcur.isafterlast() == false) { view.append("n" + mcur.getstring(titleidx)); view.append("n" + mcur.getstring(urlidx)); mcur.movetonext(); 20

SQLite 데이터베이스 v 예 : Mediaplayer 파일정보보기 import android.app.activity; import android.os.bundle; import android.provider.mediastore; import android.provider.mediastore.audio.media; import android.widget.textview; import android.database.cursor; public class TestingData extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); TextView view = (TextView) findviewbyid(r.id.hello); String[] projection = new String[] { MediaStore.MediaColumns.DISPLAY_NAME, MediaStore.MediaColumns.DATE_ADDED, MediaStore.MediaColumns.MIME_TYPE ; Cursor mcur = managedquery(media.external_content_uri, projection, null, null, null ); mcur.movetofirst(); while (mcur.isafterlast() == false) { for (int i=0; i<mcur.getcolumncount(); i++) { view.append("n" + mcur.getstring(i)); mcur.movetonext(); 21

SQLite 데이터베이스라이브러리 v SQLiteOpenHelper 확장하기 상속및데이터베이스생성 ü SQLiteOpenHelper 객체를사용하는게가장쉬운일반적인생성방법 SQLiteOpenHelper 클래스를사용할인스턴스생성 읽기 / 쓰기여부에따라 getreadabledatabase()/getwriteabledatabase() 메소드를호출 예제 private static class mydbhelper extends SQLIteOpenHelper { public mydbhelper(context context, String name, CursorFactory factory, imt version) { super(context, name, factory, version); /* 생성및업그레이드에대한내용 */.. dbhelper = new mydbhelper(context, DATABASE_NAME, null, DATABASEVERSION); SQLiterDatabase d; try { db = dbhelper.getwriteabledatabase(); Catch(SQLiteException ex){ db = dbhelper.getreadabledatabase(); 데이터베이스의쓰기가능한인스턴스얻기 데이터베이스의읽기가능한인스턴스얻기 22

과제 ü 게시물첨부 2 파일 (TodoList) 3 5 1 4 1. 메뉴키를누르다. 2. 화면하단메뉴에 Add New Item 을선택 3. 텍스트를입력하고 4. 선택버큰을누르면리스트에추가 5. 리스트를오래누르거나방향키를움직이면리스트를선택가능 6. 선택후현재삭제기능만존재 7. 여기에수정기능추가 2 23