以下是我的代码 ,这是我要做的小项目的两个类。重在数据库的操作。
package yeelone.sqlite;…………包名public class mySQLite extends ListActivity {
    
private  static int NUM=0;
private static int version=2;
private ImageButton AddList=null;

    List<HashMap<String,String>> list=new ArrayList<HashMap<String,String>>();
   
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        AddList=(ImageButton)findViewById(R.id.addlist);
       
        AddList.setOnClickListener(new addOnClickListener());
    }
    //当点击右上角的按钮时,弹出一个dialog,有一个输入框 可以输入内容。内容就是listview要显示的内容,这些内容
   是一些标题 。
    class  addOnClickListener implements Button.OnClickListener{ @Override
public void onClick(View v) {

//创建名为Diary_db的数据库
MySQLhelper dbhelper=new MySQLhelper(mySQLite.this, "Diary_db");
SQLiteDatabase db=dbhelper.getReadableDatabase();
Intent intent=new Intent();
intent.setClass(mySQLite.this,addTitledialog.class);
mySQLite.this.startActivityForResult(intent, 1);

}
    
    }
    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

switch(resultCode)
{
                //当弹出的dialog返回时,处理返回的输入的数据 
case 1:
//Storage是我自己写的一个类,用于保存listview 的ID信息,还有内容变量
String sid=String.valueOf(Storage.getId());
String str=Storage.getTitle().toString();
String cont=Storage.getContent().toString();
System.out.println("id:"+ sid+"       title:"+ str+"   content:"+cont);
//设置listview中的内容,内容是标题。
                        setTitle(str);
MySQLhelper dbhelper=new MySQLhelper(mySQLite.this, "Diary_db",2);
SQLiteDatabase db=dbhelper.getWritableDatabase();
System.out.println("first create dbhelper");
ContentValues values=new ContentValues();
values.put("_id", sid);
values.put("title", str);
values.put("content", cont);
                         //将数据保存进Diary_db数据库Diary表中
db.insert("Diary", null, values);


break;
case 2:
update();
break;

}
}
    
    private void setTitle(String str){
     HashMap<String, String> map=new HashMap<String, String>();
    
     map.put("title",str);
     list.add(map);
     SimpleAdapter adapter=new SimpleAdapter(this,list,R.layout.list_item,new String[]{"title"},new int[]{R.id.list_item});
     setListAdapter(adapter);
    }
    
    …………………………………………
    
    }
    
}package yeelone.sqlopenhelper;import ……………………public class MySQLhelper extends SQLiteOpenHelper {

private static final int VERSION=1;
public MySQLhelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);

}
public MySQLhelper(Context context, String name) {
this(context, name,VERSION);


}
public MySQLhelper(Context context, String name,int version) {
this(context, name, null, version);


}

@Override
public void onCreate(SQLiteDatabase db) {

db.execSQL("create table Diary(_id int primary key  ,title varchar(255) not null, content text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("drop table Diary");
onCreate(db);

}
}
我意想中效果应该listview中的内容是可以保存在sqlite中的,所以,我创建一个数据库。
本来应该是点击一次按钮,可以往 数据库里insert一条记录,但是我发现,表里总是只有我最后输入的记录,其它都不见,似乎总是被后一条记录覆盖前一条记录。我不知道为什么会这样?
另外,我用adb shell进入到/data/data/yeelone.sqlite中,用sqlite3进入数据库
#.schame
却发现没有任何显示,
但是我用eclipse的FILE BROWSER,将数据库导出来,用GUI软件来查看数据库内容,却发现在Diary这张表。
我现在很困惑,从昨晚就一直在搜索如何解决,但是没有办法。希望大家帮帮忙。

解决方案 »

  1.   

    为什么MySQLhelper(mySQLite.this, "Diary_db",2)要换版本啊~
      

  2.   

    MySQLhelper dbhelper=new MySQLhelper(mySQLite.this, "Diary_db",2);系统将回调函数:
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            
            db.execSQL("drop table Diary");
            onCreate(db);
            
        }
    而在这个函数里,你把以前的表给删除了,再重新创建的!所以数据只有当前你插入的一条数据啦!
      

  3.   


    正解 将2改为1 就行了
    或者你可以写个只有一个参数Context的构造函数MySQLhelper(Context ctx)
    在里面直接写 super(context, DATABASE_NAME, null, DATABASE_VERSION);
    DATABASE_NAME和DATABASE_VERSION 是常量
    ps 可以根据自己需要多写几个构造函数 这样用起来会很方便的