我正在尝试使用SQLiteOpenHelper在我的当前应用程序中插入数据。
当我尝试运行应用程序并输入详细信息时,吐司说
未插入数据
即使我在Android设备监视器中看不到我的桌子 - >文件管理器 我在数据目录下看不到任何文件夹。
这是我的代码:
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>
答案 0 :(得分:0)
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.
答案 1 :(得分:0)
您遇到的问题是,在安装新版本的应用时,数据库不会被替换。
如果在开发期间运行测试或对数据库进行更改导致状态不一致(基于您部署的新代码),您将在此处获得意外结果。
在开发过程中纠正它的方法是删除应用程序的旧数据(或删除应用程序并重新安装)。
当您进入生产阶段时,可能会发生必须对数据库结构应用更改的情况。当您的用户更新其版本时,将不会重新安装数据库(它们仍将具有旧版本)。这就是DatabaseHelper类具有onUpgrade方法的原因。
通过将新版本号传递给数据库助手类,该方法将被执行,您必须在那里向用户透明地提供用于将旧数据库更新为新数据库的代码。
这是否也回答:
但如果我在手机中重新安装此应用程序会再次出现问题吗?