嘿我想创建一个带有AUTO_INCREMENT列的数据库。但我不知道如何解析方法插入中的值。我只是不知道要解析一个AUTO_INCREMENT参数,我解析了1应该是auto_increment,但我知道它不应该解析。
这是 CallDatHelper.java 类,其中我声明了方法插入,以及创建数据库的方法。
package com.psyhclo;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
public class CallDataHelper {
private static final String DATABASE_NAME = "calls.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "contact_data";
private Context context;
private SQLiteDatabase db;
public CallDataHelper(Context context) {
this.context = context;
OpenHelper openHelper = new OpenHelper(this.context);
this.db = openHelper.getWritableDatabase();
}
public boolean insert(Integer cId, String cName, String numType,
String cNum, String dur, String date, String currTime) {
this.db.execSQL("insert into "
+ TABLE_NAME
+ "(id, contact_id, contact_name, number_type, contact_number, duration, date, current_time, cont) "
+ "values( ? ," + cId + ", " + cName + ", " + numType + ", "
+ cNum + ", " + dur + ", " + date + ", " + currTime + ", ? )");
return true;
}
public void atualiza(String word) {
this.db.execSQL("UPDATE words SET cont = cont + 1 WHERE (word= ?)",
new String[] { word });
}
public void deleteAll() {
this.db.delete(TABLE_NAME, null, null);
}
public boolean select(String wrd) {
String word;
Cursor cursor = this.db.query(TABLE_NAME, new String[] { "word" },
"word like ?", new String[] { wrd }, null, null, null);
if (cursor.moveToFirst()) {
do {
word = cursor.getString(0);
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
return true;
} else {
return false;
}
}
public List<String> selectAll() {
List<String> list = new ArrayList<String>();
Cursor cursor = this.db.query(TABLE_NAME, new String[] { "word" },
null, null, null, null, "cont desc");
if (cursor.moveToFirst()) {
do {
list.add(cursor.getString(0).toUpperCase());
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
return list;
}
private static class OpenHelper extends SQLiteOpenHelper {
OpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE "
+ TABLE_NAME
+ "(id INTEGER PRIMARY KEY AUTOINCREMENT, contact_id INTEGER, contact_name VARCHAR(50), number_type VARCHAR(50), contact_number VARCHAR(50), duration TIME, date DATE, current_time TIME, cont INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w("RatedCalls Database",
"Upgrading database, this will drop tables and recreate.");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
}
}
这里是我调用 insert 方法解析我要插入的数据的地方。
this.dh.insert(1 , 1, contactName, numType, contactNumber,
duration, callDate, currTime);
答案 0 :(得分:22)
您不必像在MYSQL中那样专门写AUTO_INCREMENT
。
只需将主键字段定义为_id INTEGER PRIMARY KEY
即可。
如果在创建表时已使用INT
定义主键字段,则无效。它应该是INTEGER
,就是这样。
当您在插入记录时未传递主键字段的任何值时,它会自动将值增加为唯一值(MYSQL
AUTO_INCREMENT
的工作方式相同)
答案 1 :(得分:13)
您不必解析任何内容。如果列创建为AUTOINCREMENT
,则只传递其他值:
db.execSQL("insert into "
+ TABLE_NAME
+ "(contact_id, contact_name, number_type, contact_number, duration, date, current_time, cont) "
+ "values( "+ cId + ", " + cName + ", " + numType + ", "
+ cNum + ", " + dur + ", " + date + ", " + currTime + ", ? )");
顺便说一下,始终建议使用Android的insert
方法插入数据:
ContentValues values = new ContentValues();
values.put("contact_id", cId);
values.put("contact_name", cName);
// etc.
db.insert(TABLE_NAME, null, values);
答案 2 :(得分:1)
this.db.insert(NULL , 1, contactName, numType, contactNumber,
duration, callDate, currTime);
答案 3 :(得分:1)
final static String Database_name="empDb.db";
public DatabaseHelper(Context context) {
super(context, Database_name, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table emp_tbl (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,salary TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS tbl_emp");
}
获取更多信息 https://www.youtube.com/watch?v=W8-Z85oPNmQ
博客:https://itmulc.blogspot.com/2016/08/android-sqlite-database-with-complete.html