SQLite는 클라이언트 응용 프로그램에 임베디드되어 동작하는 오픈소스 데이터베이스의 일종이다. 

안드로이드iOSOS X에 기본적으로 포함되어 있다.


SQL에서 하는 기능이 SQLite에선 '경량화'의 이유로 제한되는 경우가 많다. 

예를 들자면, 프로토콜 조작을 통해 네트워크에 접근할 수는 있지만, 동시 접근은 제한된다. 

또한 복잡하거나 큰 데이터를 보관하는 데에는 적절하지 않다. 인고팅 역시 유니코드만 사용할  수 있다.(어짜피 혼자 사용)

// 모바일기기에서 내부적으로 데이터관리용도 정도로 사용하는게 적합 


데이터베이스 전체를 파일 하나에 저장하기 때문에, 파일을 통째로 복사하면 백업이 끝난다. 

// 아주 단순한파일관리, 이식편의성이 좋다.


JDBC에서 디비에 연결할때는 Connection객체를 획득해서 Statement객체에 sql구문을 실어서 보냄

쿼리할때는 구문객체 전달의 결과로 ResultSet을 회수함


안드로이드 SQLite에서는 SQliteDatabase객체를 통해서 sql문을 전달함

쿼리결과는 Cursor라는 타입의 객체를 통해서 결과값을 회수할 수 있음.


1. SQLiteDatabase 객체 얻기

1
2
3
4
public class MainActivity extends Activity {
    private SQLiteDatabase db;
    private static final String DBNAME = "person.db";
    private static final String TABLE_NAME = "person";
cs

SQlite에서는 디비 접속및생성이 하나 (없으면 만들어서 쓰고 있으면, 있는거를 사용한다)

SQLite에 접속하는 방법(SQLiteDatabase객체를 획득하는 방법)

1. Context객체의 openOrCreateDatabase메소드 사용

2. SQLiteDatabaseOpenHelper클래스를 이용하는 방법

1
2
3
4
5
public void onClick(View v) {
    db = openOrCreateDatabase(DBNAME, MODE_PRIVATE, null);
    //DB가 존재하면 오픈, 존재하지 않으면 생성 후 오픈
    //DB파일의 생성되는 경로는 /data/data/{AppPackage}/db/여기
}
cs


1
2
3
    private static final String DB_PATH = 
            Environment.getExternalStorageDirectory().getPath().toString();


db = openOrCreateDatabase(DB_PATH + "/" + DBNAME, MODE_PRIVATE, null);
cs
    //DB경로를 SD카드로 지정
cs

외장메모리 접근 권한 부여

1
2
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
cs

2. 1객체를 통해 테이블 생성 명령 날리기

1
db.execSQL("");//sql날리는 가장 단순한 방법
cs


3-1. 2의 테이블에 데이터 삽입하기

쌩 sql 날리기 

1
2
db.execSQL("insert into person (name, phoneNum, gender, age)"
            + " values ('"+ name + "','" + phoneNum + "'," + age + "," + gender + ")");
cs


- android SQLite interface 

1
2
3
4
5
6
ContentValues param = new ContentValues();
param.put("name", name);
param.put("phoneNum", phoneNum);
param.put("age", age);
param.put("gender", gender);
db.insert(TABLE_NAME, null, param);
cs

3-2. 2의 테이블에 데이터 수정하기

1
2
3
4
5
6
ContentValues param = new ContentValues();
param.put("name", name);
param.put("phoneNum", phoneNum);
param.put("age", age);
param.put("gender", gender);
db.update(TABLE_NAME, param, "_id=?", new String[]{id});
cs

3-3. 2의 테이블에서 데이터 삭제하기

1
2
String id = idEdt.getText().toString();
db.delete(TABLE_NAME, "_id=?", new String[]{id});
cs

3-4. 2의 테이블에서 데이터 조회하기


' IOT 기반 응용 SW과정 > Android, Arduino' 카테고리의 다른 글

Day98_2 안드로이드 OpenHelper  (0) 2016.08.05
Day98 안드로이드 db Select문  (0) 2016.08.05
Day95  (0) 2016.08.02
Day94 안드로이드 listview  (0) 2016.08.02
Day93 AlertDialog  (0) 2016.07.29

어제 복습

Spring JDBC -> 기본 자바 JDBC를 좀 더 편하게 쓸 수 있게... 

자바 JDBC 불편한점 

- Connection객체를 직접 사용하기 때매 구문객체 관리, 예외처리,,등등 잡일이 많음

- 파라미터 매핑 시 타입과 위치를 일일이 지정

- 결과값 찾을 때도 타입과 컬럼명을 정확히 알아야 함


DB연결정보 넣어서 DataSource 빈 등록


DataSource넣어서 jdbcTemplate (or namedParameterJdbcTemplate) 빈 등록


jdbcTemplate (or namedParameterJdbcTemplate) 를 멤버로 갖는 dao 작성

- jdbcTemplate : sql을 날릴때 ? 에 들어갈 값을 가변길이 매개변수로 입력

- namedparam : sql문 작성 시 ? 대신에 인자 이름을 적고, 맵 형태로 파라미터를 입력해서 sql날릴 때 같이 보냄


JdbcTemplate (or namedParameterJdbcTemplate)를 넣어서 dao 빈 등록




MyBatis 구성

환경설정파일 : 마이바티스 전반에 걸친 세팅

- 매핑설정파일이 어디에 있는지

- 디비에 어떻게 접속할 건지

- 사용할 모델 클래스들에 대한 별명


매핑설정파일

- 사용할 sql문들에 대한 정의


Session빌드 및 사용

- 실제 sql문 실행

- 설정파일을 먹여서 SqlSessionFactoryBuilder를 객체 생성

- SqlSessionFactoryBuilder를 통해서 SqlSessionFactory를 빌드

SqlSessionFactory를 이용해서 SqlSession을 open

SqlSession을 통해서 원하는 sql구문의 id를 호출해서 사용

SqlSession을 close


SqlSessionFactoryBuilder 클래스 : 설정파일을 읽어서 SqlSessionFactory 객체를 생성

SqlSessionFactory 클래스SqlSession을 만드는 역할

SqlSession 클래스 : sql문을 실제 호출해주는 역할


    

' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day54 MyBatis_anno  (0) 2016.06.02
Day53 MyBatis  (0) 2016.06.01
Day51 스프링 JDBC  (0) 2016.05.30
Day49 Spring Framework  (0) 2016.05.26
Day48 DB / Spring Framwork  (0) 2016.05.25

일반적인 웹 어플리케이션 구조


View

