【问题标题】:Android studio how do I properly Insert listview items to sqlite databaseAndroid Studio如何正确地将listview项目插入sqlite数据库
【发布时间】:2018-10-15 15:50:45
【问题描述】:

我试图将我的 listview 项目存储到我的 sql 数据库中,这段代码不起作用:它只是一直运行,但没有在数据库中存储任何内容。对如何将列表视图插入 sql 数据库有任何帮助吗?

这是我尝试插入列表视图项的代码部分

for(int i=0;i<=myAdapter.myItems.size();i++){
    String name=tabl.getText().toString();
    String answer=myAdapter.getItem(i).toString();
    mHelper.insertData(name,answer);
    //mHelper is the variable name for my DBhandler class
}

这是我的 DBhandler 类

public class DBHandler extends SQLiteOpenHelper {
    public static final String DB_NAME = "quiz.db";
    public static final int DB_VERSION = 2;
    public static final String TABLE = "user";
    public static final String COL_TASK_TITLE = "title";
    public static final String ID = "id";
    public static final String COL_ANS="answer";
    public DBHandler(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        SQLiteDatabase db=getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createtable="CREATE TABLE " + TABLE + " ( "+ ID +" INTEGER PRIMARY KEY AUTOINCREMENT, "+ COL_TASK_TITLE+ "TEXT NOT NULL,"+ COL_ANS+"TEXT NOT NULL);";
        db.execSQL(createtable);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE);
        onCreate(db);
    }
    public boolean insertData(String name,String quiz){
        SQLiteDatabase db=this.getWritableDatabase();
        ContentValues contex=new ContentValues();
        contex.put(COL_TASK_TITLE,quiz);
        contex.put(COL_ANS,name);
        long result=db.insert(TABLE,null,contex);
        if(result==-1)
        {
            return false;
        }else{
            return true;
        }
    }
}

【问题讨论】:

    标签: android sqlite android-studio listview


    【解决方案1】:
    public class DBHandler extends SQLiteOpenHelper {
        public static final String DB_NAME = "quiz.db";
        public static final int DB_VERSION = 1;
        public static final String TABLE = "user";
        public static final String COL_TASK_TITLE = "title";
        public static final String ID = "id";
        public static final String COL_ANS = "answer";
    
        public DBHandler(Context context) {
            super(context, DB_NAME, null, DB_VERSION);
    
        }
    
        @Override
        public void onCreate(SQLiteDatabase db) {
            String createtable="CREATE TABLE " + TABLE + " ( "+ ID +" INTEGER PRIMARY KEY AUTOINCREMENT, "+ COL_TASK_TITLE+ " TEXT NOT NULL,"+ COL_ANS+" TEXT NOT NULL)";
            db.execSQL(createtable);
            Log.i("Create",createtable + " Created");
        }
    
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS " + TABLE);
            onCreate(db);
        }
    
        public boolean insertData(String name, String quiz) {
            SQLiteDatabase db = this.getWritableDatabase();
            ContentValues contex = new ContentValues();
            contex.put(COL_TASK_TITLE, quiz);
            contex.put(COL_ANS, name);
            long result = db.insert(TABLE, null, contex);
            Log.i("Inserted ", "Done");
            if (result == -1) {
                return false;
            } else {
                return true;
            }
        }
    
    
    }
    

    希望这对您有所帮助,您只需避免在创建表 SQL 语句中连接。只需卸载之前的应用即可。

    【讨论】:

    • 如果对您有帮助,请点击答案左侧的勾号,接受答案。谢谢。
    【解决方案2】:
        String createtable="CREATE TABLE " + TABLE + " ( "+ ID +" INTEGER PRIMARY KEY AUTOINCREMENT, "+ COL_TASK_TITLE+ " TEXT NOT NULL,"+ COL_ANS+" TEXT NOT NULL)";
    

    在 TEXT NOT NULL 之前保留一些空格,它将列名和数据类型连接起来。

    【讨论】:

    • 我试过了,但它只是崩溃了,表中仍然没有数据
    • 检查 Logcat 输出,在您插入数据时它没有显示列名。我尝试了你的代码它的工作,我将添加完整的代码
    猜你喜欢
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多