程序点击添加后崩溃
package com.hala.view01;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.IdRes;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText name,age,id;
private RadioGroup gender;
private String genderStr="男";
private SQLiteDatabase db;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name=(EditText)findViewById(R.id.name);
age=(EditText)findViewById(R.id.age);
id=(EditText)findViewById(R.id.id);
gender=(RadioGroup)findViewById(R.id.gender);
gender.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
if(checkedId==R.id.male){
genderStr="男";
}else{
genderStr="女";
}
}
});
//第一个参数:上下文环境
//第二个参数:如果写一个数据库名称,那这个数据库在私有目录中,即该app项目包下
// 如果带有sd卡路径,那么数据库在指定路径下,如下path
// String path= Environment.getExternalStorageDirectory()+"/Emilia";
//第三个参数:游标工场
//第四个参数:版本号
SQLiteOpenHelper helper=new SQLiteOpenHelper(this,"Emilia",null,1) {
/**
* 创建数据库
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
Toast.makeText(MainActivity.this, "数据库创建", Toast.LENGTH_SHORT).show();
//创建表,如果数据库不存在,会调用onCreate创建数据库
String sql="create table test_db(_id integer primary key autoincrement,"+
"name varchar(20),"+
"age integer)";
db.execSQL(sql);
}
/**
* 数据库升级
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Toast.makeText(MainActivity.this, "数据库升级", Toast.LENGTH_SHORT).show();
}
};
//用于获取数据库对象
//1.数据库存在,则直接打开数据库
//2.数据库不存在,则调用数据库创建方法,然后打开数据库
//3.数据库存在,但版本号升高了,则调用数据库升级方法
db = helper.getReadableDatabase();
}
public void operate(View v){
switch (v.getId()){
case R.id.insert :
//添加数据操作
String nameStr=name.getText().toString();
String ageStr=age.getText().toString();
//第一种写法 注意这里的写法很奇特
String sql1="insert into test_db (name,age,gender) values ('"+nameStr+"','"+ageStr+"','"+genderStr+"')";
db.execSQL(sql1);
//第二种写法
// String sql1="insert into test_db (name,age,gender) values (?,?,?)"
//db.execSQL(sql1,new String[]{nameStr,ageStr,genderStr});
break;
case R.id.select :
break;
case R.id.delete :
break;
case R.id.update :
break;
}
}
}程序点击添加后崩溃,原因是数据库没有创建

19
收起
正在回答
2回答
你的sql语句中
String sql="create table test_db(_id integer primary key autoincrement,"+ "name varchar(20),"+ "age integer)";
String sql1="insert into test_db (name,age,gender) values ('"+nameStr+"','"+ageStr+"','"+genderStr+"')";1)表中并没有gender这个字段。2)age表中的类型是integer,你insert进去的确增加了引号。如果解决了你的疑惑,请采纳,祝学习愉快~
Android网络操作与数据存储2018版
- 参与学习 人
- 提交作业 307 份
- 解答问题 1613 个
本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星