软录 · 2023年3月3日

安卓sqlitecreate|安卓代码怎么创建数据库

❶ Android创建sqlite数据库,以创建表项目就崩溃这是为毛

是你创建表的代码有问题,我运行了你的代码,控制台会出现这个bug,可以定位到具体是哪里出了问题,显示少了一个“)”

建议下次直接贴错误,这样会有更多的人帮忙解决,代码多的话,很少有人高兴帮你去弄一遍看问题在哪的,小小的建议

❷ 如何使用SQLite,Android上SQLite的最佳实践

SQLite3是目前最新的SQLite版本。可以从网站上下载SQLite3的源代码(本书使用的版本是sqlite-3.6.12.tar.gz)。解压缩后进入sqlite-3.6.12的根目录,首先命令“./configure”生成Makefile文件,接着运行命令“make”对源代码进行编译,最后运行命令“make install”安装SQLite3。安装完毕后,可以运行命令sqlite3查看SQLite3是否能正常运行,如下所示:[[email protected] ~]# sqlite3SQLite version 3.6.12Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite>可以看到,SQLite3启动后会停留在提示符sqlite>处,等待用户输入SQL语句。在使用SQLite3前需要先了解下SQLite3支持的数据类型。SQLite3支持的基本数据类型主要有以下几类:NULLNUMERICINTEGERREALTEXTSQLite3会自动把其他数据类型转换成以上5类基本数据类型,转换规则如下所示:char、clob、test、varchar—> TEXTinteger—>INTEGERreal、double、float—> REALblob—>NULL其余数据类型都转变成NUMERIC下面通过一个实例来演示SQLite3的使用方法。新建一个数据库新建数据库test.db(使用.db后缀是为了标识数据库文件)。在test.db中新建一个表test_table,该表具有name,、sex、age三列。SQLite3的具体操作如下所示:[[email protected] home]# sqlite3 test.dbSQLite version 3.6.12Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite> create table test_table(name, sex, age);如果数据库test.db已经存在,则命令“sqlite3 test.db”会在当前目录下打开test.db。如果数据库test.db不存在,则命令“sqlite3 test.db”会在当前目录下新建数据库test.db。为了提高效率,SQLite3并不会马上创建test.db,而是等到第一个表创建完成后才会在物理上创建数据库。由于SQLite3能根据插入数据的实际类型动态改变列的类型,所以在create语句中并不要求给出列的类型。创建索引为了加快表的查询速度,往往在主键上添加索引。如下所示的是在name列上添加索引的过程。sqlite> create index test_index on test_table(name);操作数据如下所示的是在test_table中进行数据的插入、更新、删除操作:sqlite> insert into test_table values ('xiaoming', 'male', 20);sqlite> insert into test_table values ('xiaohong', 'female', 18);sqlite> select * from test_table;xiaoming|male|20xiaohong|female|18sqlite> update test_table set age=19 where name = 'xiaohong';sqlite> select * from test_table;xiaoming|male|20xiaohong|female|19sqlite> delete from test_table where name = 'xiaoming';sqlite> select * from test_table;xiaohong|female|19批量操作数据库如下所示的是在test_table中连续插入两条记录:sqlite> begin;sqlite> insert into test_table values ('xiaoxue', 'female', 18);sqlite> insert into test_table values ('xiaoliu', 'male', 20);sqlite> commit;sqlite> select * from test_table;xiaohong|female|19xiaoxue|male|18xiaoliu|male|20运行命令commit后,才会把插入的数据写入数据库中。数据库的导入导出如下所示的是把test.db导出到sql文件中:[[email protected] home]# sqlite3 test.db ".mp" > test.sql;test.sql文件的内容如下所示:BEGIN TRANSACTION;CREATE TABLE test_table(name, sex, age);INSERT INTO "test_table" VALUES('xiaohong','female',19);CREATE INDEX test_index on test_table(name);COMMIT;如下所示的是导入test.sql文件(导入前删除原有的test.db):[[email protected] home]# sqlite3 test.db < test.sql;通过对test.sql文件的导入导出,可以实现数据库文件的备份。11.2.2 SQLite3的C接口以上介绍的是SQLite3数据库的命令操作方式。在实际使用中,一般都是应用程序需要对数据库进行访问。为此,SQLite3提供了各种编程语言的使用接口(本书介绍C语言接口)。SQLite3具有几十个C接口,下面介绍一些常用的C接口。sqlite_open作用:打开SQLite3数据库原型:int sqlite3_open(const char *dbname, sqlite3 **db)参数:dbname:数据库的名称;db:数据库的句柄;sqlite_colse作用:关闭SQLite3数据库原型:int sqlite_close(sqlite3 *db)例如:test.c:#include <stdio.h>#include <sqlite3.h>static sqlite3 *db=NULL;int main(){int rc;rc= sqlite3_open("test.db", &db);if(rc){printf("can't open database!\n");}else{printf("open database success!\n");}sqlite3_close(db);return 0;}运行命令“gcc –o test test.c –lsqlite3”进行编译,运行test的结果如下所示:[[email protected] home]# open database success!sqlite_exec作用:执行SQL语句原型:int sqlite3_exec(sqlite3 *db, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg)参数:db:数据库;sql:SQL语句;callback:回滚;errmsg:错误信息例如:test.c:#include <stdio.h>#include <sqlite3.h>static sqlite3 *db=NULL;static char *errmsg=NULL;int main(){int rc;rc = sqlite3_open("test.db", &db);rc = sqlite3_exec(db,"insert into test_table values('bao', 'male', 24)", 0, 0, &errmsg);if(rc){printf("exec fail!\n");}else{printf("exec success!\n");}sqlite3_close(db);return 0;}编译完成后,运行test的结果如下所示:[[email protected] home]# ./testexec success![[email protected] home]# sqlite3 test.dbSQLite version 3.6.11Enter ".help" for instructionsEnter SQL statements terminated with a ";"sqlite> select * from test_table;bao|male|24sqlite3_get_table作用:执行SQL查询原型:int sqlite3_get_table(sqlite3 *db, const char *zSql, char ***pazResult, int *pnRow, int *pnColumn, char **pzErrmsg)参数:db:数据库;zSql:SQL语句;pazResult:查询结果集;pnRow:结果集的行数;pnColumn:结果集的列数;errmsg:错误信息;sqlite3_free_table作用:注销结果集原型:void sqlite3_free_table(char **result)参数:result:结果集;例如:test.c:#include <stdio.h>#include <sqlite3.h>static sqlite3 *db=NULL;static char **Result=NULL;static char *errmsg=NULL;int main(){int rc, i, j;int nrow;int ncolumn;rc= sqlite3_open("test.db", &db);rc= sqlite3_get_table(db, "select * from test_table", &Result, &nrow, &ncolumn,&errmsg);if(rc){printf("query fail!\n");}else{printf("query success!\n");for(i = 1; i <= nrow; i++){for(j = 0; j < ncolumn; j++){printf("%s | ", Result[i * ncolumn + j]);}printf("\n");}}sqlite3_free_table(Result);sqlite3_close(db);return 0;}编译完成后,运行test的结果如下所示:[[email protected] home]# ./testquery success!xiaohong | female | 19 |xiaoxue | female | 18 |xiaoliu | male | 20 |bao | male | 24 |sqlite3_prepare作用:把SQL语句编译成字节码,由后面的执行函数去执行原型:int sqlite3_prepare(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **stmt, const char **pTail)参数:db:数据库;zSql:SQL语句;nByte:SQL语句的最大字节数;stmt:Statement句柄;pTail:SQL语句无用部分的指针;sqlite3_step作用:步步执行SQL语句字节码原型:int sqlite3_step (sqlite3_stmt *)例如:test.c:#include <stdio.h>#include <sqlite3.h>static sqlite3 *db=NULL;static sqlite3_stmt *stmt=NULL;int main(){int rc, i, j;int ncolumn;rc= sqlite3_open("test.db", &db);rc=sqlite3_prepare(db,"select * from test_table",-1,&stmt,0);if(rc){printf("query fail!\n");}else{printf("query success!\n");rc=sqlite3_step(stmt);ncolumn=sqlite3_column_count(stmt);while(rc==SQLITE_ROW){for(i=0; i<2; i++){printf("%s | ", sqlite3_column_text(stmt,i));}printf("\n");rc=sqlite3_step(stmt);}}sqlite3_finalize(stmt);sqlite3_close(db);return 0;}编译完成后,运行test的结果如下所示:[[email protected] home]# ./testquery success!xiaohong | female | 19 |xiaoxue | female | 18 |xiaoliu | male | 20 |bao | male | 24 |在程序中访问SQLite3数据库时,要注意C API的接口定义和数据类型是否正确,否则会得到错误的访问结果。

❸ 安卓sqlite需要有什么基础

一.基础知识: 1.SQLite的数据类型: NULL:空值。 INTEGER:带符号的整型,具体取决有存入数字的范围大小。 REAL:浮点数字,存储为8-byte IEEE浮点数。 TEXT:字符串文本。 BLOB:二进制对象。 smallint 16位元的整数。 interger 32位元的整数。 decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。 float 32位元的实数。 double 64位元的实数。 char(n) n 长度的字串,n不能超过 254。 varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。 graphic(n) 和 char(n) 一样,不过其单位是两个字元 double-bytes, n不能超过127。这个形态是为了支援两个字元长度的字体,例如中文字。 vargraphic(n) 可变长度且其最大长度为 n 的双字元字串,n不能超过 2000 date 包含了 年份、月份、日期。 time 包含了 小时、分钟、秒。 timestamp 包含了 年、月、日、时、分、秒、千分之一秒。 datetime 包含日期时间格式,必须写成'2010-08-05'不能写为'2010-8-5',否则在读取时会产生错误! 2.SQLite的基本操作: ①SQLiteOpenHelper 抽象类:通过从此类继承实现用户类,来提供数据库打开、关闭等操作函数。 [java] // 创建数据库 public void onCreate(SQLiteDatabase db) // 更新数据库 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // 打开数据库 public void onOpen(SQLiteDatabase db) // 得到一个可读SQLiteDatabase对象 public synchronized SQLiteDatabase getReadableDatabase() // 得到一个可写SQLiteDatabase对象 public synchronized SQLiteDatabase getWriteableDatabase() // 创建数据库 public void onCreate(SQLiteDatabase db) // 更新数据库 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // 打开数据库 public void onOpen(SQLiteDatabase db) // 得到一个可读SQLiteDatabase对象 public synchronized SQLiteDatabase getReadableDatabase() // 得到一个可写SQLiteDatabase对象 public synchronized SQLiteDatabase getWriteableDatabase() ②SQLiteDatabase 数据库访问类:执行对数据库的插入记录、查询记录等操作。 [java] execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法可以执行select语句。 query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。 columns:要查询出来的列名。相当于select语句select关键字后面的部分。 selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?” selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。 groupBy:相当于select语句group by关键字后面的部分 having:相当于select语句having关键字后面的部分 orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc; limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。 //还有两个,网上貌似都用的比较少,而我们这个例子中采用的是这些: public long insert( String table, // 待插入的表名 String nullColumnHack, // 通常设置为null ContentValues values // 待插入的数据 ) public int update( String table, // 待更新的表名 ContentValues values, // 待更新的内容 String whereClause, // 选择通过哪个字段来更新 String [] whereArgs // 为whereClause字段要查询的值 ) execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法可以执行select语句。 query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。 columns:要查询出来的列名。相当于select语句select关键字后面的部分。 selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?” selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。 groupBy:相当于select语句group by关键字后面的部分 having:相当于select语句having关键字后面的部分 orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc; limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。 //还有两个,网上貌似都用的比较少,而我们这个例子中采用的是这些: public long insert( String table, // 待插入的表名 String nullColumnHack, // 通常设置为null ContentValues values // 待插入的数据 ) public int update( String table, // 待更新的表名 ContentValues values, // 待更新的内容 String whereClause, // 选择通过哪个字段来更新 String [] whereArgs // 为whereClause字段要查询的值 ) ③下面为网上常用的访问数据库的一般流程: [java] public void onClick(View v) { DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this); SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4}); db.close(); }; public void onClick(View v) { DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this); SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4}); db.close(); }; 二.编程实现: 1. 界面编辑(reslayoutmain.xml): [java] android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:text="创建数据库" android:id="@+id/ButtonCreate" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="增加数据" android:id="@+id/ButtonInsert" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="更新数据" android:id="@+id/ButtonUpdate" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="查询数据" android:id="@+id/ButtonQuery" android:layout_width="fill_parent" android:layout_height="wrap_content"> 定义了一个垂直方向上的线性布局,及各操作的按钮,水平方向充满父窗口,垂直方向与内容等高。 界面布局效果如下: 2. 代码编辑(srcwyfzclMyActivity.java): [java] package wyf.zcl; import wyf.zcl.sqlitedb.SqLiteDBHelper; //引入相关包 import android.app.Activity; //引入相关包 import android.content.ContentValues; //引入相关包 import android.database.Cursor; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.os.Bundle; //引入相关包 import android.view.View; //引入相关包 import android.widget.Button; //引入相关包 import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ private Button createButton; //创建数据库按钮 private Button insertBut; //增加数据库记录按钮 private Button updateBut; //更新数据库记录按钮 private Button queryBut; //查询数据库记录按钮 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton=(Button)findViewById(R.id.ButtonCreate); //实例化创建数据库按钮 insertBut=(Button)findViewById(R.id.ButtonInsert); //实例化插入数据库按钮 updateBut=(Button)findViewById(R.id.ButtonUpdate); //实例化更新数据库按钮 queryBut=(Button)findViewById(R.id.ButtonQuery); //实例化查询数据库按钮 createButton.setOnClickListener(new View.OnClickListener() {//创建数据库时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 System.out.println("create or open database success!"); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Toast.makeText(MyActivity.this, "创建或打开数据库", Toast.LENGTH_SHORT).show(); }}); insertBut.setOnClickListener(new View.OnClickListener() {//增加数据库记录时调用 @Override public void onClick(View v) { ContentValues cv=new ContentValues(); //得到ContentValues对象 cv.put("uid", 1); //放入键值对,键要与列名一致,值要与列的数据类型一致 cv.put("uname", "zcl"); //放入键值对,键要与列名一致,值要与列的数据类型一致 SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "插入记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 sld.insert("sqlitetest", null, cv);//增加数据库记录 System.out.println("success insert a new content!"); }}); updateBut.setOnClickListener(new View.OnClickListener() { //更新数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1); //创建数据库 SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 ContentValues cv = new ContentValues(); //得到ContentValues对象 Toast.makeText(MyActivity.this, "更新记录", Toast.LENGTH_SHORT).show(); cv.put("uname", "zcl_update"); sld.update("sqlitetest", cv, "uid=?", new String[]{"1"});//更新数据库记录 System.out.println("success updata the content!"); }}); queryBut.setOnClickListener(new View.OnClickListener() { //查询数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "查询记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Cursor cursor=sld.query("sqlitetest", new String[]{"uid","uname"}, "uid=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ //打印输出 String name=cursor.getString(cursor.getColumnIndex("uname")); System.out.println("query result:"+name); }}}); } } package wyf.zcl; import wyf.zcl.sqlitedb.SqLiteDBHelper; //引入相关包 import android.app.Activity; //引入相关包 import android.content.ContentValues; //引入相关包 import android.database.Cursor; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.os.Bundle; //引入相关包 import android.view.View; //引入相关包 import android.widget.Button; //引入相关包 import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ private Button createButton; //创建数据库按钮 private Button insertBut; //增加数据库记录按钮 private Button updateBut; //更新数据库记录按钮 private Button queryBut; //查询数据库记录按钮 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton=(Button)findViewById(R.id.ButtonCreate); //实例化创建数据库按钮 insertBut=(Button)findViewById(R.id.ButtonInsert); //实例化插入数据库按钮 updateBut=(Button)findViewById(R.id.ButtonUpdate); //实例化更新数据库按钮 queryBut=(Button)findViewById(R.id.ButtonQuery); //实例化查询数据库按钮 createButton.setOnClickListener(new View.OnClickListener() {//创建数据库时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 System.out.println("create or open database success!"); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Toast.makeText(MyActivity.this, "创建或打开数据库", Toast.LENGTH_SHORT).show(); }}); insertBut.setOnClickListener(new View.OnClickListener() {//增加数据库记录时调用 @Override public void onClick(View v) { ContentValues cv=new ContentValues(); //得到ContentValues对象 cv.put("uid", 1); //放入键值对,键要与列名一致,值要与列的数据类型一致 cv.put("uname", "zcl"); //放入键值对,键要与列名一致,值要与列的数据类型一致 SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "插入记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 sld.insert("sqlitetest", null, cv);//增加数据库记录 System.out.println("success insert a new content!"); }}); updateBut.setOnClickListener(new View.OnClickListener() { //更新数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1); //创建数据库 SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 ContentValues cv = new ContentValues(); //得到ContentValues对象 Toast.makeText(MyActivity.this, "更新记录", Toast.LENGTH_SHORT).show(); cv.put("uname", "zcl_update"); sld.update("sqlitetest", cv, "uid=?", new String[]{"1"});//更新数据库记录 System.out.println("success updata the content!"); }}); queryBut.setOnClickListener(new View.OnClickListener() { //查询数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "查询记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Cursor cursor=sld.query("sqlitetest", new String[]{"uid","uname"}, "uid=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ //打印输出 String name=cursor.getString(cursor.getColumnIndex("uname")); System.out.println("query result:"+name); }}}); } } (.java): [java] package wyf.zcl.sqlitedb; import android.content.Context; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.database.sqlite.SQLiteOpenHelper; //引入相关包 import android.database.sqlite.SQLiteDatabase.CursorFactory;//引入相关包 public class SqLiteDBHelper extends SQLiteOpenHelper{ public SqLiteDBHelper(Context context, String name, CursorFactory factory, int version) {//继承SQLiteOpenHelper的类,必须有该构造函数 super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //创建数据库时调用,此方法是在调用了getReadableDatabase()或getWritableDatabase()后才调用 db.execSQL("create table sqlitetest(uid long,uname varchar(25))"); System.out.println("already create a database:sqlitetest."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //升级数据库时掉用 } } package wyf.zcl.sqlitedb; import android.content.Context; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.database.sqlite.SQLiteOpenHelper; //引入相关包 import android.database.sqlite.SQLiteDatabase.CursorFactory;//引入相关包 public class SqLiteDBHelper extends SQLiteOpenHelper{ public SqLiteDBHelper(Context context, String name, CursorFactory factory, int version) {//继承SQLiteOpenHelper的类,必须有该构造函数 super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //创建数据库时调用,此方法是在调用了getReadableDatabase()或getWritableDatabase()后才调用 db.execSQL("create table sqlitetest(uid long,uname varchar(25))"); System.out.println("already create a database:sqlitetest."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //升级数据库时掉用 } }

