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

Similar documents
슬라이드 1

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

슬라이드 1

쉽게 풀어쓴 C 프로그래밊

Spring Boot/JDBC JdbcTemplate/CRUD 예제

어댑터뷰

슬라이드 1

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

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

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

DBMS & SQL Server Installation Database Laboratory

Microsoft PowerPoint Python-DB

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

( )부록

슬라이드 1

슬라이드 1

강의 개요

학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다.

윈도우시스템프로그래밍

학습목표 선언하여디자인을하는방법을이해하고, 실행할수있다. 시작화면을만드는방법과대체리소스를사용하는방법을이해하고실행할수있다. About 과같은상자를구현하고, 테마를적용하는법을이해하고실행할수있다.

MySQL-.. 1

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

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

13ÀåÃß°¡ºÐ

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

PowerPoint 프레젠테이션

rmi_박준용_final.PDF

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint Presentation

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

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

01장

Microsoft PowerPoint - CSharp-10-예외처리

PowerPoint Presentation

PowerPoint Presentation

슬라이드 1

JAVA PROGRAMMING 실습 09. 예외처리

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

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

FileMaker ODBC and JDBC Guide

PowerPoint 프레젠테이션

FileMaker ODBC and JDBC Guide

슬라이드 1

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

JAVA PROGRAMMING 실습 08.다형성

10.ppt

Microsoft PowerPoint - Java7.pptx

JVM 메모리구조

제11장 프로세스와 쓰레드

03장

PowerPoint Presentation

PowerPoint Presentation

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

PowerPoint 프레젠테이션

TITLE

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

문서 템플릿

PowerPoint Presentation

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

윈도우시스템프로그래밍

PowerPoint 프레젠테이션

PowerPoint Presentation

유니티 변수-함수.key

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

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

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

ThisJava ..

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

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

FileMaker 15 ODBC 및 JDBC 설명서

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

PowerPoint 프레젠테이션

gnu-lee-oop-kor-lec06-3-chap7

슬라이드 1

Spring Boot

PowerPoint Presentation

C# Programming Guide - Types

안드로이드2_14

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밍

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

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

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

슬라이드 1

Microsoft PowerPoint - 10Àå.ppt

Microsoft PowerPoint - 2강

Design Issues

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

PowerPoint Presentation

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

JMF3_심빈구.PDF

PowerPoint Template

쉽게 풀어쓴 C 프로그래밍

FileMaker ODBC 및 JDBC 가이드

Lec. 2: MySQL and RMySQL

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

09-interface.key

Transcription:

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

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

차례 SQLite 소개 SQL 기본 헬로, 데이터베이스 요약 퀴즈 연습문제

SQLite 소개 리처드힙박사가 2000 년에개발한작지만강력한데이터베이스엔진 안드로이드, 아이폰, 심비안폰, 파이어폭스브라우저, 스카이프, PHP, 어도비 AIR, 맥 OSX, 솔라리스등에사용됨 인기있는이유 무료, 작은크기, 설치나관리가필요없음 SQLite 데이터베이스는하나의파일임 실은대부분의임베디드데이터베이스가그러함 /data/data/package_name/databases 에파일저장 adb 나이클립스의파일익스플로러 ( 창 > 뷰보기 > 기타 > 안드로이드 > 파일익스플로러 ) 에서파일을보고, 이동시키고, 삭제할수있음 프로그램에서이데이터베이스파일을액세스하려면자바입출력루틴을호출하는대신, SQL 구문을실행시키면됨 안드로이드는도우미클래스와메서드를통해 SQL 의복잡한부분을숨기긴하지만, 제대로사용하려면 SQL 을알아야함

감동적인 SQLite 라이선스 선을행하고악을멀리하라 자신을용서하고남을용서하라 서로나누며자신이베푼만큼만취하라

SQL 기본 SQL 구문에는다음과같은것들이있음 Data Definition Language (DDL) 수정 (Modification) 쿼리 (Query)

Data Definition Language (DDL) 데이터베이스에는여러개의테이블들이있음 테이블에는여러행들이있음 행들에는여러열들이있음 각열들은이름과데이터타입을가짐 DDL 로테이블과열의명칭들을정의함 다음구문은열이세개인테이블생성 CREATE TABLE mytable ( _id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, phone TEXT );

Data Definition Language (DDL) 한열은 PRIMARY KEY 로지정되는데, 대부분의데이터베이스실제응용에서는그행을식별하는고유숫자가사용됨 AUTOINCREMENT 는각레코드의키에 1 을더해고유의키값을가지게해줌 안드로이드에서 SQLite 이쓰일때, 관습적으로첫열은 _id 라고명명함 안드로이드의 ContentProvider 에서사용할때필요함 SQLite 의열타입은강제적인것이아닌힌트에불과함 즉타입체킹을안한다는뜻으로정수열에문자를저장하거나, 그반대도아무문제없음 ( 이건일부러그렇게한게아니라기능을구현하지않은것뿐으로보이나, 임베디드데이터베이스에서타입체킹의비용이비싼점을감안하면이해가되기도함 )

