2017-10-18 72 views
-1

我在MainActvity上有4個按鈕。當我點擊添加按鈕時,AddData類被打開。在這裏我必須插入姓名,電話號碼和電子郵件。當我點擊
保存按鈕的AddData類,然後吐司顯示消息「數據未插入」。爲什麼數據沒有插入到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

如何使用'insertOrThrow'所以你看到的是什麼錯誤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()正常
  • 重新安裝該應用程序(假設非持久性存儲)
  • 清除應用數據
+0

第一個是可以接受的,在那部分空間不是必需的。 – Enzokie

+0

我這樣做,但它不工作。 –

+1

@ManojBudhaAyer由於您的應用已經創建了一個表格,請先嚐試清除數據並再次運行您的應用。 – Jerrol

相關問題