❹ 安卓代码怎么创建数据库

1.创建数据库:>sqlite3.exemySqlite.db2.创建表:sqlite>createtableperson(_idintegerprimarykey,namevarchar(50),ageinteger,sexchar(2));3.插入数据:版sqlite>insertintopersonvalues(1,'刘备',38,'男');sqlite>insertintopersonvalues(2,'关羽',42,'男');sqlite>insertintopersonvalues(3,'大乔权',20,'女');4.备份:sqlite>.backupD:/mydb.db5.恢复数据:sqlite>.restoremydb.db6.查看表:sqlite>.tables

❺ android怎么连接sqlite数据库

Android是有自带的类库的:SQLiteOpenHelper,使用的时候继承这个类,然后写逻辑就可以,一般使用单例模式:

(Contextcontext){if(helper==null){helper=newDBHelper(context);}returnhelper;}privateDBHelper(Contextcontext){super(context,"你自己的数据库名",null,数据库版本);}

使用的时候也很简单,下面是一个删除操作:

(Stringpackname){SQLiteDatabasedb=getWritableDatabase();try{db.beginTransaction();db.delete("site","packname=?",newString[]{packname});db.setTransactionSuccessful();}finally{db.endTransaction();if(db!=null){}}}

❻ android中怎样在sqlite中创建一个数据库然后在该数据库中创建两个表

很久没碰android了,android表中第一个字段应该不能用userid吧,我没记错第一个自增长的id是不是_id啊,你改改,至于第一个为什么创建成功了我真不知道,按你这种写法第一个也挺玄乎。

❼ 如何通过Android SQLiteDatabase 创建SQLite数据库视图

android 中SQliteDatabase数据库使用SQLiteOpenHelper辅助类来创建SQLite数据库视图,如下代码:1create view 表名 as 定义SQLiteOpenHelper类是一个辅助类,用于创建或打开数据库。该类的使用方法一般是自定义一个子类,继承自SQLiteOpenHelper,并覆写其中最关键的两个方法:onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。当新建一个数据库时会调用前者,一般在里面做一些创建表或视图的操作。数据库版本升级时则会调用后者。定义好子类后(假如叫SqlHelper),只要调用SqlHelper对象的getReadableDatabase()方法或getWritableDatabase()方法即可返回一个SQLiteDatabase对象。如果是第一次调用,则会创建数据库。随后可使用SQLiteDatabase对象的方法进行数据操作,如:execSQL(), insert(), update(), query(), rawQuery(), delete()等。PS:通过该方法创建的数据库存放的目录是固定的,其路径为/data/data/packageName/databases/。

❽ android sqlite数据库怎么使用

其主要思路是:1. 把数据库分解成几个asset文件。2. 当需要打开数据库时,如果数据库不存在,就把那几个asset文件重新合并成一个数据库文件。3. 如果数据库的版本改变了,就在onUpgrade()方法中把数据库文件删除掉。下面是代码://数据库的缺省路径private static finalString DB_PATH = "/data/data/com.mypackage.myapp/databases/";private static finalString DB_NAME = "mydb.db";private static finalint DB_VERSION = 2;private static finalString DB_SPLIT_NAME = "mydb.db.00";private static finalint DB_SPLIT_COUNT = 3;private SQLiteDatabasem_database;private final Contextm_context;/** * Constructor *保存传进来的context参数以用来访问应用的asset和资源文件。 * @param context */public MyDB(Contextcontext) { super(context, DB_NAME, null, DB_VERSION); this.m_context = context;}public static MyDBopenDatabaseReadOnly(Context context) { MyDB db = new MyDB(context);try { db.createDataBase(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }db.openDataBase(SQLiteDatabase.OPEN_READONLY); return db;}public static MyDBopenDatabaseReadWrite(Context context) { MyDB db = new MyDB(context);try { db.createDataBase(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }db.openDataBase(SQLiteDatabase.OPEN_READWRITE); return db;}/** *创建一个空数据库,用来存储你已有的数据库。 */public voidcreateDataBase() throws IOException{boolean dbExist =checkDataBase();if (dbExist) { /* **如果你的数据库的版本改变了,调用这个方法确保在onUpgrade()被调用时 **传进去的是可写的数据库。 */ SQLiteDatabase db =this.getWritableDatabase();if (db != null) { db.close(); } }dbExist = checkDataBase();if (!dbExist) { try { /* ** 调用这个方法以确保在缺省路径内产生一个空数据库,以便在其基础上复制我们已有的数据库。 */ SQLiteDatabase db =this.getReadableDatabase();if (db != null) { db.close(); } DataBase(); } catch (IOException e) { Log.e("DB", e.getMessage()); throw new Error("Error ingdatabase"); } }}/** * 检查数据库是否已存在,以避免重复复制。 * @return true if it exists, false if itdoesn't */private static booleancheckDataBase(){ SQLiteDatabase checkDB = null; try { String path = DB_PATH + DB_NAME; checkDB =SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY); } catch (SQLiteException e){ //database does't exist yet. } if (checkDB != null) { checkDB.close(); } return checkDB != null ? true : false;}/** * 把存在asset文件中的数据库复制的刚创建的空数据库中。 * */private voidDataBase() throws IOException { // 刚创建的空数据库的路径 String outFileName = DB_PATH + DB_NAME; // 打开空数据库 OutputStream output = new FileOutputStream(outFileName);byte[] buffer = new byte[1024*8];AssetManager assetMgr =m_context.getAssets();for (int i = 1; i <= DB_SPLIT_COUNT; i++){ // 打开分解的asset文件 String fn = DB_SPLIT_NAME +String.valueOf(i); InputStream input = assetMgr.open(fn); //Log.i("DB", "opened" + fn);int length; while ((length = input.read(buffer)) >0) { //Log.i("DB", "read" + String.valueOf(length)); output.write(buffer, 0, length); //Log.i("DB", "write" + String.valueOf(length)); } input.close(); }//Close the streams output.flush(); output.close();}/** * 打开数据库。 * */private voidopenDataBase(int flags) throws SQLException{ //Open the database String myPath = DB_PATH + DB_NAME; m_database =SQLiteDatabase.openDatabase(myPath, null, flags);}/** * 关闭数据库。 * */@Overridepublic synchronizedvoid close() { if (m_database != null) m_database.close(); super.close(); }}@Overridepublic voidonCreate(SQLiteDatabase db) { // 不需做任何事}/** * 在数据库版本提高时,删除原有数据库。 * */@Overridepublic voidonUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (newVersion > oldVersion) { m_context.deleteDatabase(DB_NAME); }}

