Android 数据库插入操作:解决插入失败问题

本文将分析并解决 Android 应用中使用 SQLite 数据库插入数据时遇到的常见问题。

问题描述:

在 zscgActivity 中,使用以下代码尝试将用户数据插入名为 login_tb 的数据库表中,但始终无法成功插入。

String insertstr='insert into login_tb(stuNo,stuname,stupwd,stuClass)values(''+myno.getText().toString()+'',''+myname.getText().toString()+'',''+mypwd.getText().toString()+'','+myclass.getText().toString()+')';

问题分析:

经过仔细检查,发现代码中存在两个问题:

  1. SQL 语句错误: 插入语句中,stuClass 字段的值应该用单引号引起来,因为它是字符串类型。
  2. 表名错误: 插入语句中的表名应该是 login_tb,而不是 information

解决方案:

修改插入语句如下:

String insertstr = 'insert into login_tb(stuNo, stuname, stupwd, stuClass) values(''+myno.getText().toString()+'',''+myname.getText().toString()+'',''+mypwd.getText().toString()+'',''+myclass.getText().toString()+'')';

完整代码:

import androidx.appcompat.app.AppCompatActivity;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class zscgActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zscg);
        Datahelper datahelper = new Datahelper((this));
        EditText myno = findViewById(R.id.xuehao1);
        EditText myname = findViewById(R.id.xingm);
        EditText mypwd = findViewById(R.id.mima1);
        EditText confirmpwd = findViewById(R.id.queren);
        EditText myclass = findViewById(R.id.banji);
        EditText showtx = findViewById(R.id.jbxx);

        Button summitbt = findViewById(R.id.zhu1);
        Button querybt = findViewById(R.id.cha1);

        SQLiteDatabase writedb = datahelper.getWritableDatabase();
        SQLiteDatabase readdb = datahelper.getWritableDatabase();

        summitbt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mypwd.getText().toString().equals(confirmpwd.getText().toString())) {
                    String insertstr = 'insert into login_tb(stuNo, stuname, stupwd, stuClass) values(''+myno.getText().toString()+'',''+myname.getText().toString()+'',''+mypwd.getText().toString()+'',''+myclass.getText().toString()+'')';
                    writedb.execSQL(insertstr);
                    Toast.makeText(zscgActivity.this, '插入成功', Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(zscgActivity.this, '两次输入密码不同', Toast.LENGTH_SHORT).show();
                }
            }
        });

        querybt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Cursor cursor = readdb.rawQuery('select * from login_tb', null);
                String showdata = '';
                while (cursor.moveToNext()) {
                    String newNo = cursor.getString(0);
                    String newName = cursor.getString(1);
                    String newpwd = cursor.getString(2);
                    int newclass = cursor.getInt(3);
                    showdata = showdata + newNo + ' ' + newName + ' ' + newpwd + ' ' + String.valueOf(newclass + '\n\r');


                }
                showtx.setText(showdata.toString());
                cursor.close();
            }
        });
    }
}

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {
    private Button b1, b2, b3, b4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b1 = findViewById(R.id.dqcr);
        b2 = findViewById(R.id.fzzt);
        b3 = findViewById(R.id.sql);
        b4 = findViewById(R.id.sj);

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent instant = new Intent(MainActivity.this, dqcrActivity.class);
                startActivity(instant);
            }
        });
        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent instant = new Intent(MainActivity.this, fzztActivity.class);
                startActivity(instant);
            }
        });
        b3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent instant = new Intent(MainActivity.this, SQLActivity.class);
                startActivity(instant);
            }
        });

        b4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent instant = new Intent(MainActivity.this, zscgActivity.class);
                startActivity(instant);
            }
        });
    }
}
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class Datahelper extends SQLiteOpenHelper {
    public Datahelper(Context context) {
        super(context, 'mydat.db', null, 1);
    }

    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String tbstr = 'create table login_tb(stuNo varchar(12) primary key, stuname varchar(20),stupwd varchar(20),stuClass Integer)';
        sqLiteDatabase.execSQL(tbstr);
        String gradestr = 'create table mark_tb(stuNo varchar(12),subject varchar(20),cent real)';
        sqLiteDatabase.execSQL(gradestr);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }

}

通过以上修改,可以解决 Android 数据库插入数据失败的问题。在实际开发中,需要注意 SQL 语法和数据类型的匹配,以确保数据能够正确插入到数据库中。

Android 数据库插入操作:解决插入失败问题

原文地址: https://www.cveoy.top/t/topic/pf5x 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录