关于在AndroidSQLite中重置自动增量的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于AndroidSQLite中的多主键、android–限制SQLite中的行数、android
关于在Android SQLite中重置自动增量的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android SQLite中的多主键、android – 限制SQLite中的行数、android-DROP TABLE在sqlite中不起作用、android-sqlite – Android :: SQLite,没有找到这样的列?等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- 在Android SQLite中重置自动增量
- Android SQLite中的多主键
- android – 限制SQLite中的行数
- android-DROP TABLE在sqlite中不起作用
- android-sqlite – Android :: SQLite,没有找到这样的列?
在Android SQLite中重置自动增量
private void rmvall() { sqliteDatabase db = appts.getWritableDatabase(); db.delete(TABLE_NAME,null,null); db.execsql("DELETE FROM sqlITE_SEQUENCE WHERE NAME = " + TABLE_NAME); }
解决方法
db.execsql("DELETE FROM sqlITE_SEQUENCE WHERE NAME = '" + TABLE_NAME + "'");
Android SQLite中的多主键
在sqlite for Android中,添加多主键的正确方法是什么?
目前我有:
String Create_table = "CREATE TABLE project ( keyId INTEGER PRIMARY KEY, keyName TEXT PRIMARY KEY)";
我想到的替代方法是:
String Create_table = "CREATE TABLE project (keyID INTEGER, keyName TEXT, PRIMARY KEY(keyID, keyName))";
两者都有效吗?如果是这样,哪个更好?另外我如何禁止NULL值?
解决方法:
不,不可能为单个表创建多个主键.这是任何sql的基本规则.但是,您可以使用其他约束(如带有索引的UNIQUE)来实现此目的.
这不是有效的sql语法:
String Create_table = “CREATE TABLE project ( keyId INTEGER PRIMARY KEY, keyName TEXT PRIMARY KEY)”;
在其他方面,您可以为多列创建主键,如下所示:
Create Table yourTableName (col1, col2, col3, PRIMARY KEY (col1, col2));
How do I disallow NULL values?
您可以使用NOT NULL约束,它不允许您输入NULL值.
android – 限制SQLite中的行数
我知道我可以有一个rowid字段,在插入新记录时我可以检查是否已有50行,所以删除最小的rowid然后插入新的rowid.但只是想知道是否有更好的解决方案,这样我就不必做3个数据库操作(1.查询#of行,2.删除最小值,3.插入)
解决方法
create table test ( row_num integer primary key check ((round(row_num) = row_num) and (row_num between 1 and 5)),other_columns char(1) not null default ''x'',row_timestamp timestamp not null unique default current_timestamp );
表达式round(row_num = row_num)保证row_num列中有整数.否则,sqlite会让你在那里插入1.54或’wibble’.
other_columns列只是实际数据的占位符.
insert into test (row_num,row_timestamp) values (1,''2015-01-01 08:00:01''),(2,''2015-01-01 08:00:02''),(3,''2015-01-01 08:00:03''),(4,''2015-01-01 08:00:04''),(5,''2015-01-01 08:00:05'');
实际的时间戳值并不意味着什么.不管怎样,还没有.像这样播种数据库意味着,从现在开始,您只需要执行更新语句.如果表开始时是空的,则必须处理插入和更新的不同逻辑.例如,您必须计算行以确定是插入还是更新.
create trigger update_timestamp after update on test for each row begin update test set row_timestamp = strftime(''%Y-%m-%d %H:%M:%f'',''Now'') where row_num = OLD.row_num; end;
“update_timestamp”触发器使sqlite以几分之一秒(%f)维护时间戳.可能取决于底层操作系统是否支持分数精度.
create trigger no_deletes after delete on test for each row begin -- There might be a more elegant way to prevent deletes. -- This way just inserts exactly what a delete statement deletes. insert into test (row_num,other_columns,row_timestamp) values (OLD.row_num,OLD.other_columns,OLD.row_timestamp); end;
现在您可以更新数据了.您更新自己的数据,这里只是占位符other_columns,sqlite负责其余的工作.
update test set other_columns = ''b'' where row_timestamp = (select min(row_timestamp) from test); select * from test order by row_timestamp desc;
row_num other_columns row_timestamp ---------- ------------- ----------------------- 1 b 2015-03-08 12:43:21.926 5 x 2015-01-01 08:00:05 4 x 2015-01-01 08:00:04 3 x 2015-01-01 08:00:03 2 x 2015-01-01 08:00:02
android-DROP TABLE在sqlite中不起作用
我尝试以编程方式删除表,但logcat中未显示任何错误,但没有任何结果:
这是我的数据库助手类:
public class database1 extends sqliteOpenHelper
{
private static final String DB_Name="database";
private static final int DB_Version=1;
private static final String tbl_arrival1="arrival1";
private static final String STRING_CREATE1 = "CREATE TABLE IF NOT EXISTS "+tbl_arrival1
+" (_f_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+"f_date TEXT,"
+"o_rder NUMERIC,"
+"rem_com TEXT);";
public database1 (Context ctx)
{
super(ctx,DB_Name,null,DB_Version);
}
@Override
public void onCreate(sqliteDatabase database) {
databaseQuery.onCreate(database);
}
public static class databaseQuery
{
public static void onCreate(sqliteDatabase database)
{
database.execsql("DROP TABLE IF EXISTS "+tbl_arrival1);
database.execsql(STRING_CREATE1);
}
}
}
我在内容提供者中使用此数据库帮助器:
database1 DBHelper ;
public Uri insert(Uri uri, ContentValues values)
{
long row_id;
sqliteDatabase sqlDB = DBHelper.getWritableDatabase();
row_id=sqlDB.insert(tbl_arrival1, null, values);
if(row_id>0)
{
Uri _uri = ContentUris.withAppendedId(CONTENT_URI, row_id);
getContext().getContentResolver().notifyChange(_uri, null);
return _uri;
}
throw new sqlException("Failed to insert into "+uri);
}
问题是,查询删除表无法正常工作!
所有建议和答案将不胜感激…
谢谢
解决方法:
创建数据库后,onCreate在创建时将仅工作一次,如果对旧版本进行了任何更改,则应使用onUpgrade()删除表
编辑
http://www.vogella.com/articles/AndroidSQLite/article.html
android-sqlite – Android :: SQLite,没有找到这样的列?
android.database.sqlite.sqliteException:没有这样的列:asd :,编译时:DELETE FROM标签WHERE name = asd
这是我面临的错误,这是代码:
这是DBhelper中的方法:
/** * Delete a label table * */ public void deleteLabel(String label) { sqliteDatabase db = this.getWritableDatabase(); // ContentValues values = new ContentValues(); // values.remove(label); // Deleting Row db.delete(TABLE_LABELS,KEY_NAME + "=" + label,null); db.close(); // Closing database connection }
这是调用该方法的主要Activity代码:
// for spinner onItemListener // and here is what label is final String label = parent.getItemAtPosition(position).toString(); Button dialogDeletelButton = (Button) dialog .findViewById(R.id.deleteButton); dialogDeletelButton.setonClickListener(new OnClickListener() { @Override public void onClick(View v) { // database handler DatabaseHandler db = new DatabaseHandler( getApplicationContext()); // inserting new label into database db.deleteLabel(label); // Hiding the keyboard InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(inputLabel.getwindowToken(),0); // loading spinner without the deleted data loadSpinnerData(); } });
解决方法
如果它没有引用,sql只会将其视为另一个列名.
您可以在以下活动中执行以下操作:
db.deleteLabel ("'" + label + "'");
但是更改辅助函数可能更干净:
db.delete (TABLE_LABELS,KEY_NAME + "='" + label + "'",null);
因为看起来你可能想要在那里的某个点处使用未加引号的标签(当前被注释掉的ContentValues内容).
今天关于在Android SQLite中重置自动增量的介绍到此结束,谢谢您的阅读,有关Android SQLite中的多主键、android – 限制SQLite中的行数、android-DROP TABLE在sqlite中不起作用、android-sqlite – Android :: SQLite,没有找到这样的列?等更多相关知识的信息可以在本站进行查询。
本文标签: