永发信息网

Android编程中SQLite数据库创建,打开,添加,显示,读取这样写对不对

答案:2  悬赏:60  手机版
解决时间 2021-02-02 11:12
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;
}

}
最佳答案
可以这么写,不过建议创建和升级数据库卸载一个文件中,数据库的增删改查另写一个数据库操作稳健。
全部回答
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); } } } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
碧斯美疗馆地址在哪,我要去那里办事
交通银行信用卡附带的借记卡怎么激活
叶绿体线粒体的形态及分布与功能有什么关系
我妈妈摔伤了,去医院检查骨头没事,拿了一个
怎么清除微信群发的消息
以前EDG的AD是那美,中单是谁
ViVO的手用苹果耳机怎么设置?
【xueyuanyuan】zhidao xue yuan
东方美容美发(东升庙店)地址有知道的么?有点
招商银行怎么查询卡号
水玲珑女子美妆店地址在什么地方,想过去办事
坦克世界,如果花钱买坦克买那一个坦克最好
2006年《中国500最具价值品牌》排行榜,海尔(
人民警察执意要进入民宅,须出具“检查证明文
海棠美容院地址在什么地方,想过去办事
推荐资讯
丈夫涉嫌职务侵占,妻子账户会冻结吗
求黑帮打架的游戏
薇薇美甲怎么去啊,我要去那办事
在冒险岛中,有"我的好朋友小汪汪"和"我的朋友
河南郭东亮门业有限责任公司地址有知道的么?
罗岗派出所地址在什么地方,想过去办事
长虹PF21366图像左右枕形失真,求解?
谁知道溢量是什么意思?
哪种射线电离作用最强
海澄村地址有知道的么?有点事想过去
磨沟街/长安路(路口)我想知道这个在什么地方
救灭的意思是什么啊?知道的请说下!
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?