Android 那里';将数据插入sqlite数据库时出错!应用程序一直在崩溃
我正试图将数据插入SQLite数据库,但应用程序因某种原因崩溃,我对此一无所知。我刚刚学会了“如何创建数据库和表,如何插入数据(但似乎没有)”,请不要问我安卓工作室对崩溃的看法,因为我无法在笔记本电脑上运行应用程序,借助“安卓模拟器”或其他任何名称 下面是我的DatabaseHelper代码,它扩展了SQLiteOpenHelperAndroid 那里';将数据插入sqlite数据库时出错!应用程序一直在崩溃,android,sqlite,Android,Sqlite,我正试图将数据插入SQLite数据库,但应用程序因某种原因崩溃,我对此一无所知。我刚刚学会了“如何创建数据库和表,如何插入数据(但似乎没有)”,请不要问我安卓工作室对崩溃的看法,因为我无法在笔记本电脑上运行应用程序,借助“安卓模拟器”或其他任何名称 下面是我的DatabaseHelper代码,它扩展了SQLiteOpenHelper package com.famiddle.genius.businessmanager; import android.content.ContentValues
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中将为红色。)谢谢你的帮助!不客气,但你真的应该通过;当你知道问题是什么时,解决问题就更容易了(: