Данные не вставлены с использованием SQLiteOpenHelper
Я пытаюсь вставить данные с помощью SQLiteOpenHelper в моем текущем приложении.
Когда я пытаюсь запустить приложение и вводить детали, тост говорит
Данные не вставлены
Даже я не вижу свою таблицу в Android Device Monitor -> File Explorer. Я не вижу ни одной папки в каталоге данных.
Вот мой код:
DB_check.java
package com.example.shubbh.qversoft_1;
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;
import com.example.shubbh.qversoft_1.Database.DatabaseHelper;
public class DB_check extends AppCompatActivity {
DatabaseHelper myDb;
EditText EtCompanyName;
Button bAdd, bReset;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_db_check);
myDb = new DatabaseHelper(this);
EtCompanyName = (EditText) findViewById(R.id.companyNameEt);
bAdd = (Button) findViewById(R.id.addBt);
bReset = (Button) findViewById(R.id.resetBt);
bReset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EtCompanyName.setText("");
}
});
addData();
}
public void addData()
{
bAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isInserted = myDb.insertData(EtCompanyName.getText().toString());
if(isInserted == true)
Toast.makeText(DB_check.this, "Data Inserted", Toast.LENGTH_SHORT).show();
else
Toast.makeText(DB_check.this, "Data Not Inserted", Toast.LENGTH_SHORT).show();
}
});
}
}
DatabaseHelper.java
package com.example.shubbh.qversoft_1.Database;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Shubbh on 8/1/2017.
*/
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME="Qversoft.db";
public static final String TABLE_NAME="CompanyName";
public static final String COL_1="ID";
public static final String COL_2="Company_Name";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, Company_Name TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
onCreate(db);
}
public boolean insertData(String companyName)
{
SQLiteDatabase db= this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, companyName);
long result = db.insert(TABLE_NAME, null, contentValues);
if(result == -1)
return false;
else return true;
}
}
activity_db_check.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.shubbh.qversoft_1.DB_check">
<android.support.design.widget.TextInputLayout
android:id="@+id/companyEt"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_width="match_parent"
android:layout_height="60dp">
<EditText
android:id="@+id/companyNameEt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingLeft="7dp"
android:hint="Please Enter the Company Name"
android:textSize="20sp"
android:textColorHint="#3b52c6"
android:inputType="textAutoComplete"
android:textColor="#f00" />
</android.support.design.widget.TextInputLayout>
<!--<EditText
android:id="@+id/companyNameEt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25dp"
android:hint="Enter company name"/>-->
<LinearLayout
android:id="@+id/buttonLayout"
android:layout_marginTop="20dp"
android:layout_below="@id/companyEt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/addBt"
android:layout_below="@id/companyNameEt"
android:layout_width="140dp"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="Add"
android:textSize="25sp"
android:background="@drawable/button"/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1"/>
<Button
android:id="@+id/resetBt"
android:layout_width="140dp"
android:layout_height="wrap_content"
android:layout_below="@+id/companyEt"
android:text="Reset"
android:layout_marginRight="20dp"
android:textSize="25sp"
android:background="@drawable/button"/>
</LinearLayout>
<Spinner
android:id="@+id/searchTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="102dp"
android:textSize="25sp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_below="@+id/buttonLayout"
android:layout_centerHorizontal="true" />
</RelativeLayout>
2 ответа
Проблема в том, что база данных не заменяется при установке новой версии приложения.
Если во время разработки вы запускаете тесты или вносите изменения в базу данных, которые приводят к несогласованному состоянию (в зависимости от нового развернутого кода), вы получите неожиданные результаты, как это происходит здесь.
Способ исправить это в процессе разработки - удалить старые данные приложения (или удалить приложение и переустановить его).
Когда вы идете в производство, может случиться так, что вам придется применить изменения к структуре базы данных. Когда ваши пользователи обновят свою версию, база данных не будет переустанавливаться (у них по-прежнему будет старая версия). Вот почему класс DatabaseHelper имеет метод onUpgrade.
Передав новый номер версии классу помощника базы данных, этот метод запускается, и именно там вы должны предоставить код для обновления старой базы данных до новой, прозрачной для пользователя.
Это также отвечает:
Но возникнет ли проблема снова, если я переустановлю это приложение на свой мобильный?
Try again with replacing This.
//Careful of space.
db.execSQL("create table " + TABLE_NAME + "("+COL_1 +" integer primary key autoincrement,"+COL_2+" text)");
// And I have changed your insert method lil bit & added get Method:
public void insertData(String companyName)
{
SQLiteDatabase db= this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(COL_2, companyName);
db.insert(TABLE_NAME, null, contentValues);
}
public Cursor getData(){
SQLiteDatabase db= this.getReadableDatabase();
Cursor c=db.rawQuery("Select * from CompanyName",null);
return c;
}
// And inside on ClickListner of Add Button,
myDb.insertData(EtCompanyName.getText().toString());
Toast.makeText(MainActivity.this, "Data Inserted", Toast.LENGTH_SHORT).show();
Cursor c=myDb.getData();
if(c.moveToFirst()){
do{
String c_name=c.getString(c.getColumnIndex("Company_Name"));
Log.d("Company_Name ::: ",c_name);
}while (c.moveToNext());
}
Try To run Again.