수정 (Modification) SQL 데이터베이스에레코드를삽입, 삭제, 업데이트하는구문들을의미함 몇개의전화번호를추가하는구문은다음과같음 INSERT INTO TABLE mytable VALUES (null, 강대기, 320-1724 ); INSERT INTO TABLE mytable VALUES (null, 강준서, 320-1725 ); INSERT INTO TABLE mytable VALUES (null, Ian Kang, 320-1726 ); CREATE TABLE 구문에서사용된순서대로값이입력됨 _id 는 SQLite 에서직접값을찾아넣을것이므로널 (NULL) 값을넣어둠

쿼리 (Query) 데이터가일단테이블에로드되고나면, SELECT 구문을사용해쿼리를테이블에실행시킴 예를들어세번째값을원한다면, 다음과같이함 SELECT * FROM mytable WHERE (_id=3); 데이터베이스가 content addressable 한특징이중요하므로, 위와같이특정위치보다는이름으로번호를검색하게됨 SELECT name, phone FROM mytable WHERE (name LIKE %Ian% ); SQL 은대소문자구분을하지않음

헬로, 데이터베이스 데이터베이스에레코드를저장한뒤이를나중에다시보여주는 Events 라는작은응용프로그램 프로젝트생성 Events, org.example.events, Events, Events 데이터베이스를설명하는상수 Constants 인터페이스 SQLiteOpenHelper 도우미클래스를확장한 EventData 클래스로데이터베이스의생성과버전관리 이벤트를저장하고그이벤트를 TextView 로보여주는메인프로그램정의

Constants 인터페이스 데이터베이스를설명하는상수몇개를저장할장소로 Constants 인터페이스사용 ( 자바에서상수를정의하는방법 ) 각이벤트는 events 테이블안의행으로저장되며, 각행은 _id, time, title 열이있음 _id 는 primary key 이며 BaseColumns 인터페이스에정의되어있음 time 과 title 은타임스탬프와이벤트제목으로각기사용됨 Java 5 부터는정적임포트가가능 정적임포트에대한이클립스에서의지원은미약할수도있음

/src/org/example/events/constants.j ava import android.net.uri; import android.provider.basecolumns; public interface Constants extends BaseColumns { public static final String TABLE_NAME = "events"; } // Columns in the Events database public static final String TIME = "time"; public static final String TITLE = "title";

SQLiteOpenHelper 사용하기 EventsData 라는 helper 클래스를만들어데이터베이스응용프로그램을구현 ( 데이터베이스생성과버전관리 ) SQLiteOpenHelper 클래스를확장 생성자와두개의메서드구현 DATABASE_NAME 우리가사용할데이터베이스이름 DATABASE_VERSION 우리가사용할데이터베이스버전 최초에는데이터베이스에접근을시도하면 SQLiteOpenHelper 는데이터베이스가없다는걸감지하고 oncreate() 를호출해데이터베이스를만듦 CREATE TABLE 구문실행 접근한데이터베이스가버전숫자에근거해오래된것이면, onupgrade() 메서드호출 여기서는간단히테이블을삭제해버리지만, ALTER TABLE 명령으로존재하는테이블에열을추가할수도있음

