2017-10-18 5 views
-1

MainActvity에 4 개의 버튼이 있습니다. Add Button을 클릭하면 AddData 클래스가 열립니다. 여기에 이름, 전화 번호 및 이메일을 입력해야합니다. AddData 클래스의
저장 버튼을 클릭하면 Toast가 "데이터가 삽입되지 않았습니다."라는 메시지와 함께 표시됩니다.SQLiteDatabase 내부에 데이터가 삽입되지 않는 이유

내 문법에 대해 유감스럽게 생각합니다.

코멘트에서 MainActivity.java

package csitmnr.sqlitedatabaseexample; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends AppCompatActivity { 
    Button search,add,delete,update; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 



    search = (Button) findViewById(R.id.btnSearch); 
    add = (Button) findViewById(R.id.btnAdd); 
    delete = (Button) findViewById(R.id.btnDelete); 
    update = (Button) findViewById(R.id.btnUpdate); 

    add.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(MainActivity.this,AddData.class); 
      startActivity(intent); 
     } 
    }); 
} 
} 

DBHelper.java

package csitmnr.sqlitedatabaseexample; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 



public class DBHelper extends SQLiteOpenHelper { 

    private static final String DATABASE_NAME = "contacts.db"; 
    private static final String TABLE_NAME = "contacts"; 

    public DBHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 


    } 

@Override 
public void onCreate(SQLiteDatabase sqLiteDatabase) { 
    sqLiteDatabase.execSQL("CREATE TABLE "+TABLE_NAME+"(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,PHONE_NO TEXT,EMAIL TEXT)"); 


} 

@Override 
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { 
    sqLiteDatabase.execSQL("DROP TABLE IF EXIST "+TABLE_NAME); 
    onCreate(sqLiteDatabase); 
} 

public boolean insertData(String name,String phone_no,String email){ 

    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase(); 

    ContentValues contentValues = new ContentValues(); 

    contentValues.put("NAME",name); 
    contentValues.put("PHONE_NO",phone_no); 
    contentValues.put("EMAIL",email); 

    long result = sqLiteDatabase.insert(TABLE_NAME,null,contentValues); 

    if (result == -1) 
     return false; 
    else 
     return true; 


} 
} 

AddData.java

package csitmnr.sqlitedatabaseexample; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class AddData extends AppCompatActivity { 
    EditText name , phone, email; 
    Button save; 
    private DBHelper dbHelper; 

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

    dbHelper = new DBHelper(this); 

    name = (EditText) findViewById(R.id.etName); 
    phone = (EditText) findViewById(R.id.etPhone); 
    email = (EditText) findViewById(R.id.etEmail); 
    save = (Button) findViewById(R.id.saveButton); 


    save.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      boolean result = dbHelper.insertData(name.getText().toString(),phone.getText().toString(),email.getText().toString()); 
       if (result){ 
        Toast.makeText(AddData.this, "Data is inserted", Toast.LENGTH_SHORT).show(); 
       }else { 
        Toast.makeText(AddData.this, "Data is not inserted", Toast.LENGTH_SHORT).show(); 
       } 
     } 
    }); 
} 
} 
+1

https://developer.android.com/reference/an droid/database/sqlite/SQLiteDatabase.html # insertOrThrow (java.lang.String, java.lang.String, android.content.ContentValues) –

+0

죄송합니다. 작동하지 않습니다. –

+0

무엇을 의미합니까? –

답변

0

:

앱이 이미 테이블로 생성되었으므로 데이터를 지우고 앱을 다시 실행하십시오. - Jerrol 1 분 전

쉬운 해결책, 업그레이드시 이전 테이블을 폐기하기 때문에 테이블 버전을 늘리십시오.

문제의 원인은 당신이 그렇게 가능한 해결책은, 버전 번호를 증가시키지 않고 데이터베이스의 형식을 변경하는 것이 될 것이다

: 제대로)

  • 는 버전 번호를 높이고 onUpgrade을 (구현
  • 다시 설치 응용 프로그램 (가정이 아닌 영구 저장)
  • 지우기 응용 프로그램 데이터`insertOrThrow` 사용에 대한 오류가 무엇인지 볼 수 있도록하는 방법
+0

첫 번째 문항 만 허용됩니다. 그 부분에는 공간이 필요하지 않습니다. – Enzokie

+0

하지만 작동하지 않습니다. –

+1

@ManojBudhaAyer 앱이 이미 테이블로 생성되었으므로 먼저 데이터를 지우고 앱을 다시 실행하십시오. – Jerrol

관련 문제