티스토리 뷰

ANDROID/android

Android ORM Lite

BAEKNAMU 2017. 2. 18. 00:29

build.gradle

1
2
    compile 'com.j256.ormlite:ormlite-core:5.0'
    compile 'com.j256.ormlite:ormlite-android:5.0'
cs


domain.Memo.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@DatabaseTable(tableName = "memo"// Generate Table Annotation
public class Memo {
    @DatabaseField(generatedId = true// PRIMARY KEY AUTO INCREMENT
    int id;
    @DatabaseField
    String title;
    @DatabaseField
    String contents;
    public Memo( String contents){
        this.contents = contents;
    }
 
    public int getId() {
        return id;
    }
 
    public String getTitle() {
        return title;
    }
 
    public void setTitle(String title) {
        this.title = title;
    }
 
    public String getContents() {
        return contents;
    }
 
    public void setContents(String contents) {
        this.contents = contents;
    }
}
 
cs


MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button btnCreate,btnRead,btnUpdate,btnDelete;
    EditText editNo, editMemo;
    TextView textList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
    }
 
    private void create() throws java.sql.SQLException {
 
//        // Database 파일 연결을 위한 DBHelper 생성 (싱글턴방법)
//        OrmLiteHelper ormLiteHelper = OpenHelperManager.getHelper(context, OrmLiteHelper.class);
        // 1. DB 연결
        OrmLiteHelper dbHelper = new OrmLiteHelper(this);
        // 2. Table 연결
        Dao<Memo, Integer> memoDao = dbHelper.getDao(Memo.class);
        // 3. 입력값 화면에서 가져와서 변수에 담고
        String memo = editMemo.getText().toString();
        // 4. 변수에 담긴 입력값으로 domain 클래스 생성자에 대입한 후 DB 에 입력
        memoDao.create(new Memo(memo)); // DB insert!!!
        // 5. DB 연결 해제
        dbHelper.close();
        // 6. create 후에 화면에서 글자를 지워준다
        editMemo.setText("");
 
        read();
    }
    @Override
    public void onClick(View v) {
        try {
            switch (v.getId()) {
                case R.id.btnCreate:
                    create();
                    break;
                case R.id.btnRead:
                    read();
                    break;
                case R.id.btnUpdate:
                    update();
                    break;
                case R.id.btnDelete:
                    delete();
                    break;
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    private void read() throws SQLException{
        OrmLiteHelper dbHelper = new OrmLiteHelper(this);
        Dao<Memo, Integer> memoDao = dbHelper.getDao(Memo.class);
        // 데이터를 전체 읽어와 화면에 뿌려준다
        List<Memo> list = memoDao.queryForAll();
        String temp = "";
        // 데이터를 한줄씩 읽어서 임시 변수인 temp에 저장한다.
        for(Memo memo : list){
            temp = temp + "no:" + memo.getId() + ", " + memo.getContents() + "\n";
        }
        // 화면에 temp 변수의 내용을 뿌려준다
        textList.setText(temp);
        dbHelper.close();
        List<Memo> list1  = memoDao.queryForEq("title""백향목");
 
 
    }
    private void update() throws SQLException{
        int no = Integer.parseInt(editNo.getText().toString());
        String temp =        editMemo.getText().toString();
 
        OrmLiteHelper dbHelper = new OrmLiteHelper(this);
        Dao<Memo, Integer> memoDao = dbHelper.getDao(Memo.class);
        // 1. 변경할 레코드를 가져온다
        Memo memo = memoDao.queryForId(no);
        // 2. 변경한 값을 입력한다
        memo.setContents(temp);
        // 3. Table 에 반영한다
        memoDao.update(memo);
 
        dbHelper.close();
 
        read();
    }
    private void delete() throws SQLException{
        int no = Integer.parseInt(editNo.getText().toString());
 
        OrmLiteHelper dbHelper = new OrmLiteHelper(this);
        Dao<Memo, Integer> memoDao = dbHelper.getDao(Memo.class);
        memoDao.deleteById(no);
 
        dbHelper.close();
 
        read();
    }
 
  // rawQuery 사용시
    public List<Memo> select(String rawQuery) {
        List<Memo> datas = null;
 
        try {
            OrmLiteHelper ormLiteHelper = OpenHelperManager.getHelper(this, OrmLiteHelper.class);
            Dao<Memo, Integer> dao = ormLiteHelper.getDao();
 
            GenericRawResults<Memo> genericRawResults = dao.queryRaw(rawQuery, dao.getRawRowMapper());
            datas = genericRawResults.getResults();
        } catch (SQLException e) { e.printStackTrace(); }
 
        return datas;
    }
 
 
    private void setWidget(){
        btnCreate = (Button) findViewById(R.id.btnCreate);
        btnRead = (Button) findViewById(R.id.btnRead);
        btnUpdate = (Button) findViewById(R.id.btnUpdate);
        btnDelete = (Button) findViewById(R.id.btnDelete);
 
        editNo = (EditText) findViewById(R.id.editNo);
        editMemo = (EditText) findViewById(R.id.editMemo);
 
        textList = (TextView) findViewById(R.id.list);
    }
 
    private void setListener(){
        btnCreate.setOnClickListener(this);
        btnRead.setOnClickListener(this);
        btnUpdate.setOnClickListener(this);
        btnDelete.setOnClickListener(this);
    }
 
 
 
}
cs


OrmLiteHelper.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class OrmLiteHelper extends OrmLiteSqliteOpenHelper{
    private static final String DB_NAME = "database.db";
    private static final int DB_VERSION = 1;
 
    //The data access object (DAO) used to interact with the Sqlite database to do C.R.U.D operations.
    //Data Access Object, Data 클래스를 접근할 수 있는 객체, 테이블을 조작하기 위한 객체
    // private Dao<Memo, Long> dao = null; // ID의 기본타입은 Long
    private Dao<Memo, Integer> dao = null// 값 - 키 형태의 제네릭
    public OrmLiteHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        //여기서 파일이 있는지 확인함.
    }
 
    @Override   // DB 파일 q없을 때 최초 호출
    public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
        try {
            TableUtils.createTable(connectionSource, Memo.class); // 해당 클래스로 자동으로 DB 파일 생성
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (java.sql.SQLException e) {
            e.printStackTrace();
        }
    }
 
    @Override   //DB 버전이 바뀐경우 실행
    public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
        if(oldVersion == 1) {
            // TableUtils.createTable(connectionSource, addTable.class);
        } else
            // onCreate()를 호출해서 테이블 생성
            onCreate(database, connectionSource);
    }
    public Dao<Memo, Integer> getDao() throws java.sql.SQLException {
 
        // OrmLiteHelper 를 싱글턴으로 사용하기 때문에, dao 객체도 열어놓고 사용가능
        if(dao == null)
            // getDao(Class<T> clazz) Data.class 를 통해 Dao 반환
            dao = getDao(Memo.class);
 
        return dao;
    }
 
}
 
cs


main.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.hm.orm.MainActivity">
 
    <Button
        android:text="Create"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/btnCreate" />
 
    <Button
        android:text="Read"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/btnCreate"
        android:layout_toEndOf="@+id/btnCreate"
        android:id="@+id/btnRead" />
 
    <Button
        android:text="Update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/btnRead"
        android:layout_toEndOf="@+id/btnRead"
        android:id="@+id/btnUpdate" />
 
    <Button
        android:text="Delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/btnUpdate"
        android:layout_toEndOf="@+id/btnUpdate"
        android:id="@+id/btnDelete" />
 
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:layout_below="@+id/editNo"
        android:layout_alignLeft="@+id/editNo"
        android:layout_alignStart="@+id/editNo"
        android:id="@+id/editMemo"
        android:hint="Input Memo" />
 
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/editNo"
        android:hint="No"
        android:layout_below="@+id/btnCreate"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
 
    <TextView
        android:text="list..."
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/editMemo"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/list" />
</RelativeLayout>
cs


Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday