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

데이터 베이스 수정하고 나서 런을 하고 데이터를 받으니까 팅겼습니다..

0 추천

코드는 아래와 같이 입력을 했는데요

public DBHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    // DB를 새로 생성할 때 호출되는 함수
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 새로운 테이블 생성
        /* 이름은 MONEYBOOK이고, 자동으로 값이 증가하는 _id 정수형 기본키 컬럼과
        item 문자열 컬럼, price 정수형 컬럼, create_at 문자열 컬럼으로 구성된 테이블을 생성. */
        db.execSQL("CREATE TABLE Angle (_id INTEGER PRIMARY KEY AUTOINCREMENT, readBuffer_X TEXT, readBuffer_Y TEXT, readBuffer_Z TEXT);");
    }

    // DB 업그레이드를 위해 버전이 변경될 때 호출되는 함수
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    public void insert(String readBuffer_X, String readBuffer_Y, String readBuffer_Z) {
        // 읽고 쓰기가 가능하게 DB 열기
        SQLiteDatabase db = getWritableDatabase();
        // DB에 입력한 값으로 행 추가
        db.execSQL("INSERT INTO Angle VALUES(null, '" + readBuffer_Y + "', " + readBuffer_Z + ", '" + readBuffer_X + "');");
        db.close();
    }

    public void update(String readBuffer_Y, String readBuffer_Z) {
        SQLiteDatabase db = getWritableDatabase();
        // 입력한 항목과 일치하는 행의 가격 정보 수정
        db.execSQL("UPDATE Angle SET readBuffer_Z=" + readBuffer_Z + " WHERE readBuffer_Y='" + readBuffer_Y + "';");
        db.close();
    }

    public void delete(String readBuffer_Y) {
        SQLiteDatabase db = getWritableDatabase();
        // 입력한 항목과 일치하는 행 삭제
        db.execSQL("DELETE FROM Angle WHERE readBuffer_Y='" + readBuffer_Y + "';");
        db.close();
    }

    public String getResult() {
        // 읽기가 가능하게 DB 열기
        SQLiteDatabase db = getReadableDatabase();
        String result = "";

        // DB에 있는 데이터를 쉽게 처리하기 위해 Cursor를 사용하여 테이블에 있는 모든 데이터 출력
        Cursor cursor = db.rawQuery("SELECT * FROM Angle", null);
        while (cursor.moveToNext()) {
            result += cursor.getString(0)
                    + " : "
                    + cursor.getString(1)
                    + " | "
                    + cursor.getInt(2)
                    + " | "
                    + cursor.getString(3)
                    + " | ";
        }

        return result;
    }
}

다음과 같이 에러가 떳습니다, 

05-14 16:59:40.479 3278-3278/com.mcuhq.simpletest_4 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.mcuhq.simpletest_4, PID: 3278
    android.database.sqlite.SQLiteException: no such table: Angle (code 1): , while compiling: INSERT INTO Angle VALUES(null, ' 00001', 00005, ' 00000');
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:892)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:503)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:610)
        at dalvik.system.NativeStart.main(Native Method)
05-14 16:59:42.029 3278-3278/com.mcuhq.simpletest_4 I/Process: Sending signal. PID: 3278 SIG: 9

뭐가 잘못되었는지 모르겠습니다.

도와주시면 감사하겠습니다.

db와 관련된 메인 액티비티  추가했습니다

final DBHelper dbHelper = new DBHelper(getApplicationContext(), "Angle.ab",null,1);
final TextView result = (TextView) findViewById(R.id.text1);

    mHandler = new Handler(){    //블루투스 데이터 수신 핸들러
    public void handleMessage(Message msg){

        if(msg.what == MESSAGE_READ){

            try {
                readMessage = new String((byte[]) msg.obj, "UTF-8");
                if((readMessage.indexOf("s") == 0) && (readMessage.indexOf("e") == 21))  {
                    if(readMessage != null) { // readmessage와 null(빈값)은 같지 않다
                        test = readMessage.split("");
                        str00 = test[0]+test[2]+test[3]+test[4]+test[5]+test[6]+test[7]+test[8]+test[9];
                        str0 = readMessage.substring(0,22);
                        str1 = readMessage.substring(1,7);                 // indexof - 데이터값이 01234 56789 00000 출력될때substring(0,5)일때
                        str2 = readMessage.substring(8,14);                // ex) substring(0,5)이면 01234까지
                        str3 = readMessage.substring(16,21);

                        // 모듈에서 넘어오는 데이터에 부호(+,-)값이 포함 되있음
                        // indexof에 부호값까지 포함함

                    }
                    else if(readMessage == null){
                        readMessage = str0;
                    }

                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            mReadBuffer.setText(str0);
            mRead_X.setText(str1);             // setText str1값을 mRead_X에 출력
            mRead_Y.setText(str2);
            mRead_Z.setText(str3);

            String readBuffer_X = mRead_X.getText().toString();
            String readBuffer_Y = mRead_Y.getText().toString();
            String readBuffer_Z = mRead_Z.getText().toString();

            dbHelper.insert(readBuffer_X, readBuffer_Y, readBuffer_Z);
            result.setText(dbHelper.getResult());

        }

        if(msg.what == CONNECTING_STATUS){
            if(msg.arg1 == 1)
                mBluetoothStatus.setText("Connected to Device: " + (String)(msg.obj));
            else
                mBluetoothStatus.setText("Connection Failed");
        }

    }
};

 

익명사용자 님이 2018년 5월 14일 질문
2018년 5월 14일 수정

3개의 답변

0 추천
동작하는 메인부분도 올려주세요
익명사용자 님이 2018년 5월 14일 답변
db관련 메인 액티비티 올렸습니다.
0 추천

DB 테이블 생성 쿼리가 틀려서 생성이 안됬네요.

SQLiteException은 대부분 쿼리문에 에러가 있을때 발생하곤 하는 거 같아요.

INSERT문 실행시 no such table: Angle 테이블을 찾을 수 없다고 나옵니다.

CREATE TABLE Angle (_id INT NOT NULL AUTO_INCREMENT, readBuffer_X TEXT, readBuffer_Y TEXT, readBuffer_Z TEXT, PRIMARY KEY (_id));

생성은 위와 같이 해주시는 게 맞습니다.

 

 

익명사용자 님이 2018년 5월 15일 답변
onCreate 부에 알려주신데로 입력을 해본 결과

 public void onCreate(SQLiteDatabase db) {
        // 새로운 테이블 생성
        /* 이름은 MONEYBOOK이고, 자동으로 값이 증가하는 _id 정수형 기본키 컬럼과
        item 문자열 컬럼, price 정수형 컬럼, create_at 문자열 컬럼으로 구성된 테이블을 생성. */
        db.execSQL("CREATE TABLE Angle (_id INT NOT NULL AUTO_INCREMENT,readBuffer_X TEXT, readBffuer_Y TEXT, readBuffer_Z TEXT,PRIMARY KEY(_id));");
    }

Process: com.mcuhq.simpletest_4, PID: 16974
    android.database.sqlite.SQLiteException: no such table: Angle (code 1): , while compiling: INSERT INTO Angle VALUES(null, ' 00000', '00000', ' 00000');
 전과 비슷하게 에러가 발생합니다.

AUTO_INCREMENT이부분이 빨간줄로 표시가 되었잇습니다.
복붙하지 않고 직접 입력했습니다.
도와주셔서 감사합니다.
약간의 수정을 해보니까 되네요
0 추천
SQL 오류 인것 같네요  db.execSQL("INSERT INTO Angle( readBuffer_X  , readBuffer_Y  , readBuffer_Z  )  VALUES( '" + readBuffer_Y + "', " + readBuffer_Z + ", '" + readBuffer_X + "');");
       이렇게 해보세요 키가 _id인데 null 값을 설정하는게 좀 이상하네요.
luxsoft (1,780 포인트) 님이 2018년 7월 6일 답변
...