Android 数据库插入操作:解决插入失败问题
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()+')';
问题分析:
经过仔细检查,发现代码中存在两个问题:
- SQL 语句错误: 插入语句中,
stuClass字段的值应该用单引号引起来,因为它是字符串类型。 - 表名错误: 插入语句中的表名应该是
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 语法和数据类型的匹配,以确保数据能够正确插入到数据库中。
原文地址: https://www.cveoy.top/t/topic/pf5x 著作权归作者所有。请勿转载和采集!