package com.example.changshi;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DB {
public static final String ID = "id";
public static final String MARCHAT_NAME = "merchat_name";
public static final String MARCHAT_PRICE = "merchat_price";
private static final String TABLE_NAME1 = "merchat_infor";
private static final String DATABASE_NAME = "information";
static int version = 1;
private DBhelper ourhelper;
private final Context ourcontext;
private SQLiteDatabase ourdatabase;
private static class DBhelper extends SQLiteOpenHelper{
public DBhelper(Context context) {
super(context, DATABASE_NAME, null, version);
// TODO 自动生成的构造函数存根
}
@Override
public void onCreate(SQLiteDatabase ourdatabase) {
// TODO 自动生成的方法存根
ourdatabase.execSQL("CREATE TABLE " + TABLE_NAME1 + " (_id INTEGER PRIMARY KEY AUTOINCREMENT,"
+ ID + " TEXT,"
+ MARCHAT_NAME + " TEXT,"
+ MARCHAT_PRICE + " TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO 自动生成的方法存根
}
}
public DB(Context c){
ourcontext = c;
}
public DB open()
{
ourhelper = new DBhelper(ourcontext);
ourdatabase = ourhelper.getWritableDatabase();
return this;
}
public void close(){
ourhelper.close();
}
public long createntry(String id2, String name, String price) {
// TODO 自动生成的方法存根
ContentValues cv = new ContentValues();
cv.put(ID, id2);
cv.put(MARCHAT_NAME, name);
cv.put(MARCHAT_PRICE, price);
return ourdatabase.insert(TABLE_NAME1, null, cv);
}
public String getData() {
// TODO 自动生成的方法存根
String[] columns = new String[]{ID, MARCHAT_NAME, MARCHAT_PRICE};
String result = "";
Cursor c = ourdatabase.query(TABLE_NAME1, columns, null, null, null, null, null);
int iid = c.getColumnIndex(ID);
int iname = c.getColumnIndex(MARCHAT_NAME);
int iprice = c.getColumnIndex(MARCHAT_PRICE);
for(c.moveToFirst(); !c.isAfterLast(); c.moveToNext())
{
result = result + c.getString(iid) + " " + c.getString(iname) + " " + c.getString(iprice) + "\n";
}
return result;
}
}
Android编程中SQLite数据库创建,打开,添加,显示,读取这样写对不对
答案:2 悬赏:60 手机版
解决时间 2021-02-02 11:12
- 提问者网友:杀手的诗
- 2021-02-02 04:12
最佳答案
- 五星知识达人网友:玩家
- 2021-02-02 04:47
可以这么写,不过建议创建和升级数据库卸载一个文件中,数据库的增删改查另写一个数据库操作稳健。
全部回答
- 1楼网友:渡鹤影
- 2021-02-02 06:02
sqlite介绍
sqlite是轻量级的、嵌入式的、关系型数据库,目前已经在iphone、android等手机系统中使用,sqlite可移植性好,很容易使用,很小,高效而且可靠。sqlite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个rdbms,但在进程内部,它却是完整的,自包含的数据库引擎。
在android中当需要操作sqlite数据库的时候需要得到一个sqliteopenhelper对象,而sqliteopenhelper是一个抽象类,用户需要继承这个类,并实现该类中的一些方法。
1、继承sqliteopenhelper之后就拥有了以下两个方法:
◆getreadabledatabase() 创建或者打开一个查询数据库
◆getwritabledatabase()创建或者打开一个可写数据库
◆他们都会返回sqlitedatabase对象,用户通过得到的sqlitedatabase对象进行后续操作
2、同时用户还可以覆盖以下回调函数,再对数据库进行操作的时候回调以下方法:
◆oncreate(sqlitedatabase):在数据库第一次创建的时候会调用这个方法,一般我们在这个方法里边创建数据库表。
◆onupgrade(sqlitedatabase,int,int):当数据库需要修改的时候,android系统会主动的调用这个方法。一般我们在这个方法里边删除数据库表,并建立新的数据库表,当然是否还需要做其他的操作,完全取决于应用程序的需求。
◆onopen(sqlitedatabase):这是当打开数据库时的回调函数,一般也不会用到。
需要注意
1、在sqliteoepnhelper的子类当中,必须有以下该构造函数
public databasehelper(context context, string name, cursorfactory factory, int version) { //必须通过super调用父类当中的构造函数 super(context, name, factory, version); }为了方便,也可以创建其它的构造函数,含二个参数或者三个参数的。
2、函数public void oncreate(sqlitedatabase db)是在调用getreadabledatabase()或者是getwritabledatabase()第一次创建数据库的时候执行,实际上是在第一次得到sqlitedatabse对象的时候,才会调用这个方法.
public void oncreate(sqlitedatabase db) { system.out.println("create a database"); //execsql函数用于执行sql语句 db.execsql("create table user(id int,name varchar(20))"); }在向数据库的表中插入记录时,需要先将数据包含在一个contentvalues中,向该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致。接着调用databasehelper的getwritabledatabase方法来获得可以写入的databasehelper对象,再向其中insert记录。注意调用databasehelper对象的insert,update或者query方法的参数的传递。
另外执行query方法后,返回的是一个cursor游标,游标最开始指向的是记录集合中第一行的上一行,因此首先需要先调用cursor.next()将游标移动到记录集合的第一行,接着再获取数据即可。
java代码
public class sqliteactivity extends activity { private button createbutton; private button insertbutton; private button updatebutton; private button updaterecordbutton; private button querybutton; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); createbutton = (button)findviewbyid(r.id.createdatabase); updatebutton = (button)findviewbyid(r.id.updatedatabase); insertbutton = (button)findviewbyid(r.id.insert); updaterecordbutton = (button)findviewbyid(r.id.update); querybutton = (button)findviewbyid(r.id.query); createbutton.setonclicklistener(new createlistener()); updatebutton.setonclicklistener(new updatelistener()); insertbutton.setonclicklistener(new insertlistener()); updaterecordbutton.setonclicklistener(new updaterecordlistener()); querybutton.setonclicklistener(new querylistener()); } class createlistener implements onclicklistener{ @override public void onclick(view v) { //创建一个databasehelper对象 databasehelper dbhelper = new databasehelper(sqliteactivity.this,"test_mars_db"); //只有调用了databasehelper对象的getreadabledatabase()方法,或者是getwritabledatabase()方法之后,才会创建,或打开一个数据库 sqlitedatabase db = dbhelper.getreadabledatabase(); } } class updatelistener implements onclicklistener{ @override public void onclick(view v) { databasehelper dbhelper = new databasehelper(sqliteactivity.this,"test_mars_db",2); sqlitedatabase db = dbhelper.getreadabledatabase(); } } class insertlistener implements onclicklistener{ @override public void onclick(view v) { //生成contentvalues对象 contentvalues values = new contentvalues(); //想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致 values.put("id", 1); values.put("name","zhangsan"); databasehelper dbhelper = new databasehelper(sqliteactivity.this,"test_mars_db",2); sqlitedatabase db = dbhelper.getwritabledatabase(); //调用insert方法,就可以将数据插入到数据库当中 db.insert("user", null, values); } } //更新操作就相当于执行sql语句当中的update语句 //update table_name set xxcol=xxx where xxxxcol=xx... class updaterecordlistener implements onclicklistener{ @override public void onclick(view arg0) { // todo auto-generated method stub //得到一个可写的sqlitedatabase对象 databasehelper dbhelper = new databasehelper(sqliteactivity.this,"test_mars_db"); sqlitedatabase db = dbhelper.getwritabledatabase(); contentvalues values = new contentvalues(); values.put("name", "zhangsanfeng"); //第一个参数是要更新的表名 //第二个参数是一个contentvaleus对象 //第三个参数是where子句 db.update("user", values, "id=?", new string[]{"1"}); } } class querylistener implements onclicklistener{ @override public void onclick(view v) { system.out.println("aaa------------------"); log.d("mydebug", "myfirstdebugmsg"); databasehelper dbhelper = new databasehelper(sqliteactivity.this,"test_mars_db"); sqlitedatabase db = dbhelper.getreadabledatabase(); cursor cursor = db.query("user", new string[]{"id","name"}, "id=?", new string[]{"1"}, null, null, null); while(cursor.movetonext()){ string name = cursor.getstring(cursor.getcolumnindex("name")); system.out.println("query--->" + name); } } } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