You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android SQLite多值插入失败:单值正常多值无法插入

问题解决:SQLite插入多字段失败的修复

你的代码无法插入多个值的核心问题有两个:

  • 表结构缺失字段:原创建表的语句只定义了id和name1,没有包含要插入的violate字段,导致数据库无法接收该列的数据
  • 插入语句不完整:原插入SQL只指定了name1字段,没有包含violate,同时也没有绑定第二个参数的值

以下是修正后的完整代码:

package com.example.termexam;

import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class rapp extends AppCompatActivity {

    EditText ed1r,ed2r;
    Button b1,b2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rateapp);

        ed1r = findViewById(R.id.name1);
        ed2r = findViewById(R.id.violate);

        b1 = findViewById(R.id.sbt1);
        b2 = findViewById(R.id.ratv1);

        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                Intent i = new Intent(rapp.this,vrate.class);
                startActivity(i);
            }
        });
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                insert();
            }
        });
    }

    public void insert()
    {
        try
        {
            String name1 = ed1r.getText().toString();
            String violate = ed2r.getText().toString();

            SQLiteDatabase db = openOrCreateDatabase("SliteDb", Context.MODE_PRIVATE,null);
            // 修复:添加violate字段到表结构中
            db.execSQL("CREATE TABLE IF NOT EXISTS violate(id INTEGER PRIMARY KEY AUTOINCREMENT,name1 VARCHAR,violate VARCHAR)");
            // 修复:插入语句包含两个字段和对应的占位符
            String sql = "insert into violate(name1,violate)values(?,?)";

            SQLiteStatement statement = db.compileStatement(sql);
            statement.bindString(1,name1);
            // 新增:绑定第二个参数violate的值
            statement.bindString(2, violate);
            statement.execute();
            Toast.makeText(this,"Record added", Toast.LENGTH_LONG).show();
            ed1r.setText("");
            ed2r.setText("");
            ed1r.requestFocus();
        }
        catch (Exception ex)
        {
            // 打印异常堆栈方便调试
            ex.printStackTrace();
            Toast.makeText(this,"Record Fail",Toast.LENGTH_LONG).show();
        }
    }
}

额外提示:建议在catch块中打印异常堆栈(ex.printStackTrace()),这样能在Logcat中看到具体的错误原因,方便后续调试。

内容的提问来源于stack exchange,提问作者RGBisLyf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:15:33