程序点击添加后崩溃
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 星