 사용자에게 보여지는 페이지

 Spring MVC

Controller 

 어떤 req가 왔을 때 어떤 작업을 하고, 어떤 resp를 돌려줄지...

 AOP

Service

 우리 응용에서 필요한 로직을 구현

 Spring JDBC & ORM

Dao 

 DB에 있는 데이터를 조회, 수정, 삽입, 삭제...

 

Database


Spring JDBC

<!-- http://mvnrepository.com/artifact/org.springframework/spring-jdbc -->

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-jdbc</artifactId>

    <version>4.1.6.RELEASE</version>

</dependency>


1. Java 기본 JDBC를 사용하면서 불편했던 점

- PreparedStatement 구문이 편하긴한데,,,  바인딩에 대해서 타입과 위치를 개발자가 직접 다 지정해줘야됨.

- ResultSet에서 값을 주워올 때도 타입과 위치를 개발자가 직접 지정해야됨.


- PreparedStatement 구문 객체랑 ResultSet객체 사용 후 close해주는거 귀찮음..

- 하다보니 항상 똑같은 모양인데 예외처리해줘야됨.

->> Connection객체를 직접 제어해야되기 때문에 발생하는 문제

->>> 저건 약과고... ConnectionPool을 사용해서 여러개의 Connection을 제어하고 관리하려면 더....

DAO가 Connection을 직접 제어하지 말고 Connection을 관리해주는 한 레벨 높은 응용계층의 객체를 사용합시다.


Spring-jdbc에서 제공하는 Connection을 관리하는 작업을 대신해주는 Session역할을 해주는 객체 -> jdcbTemplate

--> 이 역할을 하는 친구들이 Connection을 어떻게 연결할지에 대한 정보는 java.sql.DataSource 인터페이스를 구현하는 객체를 활용

DataSource구현체 : 디비에 연결하기 위한 정보 집합


DataSource구현체에 접속정보

jdbcTemplate은 DataSource를 사용해 우리가 던져주는 sql문 셔틀

우리가 만들 Dao는 JdbcTemplate에 적절하게 sql문 날리고 결과값 핸들링


스프링 컨테이너에 DataSource구현체를 빈으로 등록 (디비 접속정보를 넣어서)

-> jdbcTemplate을 넣어서 빈으로 등록 (DataSource를 넣어서) -> jdbcTemplate을 사용하는 Dao작성

-> 작성한 Dao를 빈으로 등록 (jdbcTemplate 넣어서)


DataSource구현체 빈 등록 ->> 어떻게 디비에 접속할지에 대한 정보 + 커넥션을 어떻게 관리할건지..


<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource"></bean>

DriverManagerDataSource : 스프링에서 연습용으로 제공하는 아주 단순한 DtaaSource구현체


Spring JDBC에서 제공하는 Connection을 응용해서 사용하는 Session 객체

- JDBCTemplate 요전에 한거

- NamedParameterjdbcTemplate 지금 해볼거

- SimplejdbcTemplate <- deprecated


//NamedParameteJdbcTemplate은 select해서 매퍼이용해 결과값 매핑하는건 JdbcTemplate이랑 같음

//sql문에 파라미터를 매핑할때 이름을 기반으로 해서 매핑시킬 수 있음

//Map같은 방식으로~

//sql문을 만들때 ? 대신에 이름을 적고, 이름을 키로, 그 자리에 넣을 값을 벨류로 맵으로 만들어서 투척!

//사용되는 뱁 객체 만드는 방법이 4가지..

//한개 넣을 때, 여러개 넣을 때

 

