使用android studio在Sqlite数据库中插入列,以及如何将一些列设置为autoincrement和primarykeys
答案 0 :(得分:0)
如果将列类型设置为 INTEGER PRIMARY KEY
,并且在插入行时未指定值,则会为值(64位有符号整数)分配未使用的整数,通常比最大的一个大。
您很可能不需要使用AUTOINCREMENT
关键字(这会分配一个在数据库中唯一的整数,而不是在表级别,因此在确定该整数时会产生开销)。
经常使用_id,因此经常会看到
db.execSQL("CREATE TABLE tablename (_id INTEGER PRIMARY KEY, column_name column_type, ...more column_name / column_types as required...);");
作为示例,以下代码使用 SQLiteOpenHelper 的子类(不需要但经常使用),这需要onCreate
方法(,当数据库是创建,例如第一次使用帮助程序)和onUpgrade
方法(如果版本号增加/增加,则需要)。
如果需要,此代码将创建一个名为 mydb 的数据库(文件名 mydb.sqlite ,用于支持扩展名超过3个字符的操作系统)。
onCreate
,只有在数据库文件本身不存在时才会调用它(再次应用极少数例外情况)。然后,如果创建数据库,则在名为 testfloat 的数据库中创建一个表。该表格由2列组成,即 _id 和 myfloat 。
_id 列类型为 INTEGER PRIMARY KEY ,如果在插入行时没有为列指定值那么它将是一个唯一的递增整数(首先是1,然后是2 ......)。
myfloat 列的类型为 FLOAT (或许是checkout Datatypes In SQLite Version 3,因为SQLite在数据类型方面具有灵活性),如果值为n&# 39;在插入行时给出,然后给出值0.0。
public class MyDBHelper extends SQLiteOpenHelper {
public static final String DBNname = "mydb";
public static final int DBVersion = 1;
public static final String TESTFLOATTABLE = "testfloat";
public static final String STDIDCOL = "_id INTEGER PRIMARYKEY";
public static final String MYFLOATCOL = "myfloat";
public static final String MYFLOATTYPE = " FLOAT DEFAULT 0.0";
public MyDBHelper(Context context) {
super(context,DBNname,null,DBVersion);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " +
TESTFLOATTABLE +
"(" +
STDIDCOL +
"," +
MYFLOATCOL +
MYFLOATTYPE +
")");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldeversion, int newversion) {
}
public long insertRow(double myfloatvalue) {
long rv;
SQLiteDatabase db = getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(MYFLOATCOL,myfloatvalue);
rv = db.insert(TESTFLOATTABLE,null,cv);
return rv;
}
public Cursor getAllMyFloats() {
Cursor rv;
SQLiteDatabase db = getReadableDatabase();
rv = db.query(TESTFLOATTABLE,null,null,null,null,null,null);
return rv;
}
}
上面的代码,onUpgrade有一个空方法。此外,还有两种方法 insertRow (插入一行)和 getAllMyFloats 返回Cursor,在本例中为所有包含所有列的行。
在您调用活动时,您可以执行以下操作: -
MyDBHelper mydbhelper = new MyDBHelper(this);
mydbhelper.insertRow(1.3);
mydbhelper.insertRow(1);
mydbhelper.insertRow(5.674389123459834);
第一行获取一个MyDBHelper实例,该实例在首次运行时将创建数据库,并在此过程中调用onCreate
方法,从而创建表。
接下来的三行调用insertRow
方法(请注意,如果应用程序重新运行,则会添加3个额外的行........即代码用于演示),这将导致3行到添加,第一个在_id列中有1个,接下来有2个等。
以下代码(从上面的代码开始)演示了如何获取和询问Cursor: -
Cursor getfloats = mydbhelper.getAllMyFloats();
Log.d("TESTFLOAT","Rows returned from getALlFloats = " + getfloats.getCount());
while (getfloats.moveToNext()) {
Log.d("TESTFLOAT","Via getString = " + getfloats.getString(getfloats.getColumnIndex(mydbhelper.MYFLOATCOL)));
Log.d("TESTFLOAT","Via getFloat = " + Float.toHexString(
getfloats.getFloat(
getfloats.getColumnIndex(
mydbhelper.MYFLOATCOL
)
)
));
Log.d("TESTFLOAT","Via getDouble = " +Double.toString(
getfloats.getDouble(
getfloats.getColumnIndex(
mydbhelper.MYFLOATCOL
)
)));
}
getfloats.close();
第一行调用返回游标的getAllMyFLoats
。
下一行是一条日志消息,详细说明了生成的游标中有多少行。
如果游标中有任何行,则while子句会横向移动游标。对于每一行,它使用一些cursor.get来获取myfloat列的值。方法(演示如何使值受每个影响)。注意代替getfloats.get????(getfloats.getColumnIndex(column))
,getfloats.get????(1)
可以使用。