Android 那里';将数据插入sqlite数据库时出错!应用程序一直在崩溃

Android 那里';将数据插入sqlite数据库时出错!应用程序一直在崩溃,android,sqlite,Android,Sqlite,我正试图将数据插入SQLite数据库,但应用程序因某种原因崩溃,我对此一无所知。我刚刚学会了“如何创建数据库和表,如何插入数据(但似乎没有)”,请不要问我安卓工作室对崩溃的看法,因为我无法在笔记本电脑上运行应用程序,借助“安卓模拟器”或其他任何名称 下面是我的DatabaseHelper代码,它扩展了SQLiteOpenHelper package com.famiddle.genius.businessmanager; import android.content.ContentValues

我正试图将数据插入SQLite数据库,但应用程序因某种原因崩溃,我对此一无所知。我刚刚学会了“如何创建数据库和表,如何插入数据(但似乎没有)”,请不要问我安卓工作室对崩溃的看法,因为我无法在笔记本电脑上运行应用程序,借助“安卓模拟器”或其他任何名称

下面是我的DatabaseHelper代码,它扩展了SQLiteOpenHelper

package com.famiddle.genius.businessmanager;

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

public class DatabaseHelper extends SQLiteOpenHelper {

// DECLARING NAME FOR THE DATABASE AND THE TABLE
public static final String DATABASE_NAME = "imported_items";
public static final String TABLE_NAME = "stock";

// DECLARING NAME FOR THE COLUMNS
public static final String COL_1 = "ID";
public static final String COL_2 = "ITEMS_NAME";
public static final String COL_3 = "QUANTITY";
public static final String COL_4 = "COST";
public static final String COL_5 = "TOTAL_COST";

// DEFAULT CONSTRUCTOR
public DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, 1);
}

// IT CREATES TABLE
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, ITEMS_NAME TEXT, QUANTITY INTEGER, COST INTEGER, TOTAL_COST INTEGER");
}

// IT DROPS TABLE, IF IT ALREADY EXISTS
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db); //I DON'T KNOW WHY IT IS HERE, PLEASE TELL ME MORE ABOUT 
//   IT IN COMMENTS
}

// IT INSERTS DATA OR VALUES IN TABLE
public boolean insertData(String itemsName, int quantity, int cost, int totalCost) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_2, itemsName);
    contentValues.put(COL_3, quantity);
    contentValues.put(COL_4, cost);
    contentValues.put(COL_5, totalCost);
    long result = db.insert(TABLE_NAME, null, contentValues);
    //db.close();
    if (result == -1){
        return false;
    }else {return true;}
   // return result != -1;
}
}
这是stock fragment的代码,在这里调用数据库实例 使用

public class Stock extends Fragment {
DatabaseHelper dataBase;
ArrayList<String> items;

SharedPreferences prefs;
SharedPreferences.Editor editor;

 public Stock() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.stock, container, false);

    prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
    editor = prefs.edit();
    if(prefs.getBoolean("has_not_created?", true)) {
        // INITIALIZING ARRAY LIST THAT CONTAINS ITEMS NAME
        items = new ArrayList<>();
        items.add("One");
        items.add("Two");
        items.add("Three");
        items.add("Four");
        items.add("Five");
        items.add("Six");

        // INITIALIZING DATABASE
        dataBase = new DatabaseHelper(getContext());
        // CREATING A LOOP FOR INSERTING ITEMS NAMES ONE BY ONE
        for (int i = 0; i < items.size(); i++) {
             Boolean isInserted = dataBase.insertData(items.get(i), 0, 0, 0);
            Toast.makeText(getActivity(), items.get(i) + " has been inserted into database" + isInserted , Toast.LENGTH_SHORT).show();
        }
        // PUTTING 'FALSE' IN SHARED PREFERENCE OBJECT
        // THEN IT WILL NOT ALLOW THE CODE TO RUN
        editor.putBoolean("has_not_created?", false);
        editor.apply();
    }
公共类股票扩展片段{
数据库助手数据库;
数组列表项;
共享引用优先权;
SharedReferences.Editor;
公开股(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.stock,container,false);
prefs=PreferenceManager.GetDefaultSharedReferences(getActivity());
editor=prefs.edit();
if(prefs.getBoolean(“是否已创建?”,true)){
//正在初始化包含项目名称的数组列表
items=newarraylist();
项目。添加(“一”);
项目。添加(“两”);
项目。添加(“三”);
项目。添加(“四”);
项目。添加(“五”);
项目。添加(“六”);
//初始化数据库
dataBase=newdatabasehelper(getContext());
//创建用于逐个插入项目名称的循环
对于(int i=0;i

有人能告诉我我的代码出了什么问题吗?我是从Android教程中学到的。

你的错误在你的
onCreate()

您正在打开括号,但没有在任何地方关闭它。 所以应该是:

 db.execSQL("CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, ITEMS_NAME TEXT, QUANTITY INTEGER, COST INTEGER, TOTAL_COST INTEGER)");

发布你的崩溃日志。我无法在android模拟器的帮助下在我的笔记本电脑上运行应用程序。即使你在模拟器或实际设备上运行ap,你也可以在logcat视图中看到日志。如果你说的是在我的手机上运行应用程序,而它连接到运行android studio的笔记本电脑上,那么我恐怕无法以那种方式运行。我选择了android emul我想运行我的应用程序进行调试,但后来不知道发生了什么,比如说一些卸载应用程序数据的对话框等等,但它从来都不起作用。你说你的应用程序正在崩溃,当你运行应用程序并且应用程序崩溃时,它会给出一个堆栈跟踪,帮助开发人员了解崩溃的原因。你可以在Logcat中找到堆栈跟踪您可以在AndroidStudio的底部找到。请在emulator/device上重新运行应用程序,让应用程序崩溃,从logcat复制堆栈跟踪,并将其发布到此处,以帮助我们识别代码中的问题。(错误堆栈跟踪在logcat中将为红色。)谢谢你的帮助!不客气,但你真的应该通过;当你知道问题是什么时,解决问题就更容易了(: