안드로이드 스튜디오 sqlite 연동질문

안드로이드 스튜디오 sqlite 연동질문

QA

안드로이드 스튜디오 sqlite 연동질문

본문

안녕하세요 안드로이드 스튜디오와 sqlite 연동에대해서 질문드립니다 ㅜㅜ


package com.example.dbtest2;

import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

    myDBHelper myHelper;
    DatePicker dp;
    Button bt1;
    SQLiteDatabase sqlDB;
    EditText Et1;

    int cYear ;
    int cMonth ;
    int cDay ;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        dp =(DatePicker) findViewById(R.id.dpker1);
        bt1 = (Button)findViewById(R.id.button1);
        Et1 = (EditText) findViewById(R.id.et1);


        myHelper = new myDBHelper(this);


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


            }
        });



        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                sqlDB = myHelper.getWritableDatabase();
                sqlDB.execSQL("INSERT INTO diaryTBL(dYear,dMonth,dDay,dinfo) VALUES ('" + cYear + "', '" + cMonth + "','" + cDay + "','"+ Et1.getText().toString() +"' );");
                sqlDB.close();
                Toast.makeText(getApplicationContext(), "입력됨",
                        Toast.LENGTH_SHORT).show();
            }
        });

    }


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

        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE  diaryTBL ( dYear INTEGER PRIMARY KEY,dMonth INTEGER,dDay INTEGER, dinfo CHAR(100));");
        }

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


}

 

3076820299_1606889022.8503.png

3076820299_1606889029.3061.png

 

avd로 구동하여 앱을 실행해보면 정상적으로 입력이 됩니다

 

근데 문제는 앱을 처음실행하여 처음 한번만 저렇게 저장이되고 다시한번 버튼을 누르면 앱이 꺼지면서

 

데이터베이스에 저장이 안됩니다..

 

제가 원하는건 날짜를 누르고 버튼을 누를때마다 데이터베이스에 값이 저장되는것인데

 

아무리 구글링을 해봐도 답을 찾을수가 없어 질문드립니다 ㅜㅜ

 

코드에서 잘못된 부분이 있는건가요..?

 

이 질문에 댓글 쓰기 :

답변 1

로그창에 오류 메세지가 어떻게 뜨는지 알아야 도와줄 수 있을 것 같네요

그리고 db 인서트 할 때 스레드를 돌려서 넣는게 아무래도 

오류 확률이 줄어줄 수 있을 거예요

답변을 작성하시기 전에 로그인 해주세요.
전체 131
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT