精华内容
下载资源
问答
  • Sqlite基本操作,历史记录大于10自动删除 String sql = "delete from user where" + " (select count(id) from user )> 9 and " + " id in (select id from user order by id desc limit " + " (select count...
  • 当前位置:我的异常网» Android»sqlite多次删除记录的有关问题sqlite多次删除记录的有关问题www.myexceptions.net网友分享于:2013-05-16浏览:358次sqlite多次删除记录的问题?删除代码如下://删除操作public ...

    当前位置:我的异常网» Android » sqlite多次删除记录的有关问题

    sqlite多次删除记录的有关问题

    www.myexceptions.net  网友分享于:2013-05-16  浏览:358次

    sqlite多次删除记录的问题?

    删除代码如下:

    //删除操作

    public void delete(int id) {

    if (db == null) {

    db = this.getWritableDatabase();

    }

    db.delete(TBL_NAME, "_id=?", new String[] {String.valueOf(id)});

    }

    连续两次删除就会报错,调用删除语句为:

    myList.setOnItemLongClickListener(new OnItemLongClickListener() {

    @Override

    public boolean onItemLongClick(AdapterView> arg0, View arg1,

    int arg2, long arg3) {

    TextView idView = (TextView) arg0.findViewById(R.id.mytext0);

    final int id = Integer.parseInt(idView.getText().toString());

    Log.i("OOOOOOOOOOOOOOOOOOO", id+"");

    builder.setMessage("确定删除该记录吗?").setCancelable(false).setPositiveButton("确定",

    new DialogInterface.OnClickListener() {

    @Override

    public void onClick(DialogInterface dialog, int which) {

    // TODO Auto-generated method stub

    SQLiteDatabase ddb = SQLiteDatabase.openOrCreateDatabase("/data/data/com.chenlong12580.login/databases/mymenu.db", null);

    //删除数据

    //helper.delete(id);

    //重新查询

    Cursor c = helper.query();

    startManagingCursor(c);

    if (c.moveToFirst()) {

    //列表项数组

    String from[] = {"_id", "caiId", "name", "price", "number", "kouwei"};

    //列表ID

    int[] to = {R.id.mytext0, R.id.mytext1, R.id.mytext2,

    R.id.mytext3, R.id.mytext4, R.id.mytext5};

    //适配器

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(MyMenuActivity.this, R.layout.mymenulist_item,

    c, from, to);

    //设置适配器

    myList.setAdapter(adapter);

    if (ddb != null) {

    ddb.close();

    }

    helper.close();

    }

    }

    }).setNegativeButton("取消", new DialogInterface.OnClickListener() {

    @Override

    public void onClick(DialogInterface dialog, int which) {

    // TODO Auto-generated method stub

    dialog.cancel();

    }});

    AlertDialog dialog = builder.create();

    dialog.show();

    return true;

    }

    });

    连续两次删除就会报错,希望大家给与解答,报错如下:

    E/AndroidRuntime(471): java.lang.NullPointerException

    E/AndroidRuntime(471): at android.database.sqlite.SQLiteStatement.releaseAndUnlock(SQLiteStatement.java:283)

    E/AndroidRuntime(471): at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:96)

    E/AndroidRuntime(471): at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1760)

    E/AndroidRuntime(471): at com.chenlong12580.login.MyDBHelper.delete(MyDBHelper.java:112)

    E/AndroidRuntime(471): at com.chenlong12580.login.MyMenuActivity$1$1.onClick(MyMenuActivity.java:58)

    ------解决方案--------------------

    第一次操作后helper.close已经关闭了数据库,去掉helper.close试试

    文章评论

    展开全文
  • 我先做了几次搜索,但仍然有个问题.我发现最好的答案是this SO答案.总结如下:SELECT * FROM TABLE WHERE ID =(SELECT MAX(ID)FROM TABLE);我想知道的是,以下方法是否也能正常工作(因为我懒得改变它,我碰巧喜欢它)....

    我先做了几次搜索,但仍然有一个问题.

    我发现最好的答案是this SO答案.总结如下:

    SELECT * FROM TABLE WHERE ID =(SELECT MAX(ID)FROM TABLE);

    我想知道的是,以下方法是否也能正常工作(因为我懒得改变它,我碰巧喜欢它).

    SELECT * FROM TABLE ORDER BY ID DESC LIMIT 1

    If no ROWID is specified on the insert, or if the specified ROWID has a value of NULL, then an appropriate ROWID is created automatically. The usual algorithm is to give the newly created row a ROWID that is one larger than the largest ROWID in the table prior to the insert. If the table is initially empty, then a ROWID of 1 is used. [emphasis added]

    并进一步,

    The normal ROWID selection algorithm described above will generate monotonically increasing unique ROWIDs as long as you never use the maximum ROWID value and you never delete the entry in the table with the largest ROWID. If you ever delete rows or if you ever create a row with the maximum possible ROWID, then ROWIDs from previously deleted rows might be reused when creating new rows and newly created ROWIDs might not be in strictly ascending order. [emphasis added]

    关于我提出的SQL语句的问题来自最后一句话.它似乎表明,如果删除任何行,无论是否使用了最大ROWID,都可以重用以前删除的ROWID.如果我们假设从不使用最大ROWID(手动或仅使用那么多记录),那么我们只需要担心删除记录.在这种情况下,第一个SQLite documnetation摘录使听起来好像你不会遇到我的查询的任何问题.

    有人有确切消息么?

    我喜欢我的查询,因为它只涉及一个选择(albiet,以订单为代价).我想,我可能过分关注微小的优化,不是吗?

    编辑:

    实际上,重新审查上面引用的SQLite页面,我认为使用AUTOINCREMENT关键字可以保证单调增加ROWID.最后一节详细讨论了它.

    If a column has the type INTEGER PRIMARY KEY AUTOINCREMENT then a slightly different ROWID selection algorithm is used. The ROWID chosen for the new row is at least one larger than the largest ROWID that has ever before existed in that same table. If the table has never before contained any data, then a ROWID of 1 is used. If the table has previously held a row with the largest possible ROWID, then new INSERTs are not allowed and any attempt to insert a new row will fail with an SQLITE_FULL error.

    我现在看起来很清楚.只是填不了表(最多9223372036854775807).

    对不起,我之前只修过了这部分!

    解决方法:

    您显示的两个查询是等效的.

    至于他们是否返回最后一条记录,这取决于“最后”的含义.如果删除行,则不能依赖任一查询来返回最后插入的行.

    标签:android,sql,sqlite

    来源: https://codeday.me/bug/20190725/1537950.html

    展开全文
  • 安卓 SQLite 数据库删除前 n 条记录

    千次阅读 2019-11-12 16:43:00
    删除前 n 条记录对应的 SQL 语句是: delete from table where id in(select id from table order by id limit n) 其中 table 对应表名,id 表示自增 id。 在 SQLite 中执行以下代码即可: String sql = "delete ...

    删除前 n 条记录对应的 SQL 语句是:

    delete from table where id in(select id from table order by id limit n)

    其中 table 对应表名,id 表示自增 id 的列名。

    在 SQLite 中执行以下代码即可:

        String sql = "delete from " + TABLE_NAME +
                " where " + ID + " in(" +
                "select " + ID + " from " + TABLE_NAME +
                " order by " + ID +
                " limit " + n + ")";
        db.execSQL(sql);
    

    其中 TABLE_NAME 为操作的表名,ID 为自增 id 的列名,n 为删除的条数,db 为 SQLiteDatabase 实例。

    另外注意两点:

    1. SQL 语句写错了的话程序会抛出异常。
    2. execSQL 方法执行非 select 语句,rawQuery 方法执行 select 语句。注意不要搞混,如果使用 rawQuery 方法来执行 delete 语句,那么 delete 语句就不会生效。

    参考

    展开全文
  • 、使用嵌入式关系型SQLite数据库存储数据在Android平台上,集成了个嵌入式关系型数据库——SQLiteSQLite3支持NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型...

    一、使用嵌入式关系型SQLite数据库存储数据

    在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误。 另外,在编写CREATE TABLE 语句时,你可以省略跟在字段名称后面的数据类型信息,如下面语句你可以省略name字段的类型信息:

    CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))

    SQLite可以解析大部分标准SQL语句,如:

    查询语句:select*from表名where条件子句groupby分组字句having...orderby排序子句

    如:

    select*frompersonselect*frompersonorderbyiddescselectnamefrompersongroupbynamehavingcount(*)>1分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录select*fromAccount limit5offset3或者select*fromAccount limit3,5插入语句:insertinto表名(字段列表)values(值列表)。如:insertintoperson(name, age)values(‘传智’,3)

    更新语句:update表名set字段名=值where条件子句。如:updatepersonsetname=‘传智‘whereid=10删除语句:deletefrom表名where条件子句。如:deletefrompersonwhereid=10

    二、使用SQLiteOpenHelper对数据库进行版本管理

    我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软件时创建出应用使用到的数据库表结构及添加一些初始化记录,另外在软件升级的时候,也需要对数据表结构进行更新。那么,我们如何才能实现在用户初次使用或升级软件时自动在用户的手机上创建出应用需要的数据库表呢?总不能让我们在每个需要安装此软件的手机上通过手工方式创建数据库表吧?因为这种需求是每个数据库应用都要面临的,所以在Android系统,为我们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用,它是通过对数据库版本进行管理来实现前面提出的需求。

    为了实现对数据库版本进行管理,SQLiteOpenHelper类提供了两个重要的方法,分别是onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),前者用于初次使用软件时生成数据库表,后者用于升级软件时更新数据库表结构。当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的,假设数据库现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一目的,可以把原来的数据库版本设置为2(有同学问设置为3行不行?当然可以,如果你愿意,设置为100也行),并且在onUpgrade()方法里面实现表结构的更新。当软件的版本升级次数比较多,这时在onUpgrade()方法里面可以根据原版号和目标版本号进行判断,然后作出相应的表结构及数据更新。

    getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。但getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。

    注意:getWritableDatabase(),getReadableDatabase的区别是当数据库写满时,调用前者会报错,调用后者不会,所以如果不是更新数据库的话,最好调用后者来获得数据库连接。

    代码:

    publicclassDatabaseHelperextendsSQLiteOpenHelper {//类没有实例化,是不能用作父类构造器的参数,必须声明为静态privatestaticfinalString name="ljqdb";//数据库名称privatestaticfinalintversion=1;//数据库版本publicDatabaseHelper(Context context) {//第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,设置为null,代表使用系统默认的工厂类super(context, name,null, version);

    }

    @OverridepublicvoidonCreate(SQLiteDatabase db) {

    db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer primary key autoincrement, name varchar(20), age INTEGER)");}

    @OverridepublicvoidonUpgrade(SQLiteDatabase db,intoldVersion,intnewVersion) {

    db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL");//往表中增加一列//DROP TABLE IF EXISTS person 删除表}

    }

    在实际项目开发中,当数据库表结构发生更新时,应该避免用户存放于数据库中的数据丢失。

    三、使用SQLiteDatabase操作SQLite数据库

    Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法。execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法用于执行select语句。

    execSQL()方法的使用例子:

    SQLiteDatabase db=....;

    db.execSQL("insertintoperson(name, age)values('林计钦',24)");

    db.close();

    执行上面SQL语句会往person表中添加进一条记录,在实际应用中, 语句中的“林计钦”这些参数值会由用户输入界面提供,如果把用户输入的内容原样组拼到上面的insert语句, 当用户输入的内容含有单引号时,组拼出来的SQL语句就会存在语法错误。要解决这个问题需要对单引号进行转义,也就是把单引号转换成两个单引号。有些时候用户往往还会输入像“ & ”这些特殊SQL符号,为保证组拼好的SQL语句语法正确,必须对SQL语句中的这些特殊SQL符号都进行转义,显然,对每条SQL语句都做这样的处理工作是比较烦琐的。 SQLiteDatabase类提供了一个重载后的execSQL(String sql, Object[] bindArgs)方法,使用这个方法可以解决前面提到的问题,因为这个方法支持使用占位符参数(?)。使用例子如下:

    SQLiteDatabase db=....;

    db.execSQL("insertintoperson(name, age)values(?,?)", new Object[]{"传智播客",4});

    db.close();

    execSQL(String sql, Object[] bindArgs)方法的第一个参数为SQL语句,第二个参数为SQL语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应。

    SQLiteDatabase的rawQuery()用于执行select语句,使用例子如下:

    SQLiteDatabase db=....;Cursorcursor=db.rawQuery("select*fromperson",null);while(cursor.moveToNext()) {intpersonid=cursor.getInt(0);//获取第一列的值,第一列的索引从0开始

    String name=cursor.getString(1);//获取第二列的值intage=cursor.getInt(2);//获取第三列的值

    }cursor.close();

    db.close();

    rawQuery()方法的第一个参数为select语句;第二个参数为select语句中占位符参数的值,如果select语句没有使用占位符,该参数可以设置为null。带占位符参数的select语句使用例子如下:

    Cursorcursor=db.rawQuery("select*frompersonwherenamelike?andage=?", new String[]{"%林计钦%", "4"});

    Cursor是结果集游标,用于对结果集进行随机访问,如果大家熟悉jdbc, 其实Cursor与JDBC中的ResultSet作用很相似。使用moveToNext()方法可以将游标从当前行移动到下一行,如果已经移过了结果集的最后一行,返回结果为false,否则为true。另外Cursor 还有常用的moveToPrevious()方法(用于将游标从当前行移动到上一行,如果已经移过了结果集的第一行,返回值为false,否则为true )、moveToFirst()方法(用于将游标移动到结果集的第一行,如果结果集为空,返回值为false,否则为true )和moveToLast()方法(用于将游标移动到结果集的最后一行,如果结果集为空,返回值为false,否则为true ) 。

    除了前面给大家介绍的execSQL()和rawQuery()方法, SQLiteDatabase还专门提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query() 。这些方法实际上是给那些不太了解SQL语法的菜鸟使用的,对于熟悉SQL语法的程序员而言,直接使用execSQL()和rawQuery()方法执行SQL语句就能完成数据的添加、删除、更新、查询操作。

    Insert()方法用于添加数据,各个字段的数据使用ContentValues进行存放。ContentValues类似于MAP,相对于MAP,它提供了存取数据对应的put(String key, Xxx value)和getAsXxx(String key)方法,key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等。

    SQLiteDatabase db=databaseHelper.getWritableDatabase();

    ContentValuesvalues=new ContentValues();values.put("name", "林计钦");values.put("age",24);longrowid=db.insert(“person”,null,values);//返回新添记录的行号,与主键id无关

    不管第三个参数是否包含数据,执行Insert()方法必然会添加一条记录,如果第三个参数为空,会添加一条除主键之外其他字段值为Null的记录。Insert()方法内部实际上通过构造insert SQL语句完成数据的添加,Insert()方法的第二个参数用于指定空值字段的名称,相信大家对该参数会感到疑惑,该参数的作用是什么?是这样的:如果第三个参数values 为Null或者元素个数为0, 由于Insert()方法要求必须添加一条除了主键之外其它字段为Null值的记录,为了满足SQL语法的需要, insert语句必须给定一个字段名,如:insert into person(name) values(NULL),倘若不给定字段名 , insert语句就成了这样: insert into person() values(),显然这不满足标准SQL的语法。对于字段名,建议使用主键之外的字段,如果使用了INTEGER类型的主键字段,执行类似insert into person(personid) values(NULL)的insert语句后,该主键字段值也不会为NULL。如果第三个参数values 不为Null并且元素的个数大于0 ,可以把第二个参数设置为null。

    delete()方法的使用:

    SQLiteDatabase db=databaseHelper.getWritableDatabase();

    db.delete("person","personid",newString[]{"2"});

    db.close();

    上面代码用于从person表中删除personid小于2的记录。

    update()方法的使用:

    SQLiteDatabase db=databaseHelper.getWritableDatabase();

    ContentValues values=newContentValues();

    values.put(“name”, “林计钦”);//key为字段名,value为值db.update("person", values,"personid=?",newString[]{"1"});

    db.close();

    上面代码用于把person表中personid等于1的记录的name字段的值改为“林计钦”。

    query()方法实际上是把select语句拆分成了若干个组成部分,然后作为方法的输入参数:

    SQLiteDatabase db=databaseHelper.getWritableDatabase();Cursorcursor=db.query("person", new String[]{"personid,name,age"}, "namelike?", new String[]{"%ljq%"},null,null, "personiddesc", "1,2");while(cursor.moveToNext()) {intpersonid=cursor.getInt(0);//获取第一列的值,第一列的索引从0开始

    String name=cursor.getString(1);//获取第二列的值intage=cursor.getInt(2);//获取第三列的值

    }cursor.close();

    db.close();

    上面代码用于从person表中查找name字段含有“传智”的记录,匹配的记录按personid降序排序,对排序后的结果略过第一条记录,只获取2条记录。

    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关键字后面的部分。

    四、使用SQLiteOpenHelper获取用于操作数据库的SQLiteDatabase实例

    publicclassDatabaseHelperextendsSQLiteOpenHelper {privatestaticfinalString name="ljqdb";//数据库名称privatestaticfinalintversion=1;//数据库版本......略

    }publicclassHelloActivityextendsActivity {

    @OverridepublicvoidonCreate(Bundle savedInstanceState) {

    ......

    Button button=(Button)this.findViewById(R.id.button);

    button.setOnClickListener(newView.OnClickListener(){publicvoidonClick(View v) {

    DatabaseHelper databaseHelper=newDatabaseHelper(HelloActivity.this);

    SQLiteDatabase db=databaseHelper.getWritableDatabase();

    db.execSQL("insert into person(name, age) values(?,?)",newObject[]{"林计钦",4});

    db.close();

    }});

    }

    }

    第一次调用getWritableDatabase()或getReadableDatabase()方法后,SQLiteOpenHelper会缓存当前的SQLiteDatabase实例,SQLiteDatabase实例正常情况下会维持数据库的打开状态,所以在你不再需要SQLiteDatabase实例时,请及时调用close()方法释放资源。一旦SQLiteDatabase实例被缓存,多次调用getWritableDatabase()或getReadableDatabase()方法得到的都是同一实例。

    五、使用事务操作SQLite数据库

    使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。

    使用例子如下:

    SQLiteDatabase db=....;

    db.beginTransaction();//开始事务try{

    db.execSQL("insert into person(name, age) values(?,?)",newObject[]{"林计钦",4});

    db.execSQL("update person set name=? where personid=?",newObject[]{"abc",1});

    db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务}finally{

    db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务}

    db.close();

    上面两条SQL语句在同一个事务中执行。

    展开全文
  • 以下方法只考虑实现,不考虑效率,非正式场合可以用。 1.创建临时表 CREATE TABLE temp_table(id INTEGER ...将旧表删除 DROP TABLE old_table; 4.将新表改名为原先的表 ALTER TABLE temp_table RENAME TO old_table;
  • Sqlite删除语句(Delete)

    千次阅读 2020-12-03 20:21:10
    但是与别的数据库不同,SQlite在为表创建自增列后,会将表自增列的当前序号保存到个名为sqlite_sequenc的表内, 因此清除表的所有记录后,如果还要将自增列清零,则需处理此表相关记录sqlite_sequence表结构...
  • 最后一节,这里记录下怎样删除数据。前面全部的代码都继承在这里了,在Ubuntu14.04和Mac10.9上亲測通过。#include #include #include "sqlite/sqlite3.h"#define DB_NANE "sqlite/test.db"sqlite3 *db = NULL;char* ...
  • C#Sqlite数据库的增加删除修改查询的小例子
  • 如何让id重新排序? 比如有5条数据1|a1 2|a2 ...然后我删除了第三条记录 1|a1 2|a2 4|a4 5|a5 怎么样才能重新排序,达到下面的效果呢? 1|a1 2|a2 3|a4 4|a5 烦请给例子,谢谢!
  • Sqlite数据库添加,删除前n条记录

    千次阅读 2016-08-17 11:42:48
    1.查询前N条记录:  public Cursor query(String sql,String[] selectionArgs){ SQLiteDatabase db= dbHelper.getReadableDatabase(); return db.rawQuery(sql,selectionArgs); } String sql2="SELECT * ...
  • sqlite删除条目后id还是自动增长,例如数据表中有三条数据,对应id分别为1,2,3删除条目3后,新的数据id会从4开始,3就空了,如何解决这种问题?
  • DELETE FROM inbox WHERE localId IN(SELECT localId FROM inbox ORDER BY mDate DESC LIMIT 0,100);
  • 话不多说、创建数据库和建表happy'''导入sqlite3库'''import sqlite3'''创建数据库'''conn = sqlite3.connect('demo.db') #demo.db不存在时在py同一目录下自动创建demo.db'''创建游标'''cursor = conn.cursor()'''...
  • SQLite (四)- 数据修改与删除、排序

    千次阅读 2018-11-26 22:57:29
    SQLite中用update来修改数据已有的数据,可以使用where子句设置约束修改的范围,如果不使用where子句来约束update语句,会修改表中所有对应类型的数据。 比如下面表中的李毅和赵敏都涨2000工资,此时我们要去更新...
  • Java中的SQLITE删除方法

    2021-02-26 17:02:41
    我有一个方法应该从我的数据库中删除一个Person(一行) . 我收到了我在catch中创建的错误消息 . 我刚刚开始使用数据库,我大多数都在拼凑不同的技术 . 我不知道该怎么做public static void deletePerson(String ...
  • sqlite删除数据时主键不能更新

    千次阅读 2015-08-12 20:10:03
    当你在用sqlite数据库是,会有个问题,当你删除database的数据时,主键并不会自动更新,比如1,2,3,4,当你删掉3时,会变成1,2,4,再往database插入数据时,就变成了1,2,4,5.这就会导致如果你用主键查询时...
  • 我正在尝试做个简单的登录页面,我只需输入用户名即可删除特定联系人及其详细信息.换句话说,我想删除数据库中的特定行.public int deleteUsername(String content){String whereClause = KEY_CONTENT1 + "= '" + ...
  • 但是这些记录又不能无限的存储,只需要记录最新的50条或者100条就可以了,所以要求应用每插入一条新数据之后,对超过50条的数据进行清理。 本文以搜索历史记录为例,主要介绍sqlite中limit ,offset关键字的使用,...
  • 但是sqlite3还是给我们提供了很多便利,我们可以通过只读取第一条数据方法来让数据库自己来维护这个id值,这样就是得了我们的代码精简了很多,而且代码的可重入性也有了比较乐观的改善。 话不多说上函数: #...
  • 删除SQLite 3中的行

    2021-05-23 07:36:46
    int result = sqlite3_open("/quickdatabase.sqlite", &database); if(result != SQLITE_OK) { sqlite3_close(database); view = [[UIAlertView alloc] initWithTitle:@"Database Error" message:@"Falha ao ...
  • 复制代码 代码如下:#coding=utf-8__auther__ = ‘xianbao’import sqlite3# 打开数据库def opendata(): conn = sqlite3.connect(“mydb.db”) cur = conn.execute(“””create table if not exists tianjia(id ...
  • sqlite采用的是变长纪录存储,当你从Sqlite删除数据后,未使用的磁盘空间被添加到个内在的”空闲列表”中用于存储你下次插入的数据,用于提 高效率,磁盘空间并没有丢失,但也不向操作系统返回磁盘空
  • Android Sqlite删除超过50的数据

    千次阅读 2015-12-14 11:47:17
      在应用中,总要对用户的一些操作进行记录,比如播放...但是这些记录又不能无限的存储,只需要记录最新的50条或者100条就可以了,所以要求应用每插入一条新数据之后,对超过50条的数据进行清理。  本文以搜索
  • SQLite Delete详解SQLite 的 DELETE 查询用于删除表中已有的记录。可以使用带有 WHERE 子句的 DELETE 查询来删除选定行,否则所有的记录都会被删除。语法带有 WHERE 子句的 DELETE 查询的基本语法如下:DELETE FROM ...
  • MessageBox("请选择要删除的选项!"); return; } string selectName = m_NameString.GetBuffer(); string sql = "delete from " + student_table + " where Name=" + "'" + selectName + "'"; CSDDb::...
  • SQLite 表排序后删除前100(n)数据

    千次阅读 2019-08-22 16:57:13
    SQLite 表排序后删除前100(n)数据 语句如下 DELETE FROM test_tbl WHERE rowid IN (SELECT rowid FROM test_tbl ORDER BY id LIMIT 100); 说明 test_tbl为表的名字 towid为slqite中每行默认的字段。 id为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,635
精华内容 10,254
关键字:

sqlite删除一条记录