android 数据库 insert 自增长 插入问题

本文探讨了在使用SQLite数据库时,设置id为主键后插入数据出现的问题及解决方案。原本不指定主键直接插入数据的方式在设置主键后失效,通过调整SQL语句明确指定插入字段解决了该问题。

private static final String CREATETABLE1 = "create table " + TABLENAME1 + "(id integer primary key, time string, guid string)";

public boolean insert(MyTrackPoints points){
   SQLiteDatabase db = dbHelper.getWritableDatabase();
   db.beginTransaction();
   try {
    db.execSQL("insert into " + MySQLiteOpenHelper.TABLENAME1 + " ('guid','time') "+ " values(?,?)", new Object[]{points.guid,points.time});
    db.setTransactionSuccessful();
   }catch(Exception e) {
    return false;
   } finally { 
    db.endTransaction(); 
   } 
   db.close();
   return true;
  }

开始我没有设置id为primary key

db.execSQL("insert into " + MySQLiteOpenHelper.TABLENAME1 +" values(?,?,?)", new Object[]{points.id,points.guid,points.time});

一直正确,但是后来设置id为primary key后,一直报错,添加" ('guid','time') " 这个后就ok啦


 

 

 

Android中,SQLite是最常用的本地数据库管理系统,用于存储应用程序的数据插入数据通常涉及到以下几个步骤: 1. **创建数据库和表**:首先,你需要通过`SQLiteOpenHelper`类创建一个数据库和表。这个类负责数据库的打开、关闭以及版本管理。例如,创建一个简单的用户表(users): ```java public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "my_database"; private static final int DATABASE_VERSION = 1; private static final String TABLE_USERS = "users"; private static final String COLUMN_ID = "id"; private static final String COLUMN_NAME = "name"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String createTableQuery = "CREATE TABLE " + TABLE_USERS + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT)"; db.execSQL(createTableQuery); } // ... 其他方法如onUpgrade等 } ``` 2. **获取数据库实例**:在需要操作数据库的地方,从`DatabaseHelper`中获取`SQLiteDatabase`对象。 ```java DatabaseHelper dbHelper = new DatabaseHelper(context); SQLiteDatabase db = dbHelper.getWritableDatabase(); ``` 3. **插入数据**:使用`insert()`或`insertWithOnConflict()`方法插入新记录。例如,插入一个新的用户: ```java ContentValues contentValues = new ContentValues(); contentValues.put(COLUMN_NAME, "John Doe"); long newRowId = db.insert(TABLE_USERS, null, contentValues); ``` 4. **处理结果**:`insert()`方法会返回新插入的行的ID,如果插入成功,`newRowId`将是正数。如果不希望处理自动增长的ID,可以设置第二个参数为` SQLiteDatabase.CONFLICT_IGNORE`等模式。 5. **关闭连接**:完成操作后别忘了关闭数据库连接: ```java db.close(); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值