/src/org/example/events/eventsdata. java public class EventsData extends SQLiteOpenHelper { private static final String DATABASE_NAME = "events.db"; private static final int DATABASE_VERSION = 1; } /** Create a helper object for the Events database */ public EventsData(Context ctx) { super(ctx, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void oncreate(sqlitedatabase db) { db.execsql("create TABLE " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + TIME + " INTEGER," + TITLE + " TEXT NOT NULL);"); } @Override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { db.execsql("drop TABLE IF EXISTS " + TABLE_NAME); oncreate(db); }

메인프로그램정의하기 (Events.java) Events 프로그램은로컬 SQLite 데이터베이스를이용하여이벤트를저장하고그이벤트를 TextView 에문자열로보여줌 화면에너무많은이벤트가있는경우에대비해서 ScrollView 로감쌈

main.xml <ScrollView xmlns:android="http://schemas.android.com/a pk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </ScrollView>

Events.java 의 oncreate() setcontentview 로메인뷰설정 EventsData 로데이터베이스인스턴스설정 addevent() 로새이벤트추가 getevents() 로데이터베이스에서이벤트목록을 Cursor 로받음 showevents() 로이벤트들을화면에보여줌 데이터베이스에행을추가하고읽어들여보여주는부분은 try-catch-finally 블록으로묶음 finally 블록에서데이터베이스를 SQLiteDatabase.close() 로닫음

Events.java public class Events extends Activity { private static String[] FROM = { _ID, TIME, TITLE, }; private static String ORDER_BY = TIME + " DESC"; private EventsData events; @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); events = new EventsData(this); try { addevent("hello, Android!"); Cursor cursor = getevents(); showevents(cursor); } finally { events.close(); } } private void addevent(string string) { SQLiteDatabase db = events.getwritabledatabase(); ContentValues values = new ContentValues(); values.put(time, System.currentTimeMillis()); values.put(title, string); db.insertorthrow(table_name, null, values); } private Cursor getevents() { SQLiteDatabase db = events.getreadabledatabase(); Cursor cursor = db.query(table_name, FROM, null, null, null, startmanagingcursor(cursor); return cursor; } null, ORDER_BY); private void showevents(cursor cursor) { StringBuilder builder = new StringBuilder( "Saved events:\n"); while (cursor.movetonext()) { long id = cursor.getlong(0); long time = cursor.getlong(1); String title = cursor.getstring(2); builder.append(id).append(": "); builder.append(time).append(": "); builder.append(title).append("\n"); } TextView text = (TextView) findviewbyid(r.id.text); text.settext(builder); } }

행추가하기 (addevents()) addevents() 메서드를통해데이터베이스에새로운행을추가함 시간은현재시간 제목은주어진 string 변수 SQLiteOpenHelper 를확장한 EventsData 가멤버로가지고있는 SQLiteDatabase 객체를받아서, insertorthrow() 메서드로레코드를추가함 다만쓰기작업을해야하므로, getwritabledatabase() 메서드로객체를받아야함 레코드에해당하는 ContentValues 를구성하는방식은동일함

쿼리실행하기 (getevents()) 역시행추가하기와비슷한방법으로 SQLiteDatabase 객체를받음. 다만읽기작업을하므로, getreadabledatabase() 로받음 SQLiteDatabase.query() 를통해 SELECT 문수행. ORDER_BY 로레코드를새것부터옛날것순으로정렬해서반환함 Activity.startManagingCursor() 호출 액티비티의수명주기에맞춰커서의수명주기도같이관리해줌. 프로그래머가액티비티의수명주기에따라데이터소스에연결된커서를비활성화하거나쿼리를다시호출할필요가없게함 Cursor 는 Java Iterator, JDBC ResultSet, ASP.NET 의 DataSet 과비슷함

쿼리결과보여주기 (showevents()) Cursor 를받아서, 사용자가볼수있도록출력함 이벤트를큰문자열로만들어서모든이벤트를저장하고줄바꿈으로구분함 모든이벤트들을하나의문자열로만듦 바보같은방법 Cursor.moveToNext() 메서드는데이터베이스의다음행으로넘어가게함 Cursor 에대해 getlong() 과 getstring() 을통해해당열의데이터를뽑아냄 Cursor.getColumnIndexOrThrow() 로열인덱스숫자를찾아낼수있으나, 실행속도가느려짐

요약 SQLite 가뭔지알아보았고, 이를사용할줄알았다. SQL 의기본적인사용법들을알았다. SQLite 을이용해기본적인데이터베이스응용프로그램을작성할수있었다. 행을추가하는기본적인데이터베이스응용프로그램을작성할수있었다. 쿼리를실행하는기본적인데이터베이스응용프로그램을작성할수있었다. 쿼리결과를보여주는기본적인데이터베이스응용프로그램을작성할수있었다.

퀴즈 데이터베이스테이블에레코드를삽입하는메서드는무엇인가? 데이터베이스에대해쿼리를실행하는메서드들을열거해보라. query() 는어떤메서드이며, execsql() 은어떤메서드인가? ORDER BY 는어떤옵션인가? 커서란무엇인가? 데이터베이스에서컬럼인덱스숫자를찾아내는방법은무엇인가?

연습문제 학생이름, 국어, 영어, 수학에대한데이터베이스프로그램을작성하라. 총점, 평균, Grade 등을계산해서디스플레이하라. 자동차를운전하는사람을위한차계부프로그램을구상해보라. 차계부데이터베이스에저장해야할데이터는무엇이있는지열거해보라. 도서대여점의도서관리프로그램을작성하라. 도서를표현하고저장하기위해서는어떤데이터가있어야하고, 고객이도서를대여하기위해서는어떤데이터가필요한가? 점심이나저녁외식을위한음식점을추천하는서비스를생각해보자. 이러한추천서비스를위해, 음식점을데이터베이스에저장해야한다. 음식점을저장하기위해기본적으로어떤데이터가필요하고, 사용자에게효과적인서비스를제공하려면어떤데이터가더필요할까?