마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 초보입니다 sqlite를 이용해 text를 받으려하는데 쿼리문만쓰면 그냥 앱이꺼지네요

0 추천

이번에 처음으로 데이터베이스 연동한걸 만들어보는데 sqlite가 너무어렵네요

일단 내부저장소에 assets에있는 db는 옮겨담았는데 앱도켜지는데 쿼리문만쓰면 냅다꺼져버려서 저혼자서는 뭐가잘못됬는지 찾을수가없네요..

package com.soo.asdf;

import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;


public class MainActivity extends AppCompatActivity {
    private final static String DB_NAME = "tt.db";
    private final static int DB_VERSION = 1;

     SQLiteDatabase db;
    MySQLiteOpenHelper msq;
     Button btn1;
     Button btn2;
     Button btn3;
     TextView tx[]=new TextView[40];
     String sql;
     Cursor cursor;
     SQLiteDatabase readDB;

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

        btn1=(Button)findViewById(R.id.button1);
        btn2=(Button)findViewById(R.id.button2);
        btn3=(Button)findViewById(R.id.button3);


        msq=new MySQLiteOpenHelper(this);


        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch(v.getId())
                {
                    case R.id.button1:
//                        tx[0].setText(msq.select(1,10));
                        Toast.makeText(MainActivity.this,"1버튼은 이상무",Toast.LENGTH_LONG).show();
                        break;
                    case R.id.button2:
                        Toast.makeText(MainActivity.this,"2버튼은 이상무",Toast.LENGTH_LONG).show();
                        break;
                    case R.id.button3:
                        Toast.makeText(MainActivity.this,"3버튼은 이상무",Toast.LENGTH_LONG).show();
                        break;
                }
            }
        };
    btn1.setOnClickListener(listener);
    btn2.setOnClickListener(listener);
    btn3.setOnClickListener(listener);
    }

   

}




package com.soo.asdf;

import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class MySQLiteOpenHelper extends SQLiteOpenHelper {



    static String NAME = "tt.db";

    static SQLiteDatabase.CursorFactory FACTORY = null;

    static String PACKEGE = "com.soo.asdf";

    static String DB = "tt.db";

    static int VERSION  = 1;

    public MySQLiteOpenHelper(Context context) {

        super(context, NAME, FACTORY, VERSION);

// TODO Auto-generated constructor stub

        try {

            boolean bResult = isCheckDB(context);  // DB가 있는지?

            Log.i("MiniApp", "DB Check="+bResult);

            if(!bResult){   // DB가 없으면 복사

                copyDB(context);

            }else{



            }

        } catch (Exception e) {



        }

    }

// DB가 있나 체크하기

    public boolean isCheckDB(Context mContext){

        String filePath = "/data/data/" + PACKEGE + "/databases/" + DB;

        File file = new File(filePath);



        if (file.exists()) {

            return true;

        }



        return false;



    }

// DB를 복사하기

// assets의 /db/xxxx.db 파일을 설치된 프로그램의 내부 DB공간으로 복사하기

    public void copyDB(Context mContext){

        Log.d("MiniApp", "copyDB");

        AssetManager manager = mContext.getAssets();

        String folderPath = "/data/data/" + PACKEGE + "/databases";

        String filePath = "/data/data/" + PACKEGE + "/databases/" +DB;

        File folder = new File(folderPath);

        File file = new File(filePath);



        FileOutputStream fos = null;

        BufferedOutputStream bos = null;

        try {

            InputStream is = manager.open("db/" + DB);

            BufferedInputStream bis = new BufferedInputStream(is);



            if (folder.exists()) {

            }else{

                folder.mkdirs();

            }





            if (file.exists()) {

                file.delete();

                file.createNewFile();

            }



            fos = new FileOutputStream(file);

            bos = new BufferedOutputStream(fos);

            int read = -1;

            byte[] buffer = new byte[1024];

            while ((read = bis.read(buffer, 0, 1024)) != -1) {

                bos.write(buffer, 0, read);

            }



            bos.flush();



            bos.close();

            fos.close();

            bis.close();

            is.close();



        } catch (IOException e) {

            Log.e("ErrorMessage : ", e.getMessage());

        }

    }

    /** Called when the activity is first created. */

    @Override

    public void onCreate(SQLiteDatabase db) {

//	String QUERY = "CREATE TABLE word (_id INTEGER PRIMARY KEY autoincrement, word_e TEXT , word_k TEXT)";

//	db.execSQL(QUERY);

        Log.e("ehsk", "eee");



//        String QUERY1 = "INSERT INTO word (word_e, word_k ) VALUES(apple , 사과)";

//        db.execSQL(QUERY1);

    }



    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO Auto-generated method stub

        String QUERY = "DROP TABLE IF EXISTS word";

        db.execSQL(QUERY);

        onCreate(db);





    }
    public String select(int index,int time){
        SQLiteDatabase db= this.getReadableDatabase();
        StringBuffer sb=new StringBuffer();
        String result="";
        Cursor cursor =db.rawQuery("SELECT * FROM '319 WHERE _DAY"+index+"AND TIME"+time,null);
        result=cursor.getString(0);
        return result;
    }

}

 

Soo3142 (190 포인트) 님이 2019년 4월 6일 질문
오류 로그를 올리세요                  .

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...