一个Android数据存储的例子,一直有问题,求大神指点

huaxiaohua3 2017-03-08 08:11:42
每次运行的时候,都会出错退出,不知道问题在哪里,我把代码贴出来了,希望指点一下!


package com.sql;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class SqlActivity extends Activity {
OpenHelper myHelper;
TextView tv;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.tv);
//创建MySQLiteOpenHelper辅助类对象
myHelper = new OpenHelper(null);
//向数据库中插入和更新数据
insertAndUpdateData(myHelper);
//查询数据
String result = queryData(myHelper);
tv.setTextColor(Color.RED);
tv.setTextSize(20.0f);
tv.setText("名字\t等级\n"+result);

}

//向数据库中插入和更新数据
public void insertAndUpdateData(OpenHelper myHelper){
//SQLiteDatabase db = myHelper.getWritableDatabase();
Operating operating=new Operating(this);
account acc=new account("wh", 20, 200);
operating.Add(acc);

db.close();*/
}

//从数据库中查询数据
public String queryData(OpenHelper myHelper){
String result = "";
//获得数据库对象
SQLiteDatabase db = myHelper.getReadableDatabase();
//查询表中的数据
Cursor cursor = db.query("hero_info", null, null, null, null, null, "id asc");
//获取name列的索引
int nameIndex = cursor.getColumnIndex("name");
//获取level列的索引
int levelIndex = cursor.getColumnIndex("level");
for (cursor.moveToFirst();!(cursor.isAfterLast());cursor.moveToNext()) {
result = result + cursor.getString(nameIndex)+ "\t\t";
result = result + cursor.getInt(levelIndex)+" \n";
}
cursor.close();//关闭结果集
db.close();//关闭数据库对象
return result;
}

@Override
protected void onDestroy() {
SQLiteDatabase db = myHelper.getWritableDatabase();//获取数据库对象
//删除hero_info表中所有的数据 传入1 表示删除所有行
db.delete("hero_info", "1", null);
super.onDestroy();
}
}



package com.sql;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class OpenHelper extends SQLiteOpenHelper {

public OpenHelper(Context context) {
super(context, "account.db", null, 1);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table if not exists hero_info("
+ "id integer primary key,"
+ "name varchar,"
+ "level integer)");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub

}

}




数据库的操作类
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.location.Address;

public class Operating {

private OpenHelper helper;
private SQLiteDatabase db;
public Operating(Context context)
{
helper = new OpenHelper(context);
}
public void Add(account acc)
{

db.execSQL("insert into t_student (sid,name,age) values (?,?,?)", new Object[]
{ acc.id,acc.name,acc.level });
}

}


package com.sql;

import android.R.integer;
import android.R.string;

public class account {
public int id;
public String name;
public int level;
public account() {
}

public account (String name, int id, int level) {
this.name = name;
this.id = id;
this.level = level;
}
}
...全文
145 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fei得更高 2019-03-12
  • 打赏
  • 举报
回复
Logcat报什么呢?
chinahbbt 2017-03-09
  • 打赏
  • 举报
回复
日志在哪里
头发还没秃a 2017-03-09
  • 打赏
  • 举报
回复
把Log贴出来
wozuihaole 2017-03-09
  • 打赏
  • 举报
回复
你这代码错误太多啦……你看看你创建的表名字和你插入的表名字一样吗?还有就是你插入时候使用的db没有赋值,MainActivity里的 myHelper = new OpenHelper(null);这句话是几个意思?给个null,你这就创建数据库失败了,应该传this。还有你既然写了operating这个帮助类,那你就应该把所有增删改查都写这个类里吧,你这逻辑要重新改改啊,还有就是SqliteOpenHelper提供了insert方法,为什么还要自己写sql语句啊。我把我帮你改的代码,放下边,你试试把: package com.example.db; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends Activity { Operating operating; TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)findViewById(R.id.tv); //向数据库中插入和更新数据 insertAndUpdateData(); //查询数据 String result = operating.queryData(); tv.setTextColor(Color.RED); tv.setTextSize(20.0f); tv.setText("名字\t等级\n"+result); } //向数据库中插入和更新数据 public void insertAndUpdateData(){ //SQLiteDatabase db = myHelper.getWritableDatabase(); operating=new Operating(this); account acc=new account("wh", 20, 200); operating.Add(acc); // db.close();*/ } @Override protected void onDestroy() { operating.delete(); super.onDestroy(); } } package com.example.db; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; /** * Created by pactera on 2017/3/9. */ public class Operating { private OpenHelper helper; public Operating(Context context) { helper = new OpenHelper(context); } public void Add(account acc) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("insert into hero_info (id,name,level) values (?,?,?)", new Object[] { acc.id,acc.name,acc.level }); db.close(); } //从数据库中查询数据 public String queryData(){ String result = ""; //获得数据库对象 SQLiteDatabase db = helper.getReadableDatabase(); //查询表中的数据 Cursor cursor = db.query("hero_info", null, null, null, null, null, "id asc"); //获取name列的索引 int nameIndex = cursor.getColumnIndex("name"); //获取level列的索引 int levelIndex = cursor.getColumnIndex("level"); for (cursor.moveToFirst();!(cursor.isAfterLast());cursor.moveToNext()) { result = result + cursor.getString(nameIndex)+ "\t\t"; result = result + cursor.getInt(levelIndex)+" \n"; } cursor.close();//关闭结果集 db.close();//关闭数据库对象 return result; } public void delete() { SQLiteDatabase db = helper.getWritableDatabase(); //删除hero_info表中所有的数据 传入1 表示删除所有行 db.delete("hero_info", "1", null); db.close(); } } package com.example.db; /** * Created by pactera on 2017/3/9. */ public class account { public int id; public String name; public int level; public account() { } public account (String name, int id, int level) { this.name = name; this.id = id; this.level = level; } } package com.example.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by pactera on 2017/3/9. */ public class OpenHelper extends SQLiteOpenHelper { public OpenHelper(Context context) { super(context, "account.db", null, 1); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table if not exists hero_info(" + "id integer primary key," + "name varchar," + "level integer)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } }
YXTS122 2017-03-08
  • 打赏
  • 举报
回复
把报错信息贴出来。。。。。。。。。。。

80,359

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