1 / 68

WIPI 플랫폼에서의 그래픽 / 데이터 베이스 기능

WIPI 플랫폼에서의 그래픽 / 데이터 베이스 기능. 2004. 9. 그래픽 (Graphics) 패키지 : org.kwis.msp.lcd. 그래픽 패키지의 클래스 상속도. Object. JletEventListener. InputMethodListner. ImageObserver. Jlet. Card. Display. Font. Graphics. Image. EventQueue. InputMethodListener. 그래픽 (Graphics) 패키지. Graphics 클래스

zody
Download Presentation

WIPI 플랫폼에서의 그래픽 / 데이터 베이스 기능

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. WIPI 플랫폼에서의 그래픽/데이터 베이스 기능 2004. 9.

  2. 그래픽(Graphics) 패키지: org.kwis.msp.lcd • 그래픽 패키지의 클래스 상속도 Object JletEventListener InputMethodListner ImageObserver Jlet Card Display Font Graphics Image EventQueue InputMethodListener

  3. 그래픽(Graphics) 패키지 • Graphics 클래스 • 2차원 기하학적 도형을 그리는 기능 제공 • 원점 (0,0): 좌측 상단 • Translate 함수에 의해 변경 가능 Graphics 클래스에서 좌표체계

  4. 그래픽(Graphics) 패키지 예제1 import org.kwis.msp.lcdui.*; import org.kwis.msp.lwc.*; public class Example1 extends Jlet { // 프로그램이 시작될 때 불려진다. protected void startApp(String args[ ]){ Display dis=Display.getDefaultDisplay( ); dis.pushCard(new SampleCard( )); } protected void pauseApp( ){ } protected void resumeApp( ){ } protected void destroyApp(boolean b){ } } Java의 파일이름과 Jlet 클래스의 이름이 같아야한다. Ex) Example1.java  Jlet 클래스 Example1

  5. 그래픽(Graphics) 패키지 예제1 class SampleCard extends Card{ public void paint(Graphics g){ int width = getWidth( ); int height = getHeight( ); g.setColor(0xff0000); g.fillRect(0,0,width/2,height/2); g.setColor(0x00ff00); g.fillRoundRect(width/2, 0, width/2, height/2, width/4, height/4); g.setColor(0x0000ff); g.fillArc(0, height/2, width/2, height/2, 0, 270); } }

  6. 그래픽(Graphics) 패키지 예제1 • Card : 그림을 그리기위한 도화지 • Graphics 클래스: 그림을 그리기 위한 도구 • 화면의 크기 • 넓이 : getWidth(), 높이: getHeight fillRect(x, y, width, height) fillRoundRect(x, y, width, height, arcwidth, archeight) fillArc(x, y, width, height, startAngle, arcAngle)

  7. 선(Stroke) 그리기 class SampleCard extends Card { public void paint(Graphics g) { int width = getWidth(); int height = getHeight(); // Default  SOLID g.setStrokeStyle(Graphics.SOLID); g.setColor(0xff0000); g.drawRect(1,1,width/2,height/2); g.setStrokeStyle(Graphics.DOTTED); g.setColor(0x0000ff); g.drawRect((width/2)+1,(height/2)+1, (width/2)-3,(height/2)-3); } }

  8. XOR 테스트를 이용한 그림 그리기 class SampleCard extends Card { boolean keyInput = false; public void paint(Graphics g) { if(keyInput==true) { g.setColor(0xffffff); g.setXORMode(true); g.fillRect(30,30,getWidth()/2,getHeight()/2); keyInput = false; } } protected boolean keyNotify(int type, int key) { switch(Display.getGameAction(key)) { case 2 : // LEFT KEY if (type == 1 ) // KEY PRESSED { keyInput = true; repaint(); } } return true; } };

  9. 투명도(Alpha)를 이용한 그림 그리기 class SampleCard extends Card { public void paint(Graphics g) { g.setColor(0xff0000); g.fillRect(30,30,getWidth()/2,getHeight()/2); g.setColor(0x00ff00); g.setAlpha(100); g.fillRect(60,60,getWidth()/2,getHeight()/2); g.setAlpha(250); g.fillRect(0,0,getWidth()/2,getHeight()/2); } }; Alpha 0  Transparency Alpha 255  Opaque

  10. 클리핑 (Clipping) • 클리핑 • 불필요한 부분을 잘라냄 • public void clipRect(int x, int y, int width, int height) • 두개의 사각형의 교집합을 클리핑 영역으로 사용 • public void setClip(int x, int y, int width, int height) • 기존 클리핑 영역 무시 clipRect setClip

  11. 클리핑 (Clipping) class SampleCard extends Card { int proc = 0; public void paint(Graphics g) { int width = getWidth(); int height = getHeight(); g.setColor(0xffffff); g.fillRect(0,0,width,height); Image img = null; try { img = Image.createImage("test.gif"); } catch (Exception e) {}

  12. 클리핑 (Clipping) switch(proc) { case 0 : g.drawImage(img,0,0,Graphics.TOP); break; case 1 : g.setClip(0,0,width/2+30,height/2+30); g.drawImage(img,0,0,Graphics.TOP); break; case 2 : g.setClip(0,0,width/2+30,height/2+30); g.clipRect(width/2,height/2,width/2,height); g.drawImage(img,0,0,Graphics.TOP); break; case 3 : g.setClip(0,0,width/2-5,height/2-5); g.drawImage(img,0,0,Graphics.TOP); g.setClip(width/2+5,0,width/2-5,height/2-5); g.drawImage(img,0,0,Graphics.TOP); g.setClip(0,height/2+5,width/2-5,height/2-5); g.drawImage(img,0,0,Graphics.TOP); g.setClip(width/2+5,height/2+5,width/2-5,height/2-5); g.drawImage(img,0,0,Graphics.TOP); break; } img = null; }

  13. 클리핑 (Clipping) protected boolean keyNotify(int type, int key) { if (type==EventQueue.KEY_PRESSED) { switch(Display.getGameAction(key)) { case EventQueue.RIGHT: proc=0; break; case EventQueue.LEFT: proc=1; break; case EventQueue.UP: proc=2; break; case EventQueue.DOWN : proc=3; } } repaint(); return true; } };

  14. 이미지 클래스와 imageObserver 인터페이스 • Image 클래스 • 이미지를 출력할 수 있는 클래스 • png나 gif 등의 이미지 파일 포맷으로 부터 생성 static Image createImage(byte[] imagedata, int imageoffset, int image length) static Image createImage(Image image) static Image createImage(int width, int height) static Image createImage(String name) static Image loadImage(String name, ImageObserver io)

  15. 이미지 클래스와 imageObserver 인터페이스 • Image 클래스 • 변경이 불가능한 이미지 • 이미지 파일로부터 생성한 이미지 • 변경 가능한 이미지 • 복사된 이미지 Image img = Image.createImage(“image.gif”); Graphics g = img.getGraphics(); 변경 불가능 Exception 발생 Image img = Image.createImage(“image.gif”); Image copy = Image.createImage(img); Graphics g = copy.getGraphics(); g.drawLine(……); 변경 가능

  16. 이미지 클래스와 imageObserver 인터페이스 • Image 클래스 • 애니메이션 이미지 • 복사할 수 없음 (변경이 불가능) • play(imageObserver io)  animated gif 수행 • stop()  실행 중지 • stopImage(ImageObserver io)  로딩 중지 • 애니메이션 이미지와 이미지 변환가능성 확인 여부 • Boolean isAnimate()  애니메이션 이미지인가? • Boolean isMutable()  변경이 가능한가?

  17. 이미지 클래스와 imageObserver 인터페이스 • 이미지 옵저버 (ImageObserver) • 이미지의 생성상태를 볼 수 있게 해주는 인터페이스 • 각 프레임마다 이미지 생성 여부를 알려줌 • void notify(Image img, int status) • 정상적으로 수행되는 경우: play 수행시 ImageObserver가 notify를 주기적으로 호출 • notify 함수안에서 이미지를 다시 그리기 위해 repaint를 호출하여 새로운 프레임을 그리게 함 • status • DECODE_ERROR : 디코딩 결과 오류 • FRAME_END : 한프레임이 다 끝난 경우 • IMAGE_END : 이미지 전체 디코딩 완료 • NOT_EXIST: 디코딩 결과 오류 • OUT_OF_MEMORY: 디코딩 결과 오류

  18. ImageTest 예제 class SampleCard extends Cardimplements ImageObserver { Image img = null; Image copy = null; int notifyCounter = 0; public SampleCard() { try { img = Image.createImage("ani.gif"); copy = Image.createImage(Image.createImage("copy.gif")); } catch (Exception e) { } }

  19. ImageTest 예제 public void paint(Graphics g) { g.drawImage(img,0,0,Graphics.LEFT); img.play(this); g.setClip(0,img.getHeight(),getWidth(), getHeight()-img.getHeight()); Graphics imgGraphics = copy.getGraphics(); imgGraphics.setColor(0xffffff); imgGraphics.fillRect(0,getHeight()-15,copy.getWidth(),15); imgGraphics.setColor(0x000000); imgGraphics.drawString("Notify counter : "+notifyCounter, 1,getHeight()-3,Graphics.BOTTOM); g.drawImage(copy,0,0,Graphics.LEFT); } public void notify(Image img, int status) { notifyCounter++; repaint(); } };

  20. 문자열 출력과 앵커의 활용 • 문자열 출력 함수 • drawChar(char character, int x, int y, int anchor) • drawChars(char[] data, int offset, int length, int x, int y, int anchor) • drawString(String str, int x, int y, int anchor) • drawSubstring(String str, int offset, int len, int x, int y, int anchor) • 앵커(Anchor) • 이미지나 폰트 등을 출력할 때 위치를 결정하는 함수

  21. 문자열 출력과 앵커의 활용 • 앵커 • 수직과 수평을 OR를 이용하여 동시에 사용가능 Ex) TOP | LEFT • LEFT, HCENTER, RIGHT 위치 • TOP, BASELINE, BOTTOM 위치

  22. 예제) 수평 스타일로 문자열 출력 class SampleCard extends Card { public void paint(Graphics g) { int width = getWidth(); int height = getHeight(); g.setColor(0xff00000); g.drawLine(width/2,0,width/2,height); g.setColor(0x000000); g.drawString("LEFT",width/2,25,Graphics.LEFT); g.drawString("RIGHT",width/2,55,Graphics.RIGHT); g.drawString("HCENTER",width/2,85,Graphics.HCENTER); } };

  23. 예제) 수직 스타일로 문자열 출력 class SampleCard extends Card { public void paint(Graphics g) { int width = getWidth(); int height = getHeight(); g.drawLine(0,height/2,width,height/2); g.drawString("TOP",10,height/2,Graphics.TOP); g.drawString("BASELINE",30,height/2, Graphics.BASELINE); g.drawString("BOTTOM",80,height/2, Graphics.BOTTOM); } };

  24. 폰트 활용 • 폰트 함수 • static Font getDefaultFont() • static Font getFont(int face, int style, int size) • face 인수 값 • FACE_MONOSPACE • FACE_PROPORTIONAL • FACE_SYSTEM • style 인수 값 (OR 를 이용하여 조합할 수 있다) • STYLE_BOLD • STYLE_ITALIC • STYLE_PLAIN • STYLE_UNDERLINED • size 인수 값 • SIZE_SMALL • SIZE_MEDIUM • SIZE_LARGE IllegalArgumentException  인수값이외의 값들이 입력될 경우 발생

  25. 예제) 폰트 활용 class SampleCard extends Card { private int [] Styles = { Font.STYLE_PLAIN, Font.STYLE_UNDERLINED, Font.STYLE_BOLD, Font.STYLE_BOLD | Font.STYLE_UNDERLINED, Font.STYLE_ITALIC, Font.STYLE_ITALIC | Font.STYLE_UNDERLINED, Font.STYLE_BOLD | Font.STYLE_ITALIC, Font.STYLE_BOLD | Font.STYLE_ITALIC | Font.STYLE_UNDERLINED }; private int [] size = { Font.SIZE_SMALL, Font.SIZE_LARGE, Font.SIZE_MEDIUM };

  26. 예제) 폰트 활용 public void paint(Graphics g) { int x = 0; int y = 0; for (int j=0; j<2; j++) { for (int i=0;i<Styles.length;i++) { g.setFont(Font.getFont(Font.FACE_SYSTEM, Styles[i],size[j])); g.drawString("가나ABC",x,y,Graphics.TOP); if (x==0) x=60; else { x = 0; y+=15; }; } y += 20; } } };

  27. 이벤트(Event) 활용 • Event 함수 • 모든 이벤트는 스택 상위의 카드로 전달 • protected boolean keyNotify(int type, int key) • 키패드 입력을 받아들이는 함수 • protected boolean pointerNotify(int type, int x, int y) • 터치패드 입력을 받아들이는 함수 • protected void showNotify(boolean bShow) • popcard, pushCard 등으로 카드를 보여지거나 감춰지거나 할때 발생하는 이벤트 함수

  28. 이벤트(Event) 활용 • protected boolean keyNotify(int type, int key) • type 인수 • KEY_PRESSED, KEY_RELEASED, KEY_TYPED, KEY_REPEATED • key 인수 • 시스템마다 다르게 설정 • key 값을 얻어 수행여부나 해당 key에 대칭되는 방향기능 이벤트 지원 • Static int getGameAction(int key) • Static int getKeyCode (int gamekey) • 지원 키 • EventQueue.UP, EventQueue.DOWN • EventQueue.LEFT, EventQueue.RIGHT 등등

  29. 예제) keyNotify class SampleCard extends Card { boolean keyInput = false; String keyCode = ""; int keyValue = 0 ; public void paint(Graphics g) { g.setColor(0xffffff); g.fillRect(0,0,getWidth(),getHeight()); g.setColor(0x000000); g.drawString("아무키나 눌러주세요" ,5,10,Graphics.TOP); g.drawString("입력된 키값은 : “ + keyValue, 5, 50, Graphics.TOP); g.drawString( keyCode + " 입니다 ",5,70,Graphics.TOP); }

  30. 예제) keyNotify protected boolean keyNotify(int type, int key) { keyValue = key; switch(Display.getGameAction(key)) { case EventQueue.CLEAR : keyCode = "CLEAR"; break; case EventQueue.DOWN : keyCode = "DOWN"; break; case EventQueue.UP : keyCode = "UP"; break; case EventQueue.LEFT : keyCode = "LEFT"; break; case EventQueue.RIGHT : keyCode = "RIGHT"; break; case EventQueue.FIRE : keyCode = "FIRE"; break; case EventQueue.SOFT1 : keyCode = "SOFT1"; break; case EventQueue.SOFT2 : keyCode = "SOFT2"; break; case EventQueue.SOFT3 : keyCode = "SOFT3"; break; case EventQueue.SIDE_SEL : keyCode = "SIDE_SEL"; break; case EventQueue.SIDE_UP : keyCode = "SIDE_UP"; break; case EventQueue.SIDE_DOWN : keyCode = "SIDE_DOWN"; break; default : char ch = (char)key; keyCode = (new Character(ch)).toString(); } if (type == EventQueue.KEY_PRESSED) { repaint(); } return true; } }; 제어키 처리 일반키 처리

  31. 데이터베이스(Database 패키지): org.kwis.msp.db • 데이터베이스 패키지 • 핸드폰에 내장되어 있는 플래시 메모리에 데이터베이스 구성 • 데이터 베이스 생성, 필요한 데이터 삽입, 삭제, 수정 Object Interface DataComparator DataFilter DataBaseRecordException Exception DataBaseException DataBase DataComparatorInteger DataComparoatorString DataFilterInteger

  32. 데이터 베이스 • 데이터베이스 • 다양한 데이터들의 집합체 • 체계화된 데이터 • 데이터베이스 관리시스템(DBMS) • 데이터베이스를 생성, 관리 • 사용자가 원하는 정보 추출 • 데이터베이스 관리언어(Database Management Language) • DBMS가 데이터베이스르 관리할 때 쓰이는 명령 체계 • SQL(Structured Query Language) • 데이터베이스에서 정보를 얻거나 갱신하기 위한 표준화된 언어 • Ex) Select, Insert, Update, Delete

  33. 데이터베이스 클래스 • 데이터베이스 클래스 • 플래시메모리에 데이터베이스를 생성하고, 생성된 데이터베이스를 관리하는 DBMS의 역할 • 특징 • 여러 개의 레코드로 구성 • 각 레코드는 오직 한 개의 필드만을 가질 수 있음 • 일반 DBMS에 제공하는 DBL은 제공하지 않음 • 데이터베이스 정렬을 위해 DataFIlter와 DataComparator 인터페이스 제공 • DataFilter 레코드를 골라내는 역할 • DataComparator  레코드 두개를 비교하는 역할 • 풀랫폼이 다운되더라도 이미 저장된 레코드라면 무결성 보장 • 레코드는 바이트 Array단위로 저장 • 데이터의 의미는 무시, 논리적의미를 파악하는것은 사용자 몫

  34. 데이터베이스 클래스 • 레코드의 크기는 처음 해당 데이터베이스를 생성할 때 지정한 크기를 초과할 수 없음 • 레코드는 데이터베이스 상에서 레코드 ID라는 정수값으로 표현 • 레코드 ID : 0부터 시작 • 레코드 하나를 저장할때마다 1증가 • 중간에 레코드가 삭제되면 다음 레코드를 저장할 때 삭제된 레코드 ID를 재사용 • 데이터베이스 생성 모드 • PRIVATE • 이 DB를 생성한 Jlet은 접근 가능, 다른 Jlet은 이 DB 접근 불가능 • SHARED • 공유디렉토리에 저장, 여러 Jlet이 공유 • SYSTEM • 시스템 어플리케이션이 사용하는 디렉토리에 저장 • Jlet이 플랫폼상에서 지워지면 DB도 삭제됨

  35. 데이터베이스 생성/삭제/닫기 • 데이터베이스 생성 • 보통 클래스 • New 연산자를 이용하여 객체생성 • DataBase 클래스 • openDataBase() 메소드를 이용하여 생성 • 두가지 형태로 오버로딩 • public static DataBase openDataBase(String dbName, int recordSize, boolean craete) throws DataBaseException, IllegalArgumentException • public static DataBase openDataBase(String dbName, int recordSize, boolean craete, int flag) throws DataBaseException, IllegalArgumentException 오버로딩(Overloading) 메소드 이름이 같더라도 인수의 자료형과 개수가 다르면 서로 다른 메소드로 인식

  36. 데이터베이스 생성/삭제/닫기 • public static DataBase openDataBase(String dbName, int recordSize, boolean craete) throws DataBaseException, IllegalArgumentException • dbNmae • 생성될 DB 이름 • recordSize • DB의 레코드 크기를 byte 단위로 입력 • DB가 이미 존재하는 경우 기존 레코드 크기를 적용 • create • False: 기존 DB를 오픈 • True: 새로운 DB 생성 • public static DataBase openDataBase(String dbName, int recordSize, boolean craete, int flag) throws DataBaseException, IllegalArgumentException • flag • 데이터 공유방법 지정 • FileSytem.PRIVATE_ACESS, FileSytem.SHARED_ACESS, FileSytem.SYSTEM_ACESS FileSystem.PRIVATE_ACCESS인 DB 생성

  37. 데이터베이스 생성/삭제/닫기 • 예외(Exception) 사항 • DataBaseException • DB를 열수 없을 경우 발생 • DB가 깨진 경우 발생 • create 인수가 false인 경우  DB가 없는 경우 발생 • IllegalArgumentException • create 인수가 true인 경우 • recordSize 인수가 0이거나 음수인 경우에 발생 • DB 생성시 생성되는 파일 • .db • DB파일(DB데이터가 담겨있음) • .idx • Index파일(DB관리정보가 들어 있음) PRIVATE 모드 pri 폴더, SHARED 모드  sh폴더, SYSTEM 모드  sys폴더

  38. 데이터베이스 생성/삭제/닫기 • 데이터베이스 삭제하기 • 두가지 오버로딩 사용 • public static void deleteDataBase(String dbName) throws DataBaseException • DB 접근모드가 FileSystem.PRIVATE_ACCESS인 DB 삭제 • public static void deleteDataBase(String dbName, int flag) throws DataBaseException • 지정모드의 DB만을 삭제 • DataBaseException 오류 • 삭제할 DB가 없거나 지우지 못할 경우에 발생

  39. 데이터베이스 생성/삭제/닫기 • 데이터베이스 닫기 • Public void closeDataBase() throws DataBaseException • DB를 닫을 때 사용 • DataBaseException 오류 • idx 파일에 DB 관리정보 저장 • 관리정보를 저장할 수 없을 때 발생 • db 파일을 닫을 수 없을 때 발생

  40. 레코드 삽입/선택 • 레코드 삽입하기 • 하나의 레코드로 데이터베이스에 저장 • 저장할 바이트 길이가 지정한 레코드 크기보다 작으면 남은 영역에 쓰레기(Garbage) 값이 저장 • 바이트 Array의 실제 데이터와 쓰레기 값의 구별은 사용자 몫 • DataBase Name.insertRecord() 메소드 사용

  41. 레코드 삽입/선택 • public int insertRecord(byte[] data) throws DataRecordException, DataBaseException • 저장된 레코드 ID를 리턴 • data 인수: 저장할 데이터가 들어 있는 버퍼 • public int insertRecord(byte[] data, int offset, int numBytes) throws DataRecordException, DataBaseException, IllegalArgumentException • offset 인수: 버퍼에서 저장할 데이터가 시작되는 첫번째 바이트 • numBytes 인수: 저장할 바이트 수 예) 크기가 10인 바이트 버퍼에 3~5번째까지를 레코드에 삽입 offset 2 , numBytes  3

  42. 레코드 삽입/선택 • 예외(Exception) 사항 • DataBaseRecordException • 지정한 레코드 크기보다 삽입할 데이터가 큰경우 발생 • DataBaseException • 레코드를 저장할 수 없는 경우 발생 • IllegalArgumentException • 바이트 버퍼의 길이 – offset < numBytes 인 경우 발생 • Ex) offset  7, numBytes  5 인경우 10 - 7 < 5

  43. 레코드 삽입/선택 • 레코드 선택하기 • selectRecord() 메소드 사용 • public byte[] selectRecord(int recordId) throws DataBaseException, DataBaseRecordException • 레코드 ID에 저장된 데이터를 바이트 array로 리턴 • public void selectRecord(int recordId, byte[] buffer, int offset) throws DataBaseException, DataBaseRecordException, IllegalArgumentException • 읽어들인 데이터를 복사해서 인수로 준 Buffer에 복사해주는 방식 • 버퍼의 내용을 바꾸더라도 DB에 저장된 레코드는 변하지 않음 • Buffer • 읽어들인 데이터를 복사하여 저장할 버퍼 • offset • 인수로 준 버퍼에서 복사를 시작할 첫 번째 바이트 오프셋

  44. 레코드 삽입/선택 • 예외(Exception) 사항 • DataBaseException • 레코드를 읽을 수 없을 경우 발생 • DataBaseRecordException • 레코드 ID가 존재하지 않을 경우 발생 • IllegalArgumentException • 버퍼가 레코드 크기보다 작은 경우 발생

  45. 예제) OpenDataBase import org.kwis.msp.lcdui.Jlet; import org.kwis.msp.lcdui.Display; import org.kwis.msp.db.DataBase; import org.kwis.msp.io.FileSystem; public class OpenDataBase extends Jlet { public OpenDataBase(){ } protected void startApp(String[] arg0){ DataBase dataBASE1 = null; try { dataBASE1 = DataBase.openDataBase("dataBASE1", 5, true); int recordNumber; String stringSource="ABCDEFGHIJKLMN"; int iteration = stringSource.length()-4; for(int i=0;i<iteration;i++) { byte data[] = (stringSource.substring(i,i+5)).getBytes(); dataBASE1.insertRecord(data, 0, 5); } databaseState(dataBASE1); dataBASE1.closeDataBase(); } catch(Exception e) { } } protected void destroyApp(boolean arg0) { } record size 새로운 DB 생성 numByte offset

  46. 예제) OpenDataBase public void databaseState(DataBase db) { try { System.out.println("======================================"); System.out.println(""); System.out.println("DataBase Name = “ + db.getDataBaseName() ); int mode; mode=DataBase.getAccessMode(db.getDataBaseName()); if (mode==FileSystem.PRIVATE_ACCESS) { System.out.println("Access Mode = PRIVATE_ACCESS Mode"); } else if (mode==FileSystem.SHARED_ACCESS) { System.out.println("Access Mode = SHARED_ACCESS Mode"); } else if (mode==FileSystem.SYSTEM_ACCESS) { System.out.println("Access Mode = SYSTEM_ACCESS Mode"); }

  47. 예제) OpenDataBase System.out.println("DataBase Size = "+db.getDataBaseSize() +" Bytes"); System.out.println("Record Number = "+db.getNumberOfRecords() ); System.out.println("Record Size = "+db.getRecordSize()+" Bytes"); System.out.println("Last Modified Time = "+db.getLastModified()); System.out.println("Available Size = " + db.getSizeAvailable()+" Bytes"); System.out.println(""); System.out.println("Records of "+db.getDataBaseName()); for(int index=0;index<db.getNumberOfRecords();index++) { System.out.println("Record "+ index+" : "+new String(db.selectRecord(index))); } System.out.println(""); System.out.println("================================================"); } catch(Exception e){ } } }

  48. 예제) OpenDataBase IDX 파일 데이터베이스 파일

  49. 레코드 삭제/수정 • 레코드 삭제하기 • DataBaseName.deleteRecord () 메소드 이용 • public void deleteRecord(int recordId) throws DataBaseException, DataBaseRecordException • 레코드 ID를 인수로 받아 해당 레코드를 지움 • DataBaseException • 레코드를 지울 수 없는 경우 • DataBaseRecordException • 인수로 넘긴 레코드 ID가 없는 경우

  50. 레코드 삭제/수정 • 레코드 수정하기 • Databasename.updateRecord() 메소드 사용 • public void updateRecord(int recordId, byte[] newData) throws DataBaseException, DataBaseRecordException • recordID 데이터 내용을 변경할 레코드 ID • newData  새로이 저장할 데이터가 들어 있는 버퍼 • public void updateRecord(int recordId, byte[] newData, int offset, int numBytes) throws DataBaseException, DataBaseRecordException, IllegalArgumentException • Offset • 쓰기 시작할 데이터의 위치 • numBytes • 쓸 데이터의 길이

More Related