DEVELOPMENT

[Android Studio] Chapter 12 연습문제

200% 2021. 7. 7. 20:00

[연습문제]

5

CREATE TABLE prodTable( num INTEGER PRIMARY KEY AUTOINCREMENT, uName CHAR(15), product CHAR(15), count INTEGER );
INSERT INTO prodTable (uName, product, count) VALUES ( 'Pikachu', 'Desktop', 4);
INSERT INTO prodTable (uName, product, count) VALUES ( 'Nunimugi', 'Laptop', 1);
INSERT INTO prodTable (uName, product, count) VALUES ( 'Haemugi', 'Laptop', 2);
INSERT INTO prodTable (uName, product, count) VALUES ('Pichu', 'Desktop', 5);

 

6

activitiy_main.xml

더보기
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <DatePicker
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/datePicker1"
        android:calendarViewShown="false"
        android:datePickerMode="spinner"/>

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/edtDiary"
        android:background="#00ff00"
        android:lines="8"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btnWrite"
        android:enabled="false"
        android:text="BUTTON"/>

</LinearLayout>

 

MainActivity.java

더보기
package com.cookandroid.a12_6;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.FileNameMap;
import java.text.SimpleDateFormat;
import java.time.Year;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity {
    DatePicker dp;
    EditText edtDiary;
    Button btnWrite;
    String fileName;
    myDBHelper myHelper;
    SQLiteDatabase sqlDB;
    public static String datepicked;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("연습문제 12-6");

        dp = (DatePicker) findViewById(R.id.datePicker1);
        edtDiary = (EditText) findViewById(R.id.edtDiary);
        btnWrite = (Button) findViewById(R.id.btnWrite);

        myHelper = new myDBHelper(this);

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MODE_PRIVATE);

        Calendar cal = Calendar.getInstance();
        int cYear = cal.get(Calendar.YEAR);
        int cMonth = cal.get(Calendar.MONTH);
        int cDay = cal.get(Calendar.DAY_OF_MONTH);

        datepicked = Integer.toString(cYear) + Integer.toString(cMonth + 1) + Integer.toString(cDay);


        // db에서 값 받아오기
        sqlDB = myHelper.getReadableDatabase();
        Cursor cursor;
        cursor = sqlDB.rawQuery("SELECT content FROM myDiary WHERE diaryDate = " + datepicked + ";", null);
        if (cursor.getCount() == 0) {
            edtDiary.setText("");
            edtDiary.setHint("일기 없음");
            btnWrite.setText("새로 저장");
        } else {
            cursor.moveToNext();
            edtDiary.setText(cursor.getString(0));
            btnWrite.setText("수정하기");
        }
        cursor.close();
        sqlDB.close();
        btnWrite.setEnabled(true);

        dp.init(cYear, cMonth, cDay, new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                datepicked = Integer.toString(year) + Integer.toString(monthOfYear+1) + Integer.toString(dayOfMonth);

                // db에서 값 받아오기
                sqlDB = myHelper.getReadableDatabase();
                Cursor cursor;
                cursor = sqlDB.rawQuery("SELECT content FROM myDiary WHERE diaryDate = '" + datepicked + "';", null);
                if (cursor.getCount() == 0) {
                    edtDiary.setText("");
                    edtDiary.setHint("일기 없음");
                    btnWrite.setText("새로 저장");
                } else {
                    cursor.moveToNext();
                    edtDiary.setText(cursor.getString(0));
                    btnWrite.setText("수정하기");
                }
                cursor.close();
                sqlDB.close();
                btnWrite.setEnabled(true);
            }
        });

        btnWrite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(btnWrite.getText().equals("수정하기")){
                    sqlDB = myHelper.getWritableDatabase();
                    sqlDB.execSQL("UPDATE myDiary SET content = '" + edtDiary.getText().toString() + "' WHERE diaryDate = '" + datepicked + "';");
                    sqlDB.close();
                    Toast.makeText(getApplicationContext(), datepicked+" 이 수정됨", Toast.LENGTH_SHORT).show();

                }else{
                    sqlDB = myHelper.getWritableDatabase();
                    sqlDB.execSQL("INSERT INTO myDiary (diaryDate, content) VALUES ('" + datepicked + "' , '" + edtDiary.getText().toString() + "');");
                    sqlDB.close();
                    Toast.makeText(getApplicationContext(), datepicked+" 이 저장됨", Toast.LENGTH_SHORT).show();
                    btnWrite.setText("수정하기");
                }
            }
        });

    }
    public class myDBHelper extends SQLiteOpenHelper {
        public myDBHelper(Context context){
            super(context, "myDB", null, 1);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE myDiary(diaryDate CHAR(10) PRIMARY KEY, content VARCHAR(500));");
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS myDiary");
            onCreate(db);
        }
    }

}