 자바 유틸 컬렉션 이용

 Spring라이브러리

 한개 넣을때

 SingleMap

 

 여러개 넣을때

 HashMap

 



' IOT 기반 응용 SW과정 > Web Programing' 카테고리의 다른 글

Day53 MyBatis  (0) 2016.06.01
Day52 jdbcTemplate // MyBatis  (0) 2016.05.31
Day49 Spring Framework  (0) 2016.05.26
Day48 DB / Spring Framwork  (0) 2016.05.25
Day47 MVC, 커맨드 패턴  (0) 2016.05.24

자바 코드를 이용해  //   JDBC(Java Database Connectivity)

-DB에 접속하고

-DBMS에 명령어를 전달하고

-DBMS로부터 질의결과를 얻어오기


파일 입출력 기능

java.io.~~~~


네트워크 기능

java.net.~~~~


JDBC 기능

java.sql.~~~~   // 

여기에는 어떻게 JDBC가 구현될지 인터페이스만 있고 실제 DBMS에 접속해서 활용하는 기능들은 각각의 DBMS에 구현클래스를 만들어서 배포


외부 라이브러리를 프로젝트에 import하기


Maven Repository: Search/Browse/Explore      -> 초대형 무료라이브러리 저장소

mvnrepository.com/




import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.sql.Statement;


//Class 로딩

//DBMS의 특정 DB와 연결을 갖는 Connection객체 획득

//내가 날릴 쿼리문을 품은 Statement객체 생성

//Connection객체에  Statement구문 객체를 전달

public class CreateTableTest {

public static void main(String[] args) {

Connection conn = null;

Statement stmt = null;

//연결한 DBMS의 주소(디비명까지)

String url = "jdbc:mysql://localhost:3306/lkb";

//접속할 mysql id와 비밀번호

String id = "root";

String pw = "mysql";

try {

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection(url,id,pw);

stmt = conn.createStatement(); // DB와 연결된 conn 객체로 부터 구문 객체를 획득

StringBuilder sb = new StringBuilder();

sb.append("create table student(")

.append("id int,")

.append("name varchar(20),")

.append("grade int")

.append(");").toString();

stmt.execute(""); //구문객체 던지기

//execute -> 테이블 생성, 수정, 삭제 등 데이터 베이스 관리 명령어 사용

//executeUpdate -> 레코드 삽입, 수정, 삭제 등 데이터 조작 명령어 사용

//executeQuery -> 레코드 조회, 테이블 조회 등 조회 명령어 사용

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();}

finally{

try {

if(conn != null && !conn.isClosed())

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}}}}


' IOT 기반 응용 SW과정 > Java, Eclipse ' 카테고리의 다른 글

Day31 Singleton Pattern  (0) 2016.04.28
Day30 DAO  (0) 2016.04.27
Day28 MySQL  (0) 2016.04.25
Day27 MySQL  (0) 2016.04.22
Day 26 데이터베이스 프로그래밍  (0) 2016.04.21

+ Recent posts