为了账号安全,请及时绑定邮箱和手机立即绑定

使用老师的代码创建数据库,第二次打开程序就崩溃是什么原理呢

2333333333333333

正在回答

2 回答

把源代码贴出来让大家看看,你这么一说谁知道什么原理。。。

0 回复 有任何疑惑可以回复我~
#1

元素滴3579866 提问者

贴在下面了,就是安装好第一次能正常打开,第二次就开始崩溃了,
2016-09-01 回复 有任何疑惑可以回复我~
package com.tong.projecte04_2_2;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

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

	public void init() {
		SQLiteDatabase db = openOrCreateDatabase("tong.db", MODE_PRIVATE, null);
		String sql = "CREATE TABLE tongtb ( _ID INTEGER PRIMARY KEY AUTOINCREMENT not null ,name CHAR(10),nickname CHAR(10))";
		db.execSQL(sql);
		ContentValues values = new ContentValues();// 键值对,类似于HASHMAP
		values.put("name", "宋江0");
		values.put("nickname", "及时雨0");
		long rowid = db.insert("tongtb", null, values);// 插入数据语句,返回值是长整型,如果不使用可以去掉
		values.clear();// 一个数据创建完成后需要清除values才能再次向数据库中添加数据

		values.put("name", "宋江1");
		values.put("nickname", "及时雨1");
		db.insert("tongtb", null, values);
		values.clear();

		values.put("name", "宋江2");
		values.put("nickname", "及时雨2");
		db.insert("tongtb", null, values);
		values.clear();

		values.put("name", "宋江3");
		values.put("nickname", "及时雨3");
		db.insert("tongtb", null, values);
		values.clear();
		values.put("name", "宋江4");
		values.put("nickname", "及时雨4");
		db.insert("tongtb", null, values);
		values.clear();

		values.put("name", "宋江5");
		values.put("nickname", "及时雨5");
		db.insert("tongtb", null, values);
		values.clear();
		values.put("name", "宋江6");
		values.put("nickname", "及时雨6");
		db.insert("tongtb", null, values);
		values.clear();

		values.put("name", "宋江7");
		values.put("nickname", "假及时雨7");
		db.insert("tongtb", null, values);
		values.clear();

		// 更新数据库
		values.put("nickname", "hanker");
		db.update("tongtb", values, "_id>?", new String[] { "4" });// 后面两个是更新条件,当_id>4时更新字段nickname全部为hanker
		db.delete("tongtb", "name like ?", new String[] { "%7%" });// 删除字段nickname中带有“7”字的人的数据
		
		// 查询数据
		Cursor c = db.query("tongtb", null, "_id>?", new String[] { "%0%" },null, null, "name");
		if (c != null) {
			String[] colums = c.getColumnNames();
			while (c.moveToNext()) {
				for (String colum : colums) {// 使用foreach遍历数组
					Log.i("info", c.getString(c.getColumnIndex(colum)));// 获取数据打印输出
					System.out.println(c.getString(c.getColumnIndex(colum)));
				}
			}
			c.close();
		}
		db.close();// 最后要清除游标对象
	}

}


0 回复 有任何疑惑可以回复我~
#1

杨智超

你改成这样试试, String sql = "CREATE TABLE if not exists tongtb ( _ID INTEGER PRIMARY KEY AUTOINCREMENT not null ,name CHAR(10),nickname CHAR(10))";意思是数据库不存在的时候创建数据库,数据库存在就不创建了。你上面的代码运行的时候第一次没问题,创建了数据库,但是再运行就会因为创建过数据库再创建而出错。不知道我说清楚了没。。。
2016-09-01 回复 有任何疑惑可以回复我~
#2

元素滴3579866 提问者 回复 杨智超

你这么说我就懂了,我以为老师说的那个if not exists是只能创建一个数据库的意思,谢谢啊
2016-09-01 回复 有任何疑惑可以回复我~
#3

qq_2雨水_04090191 回复 元素滴3579866 提问者

如果该数据库为空则创建,如果不为空,则继续使用该数据库,这样的话应该就不会崩溃了吧?
2018-01-25 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android攻城狮的第二门课(第3季)
  • 参与学习       74912    人
  • 解答问题       420    个

手势识别、数据存储和4大组件,让你牢牢掌握之前的基础知识点

进入课程

使用老师的代码创建数据库,第二次打开程序就崩溃是什么原理呢

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信