❾ android stio用sqlite怎么创建数据库

1.使用intelij idea创建一个andorid项目2.创建如下工具类:MyDBHelper.javapackage com.amos.android_database; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /** * Created by amosli on 14-6-10. */ public class MyDBHelper extends SQLiteOpenHelper{ /** * 创建数据库的构造方法 * @param context 应用程序上下文 * name 数据库的名字 * factory 查询数据库的游标工厂一般情况下用sdk默认的 * version 数据库的版本一般大于0 */ public MyDBHelper(Context context) { super(context, "test.db", null, 4); } private String tag = "MyDBHelper.class"; /** * 在数据库第一次创建时会执行 * @param db */ @Override public void onCreate(SQLiteDatabase db) { Log.d(tag,"onCreate….."); //创建一个数据库 db.execSQL("create table person (personid integer primary key autoincrement ,name varchar(30) )"); } /** * 更新数据的时候调用的方法 * @param db * @param oldVersion * @param newVersion */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.d(tag,"onUpgrade*******"); //增加一列 db.execSQL("alter table person add phone varchar(13) null"); } }MyActivity.javapackage com.amos.android_database; import android.app.Activity; import android.os.Bundle; public class MyActivity extends Activity { /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MyDBHelper myDBHelper = new MyDBHelper(this); myDBHelper.getReadableDatabase(); myDBHelper.close(); } }3.打开生成的test.db1).下载安装SQLiteStudio(SQLite的可视化工具)下载地址:http://www.sqlitestudio.pl/ 安装:chmod 777 sqlitestudio-2.1.5.bin ./sqlitestudio-2.1.5.bin执行上面的linux命令,第一句是赋权限,第二句是打开工具2)从avd中导出test.db打开DDMS,从data/data/com.amos.andriod_database/databases下导出test.db3).用sqlitestudio打开test.db添加数据库选择test.db执行onCreate方法时创建的person表执行onUpgrade方法更新语句的时候