如何在Android SQLite数据库上制作AUTO_INCREMENT?

时间:2022-09-18 22:59:48

Hey I want to create a database with an AUTO_INCREMENT column. But I don't know how to parse the value in the method insert. I just don't know what to parse to an AUTO_INCREMENT argument, and I parsed 1 where should be auto_increment, but I know its not that I should parse.

嘿我想创建一个带有AUTO_INCREMENT列的数据库。但我不知道如何解析方法插入中的值。我只是不知道要解析一个AUTO_INCREMENT参数,我解析了1应该是auto_increment,但我知道它不是我应该解析的。

Here is the CallDatHelper.java class where I declare the method insert, and the method that creates the database.

这是CallDatHelper.java类,我在其中声明方法insert和创建数据库的方法。

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);
    }
}
}

And here is where I call the insert method parsing the data I want to insert.

这里是我调用insert方法解析我想要插入的数据的地方。

this.dh.insert(1 , 1, contactName, numType, contactNumber,
                    duration, callDate, currTime);

4 个解决方案

#1


13  

You don't have to parse anything. If the column was created as AUTOINCREMENT, just pass the other values:

你不必解析任何东西。如果列创建为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 + ", ? )");

By the way, it's always recommended to insert data using the Android's insert method:

顺便说一句,总是建议使用Android的insert方法插入数据:

ContentValues values = new ContentValues();
values.put("contact_id", cId);
values.put("contact_name", cName);
// etc.
db.insert(TABLE_NAME, null, values);

#2


21  

You don't have to specifically write AUTO_INCREMENT as in MYSQL.

您不必像在MYSQL中那样专门编写AUTO_INCREMENT。

Just have to define the primary key Field as _id INTEGER PRIMARY KEY.

只需将主键字段定义为_id INTEGER PRIMARY KEY。

It will not work, if have define the Primary key field with INT when creating the table. It Should be INTEGER and thats it.

如果在创建表时使用INT定义主键字段,则无效。它应该是INTEGER,就是这样。

When you don't pass any value for the primary key filed when inserting records, it will automatically increase the value to be a unique value( same way MYSQL AUTO_INCREMENT works )

当您在插入记录时未传递主键字段的任何值时,它会自动将值增加为唯一值(MYSQL AUTO_INCREMENT的工作方式相同)

#3


1  

this.db.insert(NULL , 1, contactName, numType, contactNumber, duration, callDate, currTime);

this.db.insert(NULL,1,contactName,numType,contactNumber,duration,callDate,currTime);

#4


1  

final static String Database_name="empDb.db";

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");
}

Get More Info https://www.youtube.com/watch?v=W8-Z85oPNmQ Blog: https://itmulc.blogspot.com/2016/08/android-sqlite-database-with-complete.html

获取更多信息https://www.youtube.com/watch?v=W8-Z85oPNmQ博客:https://itmulc.blogspot.com/2016/08/android-sqlite-database-with-complete.html

#1


13  

You don't have to parse anything. If the column was created as AUTOINCREMENT, just pass the other values:

你不必解析任何东西。如果列创建为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 + ", ? )");

By the way, it's always recommended to insert data using the Android's insert method:

顺便说一句,总是建议使用Android的insert方法插入数据:

ContentValues values = new ContentValues();
values.put("contact_id", cId);
values.put("contact_name", cName);
// etc.
db.insert(TABLE_NAME, null, values);

#2


21  

You don't have to specifically write AUTO_INCREMENT as in MYSQL.

您不必像在MYSQL中那样专门编写AUTO_INCREMENT。

Just have to define the primary key Field as _id INTEGER PRIMARY KEY.

只需将主键字段定义为_id INTEGER PRIMARY KEY。

It will not work, if have define the Primary key field with INT when creating the table. It Should be INTEGER and thats it.

如果在创建表时使用INT定义主键字段,则无效。它应该是INTEGER,就是这样。

When you don't pass any value for the primary key filed when inserting records, it will automatically increase the value to be a unique value( same way MYSQL AUTO_INCREMENT works )

当您在插入记录时未传递主键字段的任何值时,它会自动将值增加为唯一值(MYSQL AUTO_INCREMENT的工作方式相同)

#3


1  

this.db.insert(NULL , 1, contactName, numType, contactNumber, duration, callDate, currTime);

this.db.insert(NULL,1,contactName,numType,contactNumber,duration,callDate,currTime);

#4


1  

final static String Database_name="empDb.db";

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");
}

Get More Info https://www.youtube.com/watch?v=W8-Z85oPNmQ Blog: https://itmulc.blogspot.com/2016/08/android-sqlite-database-with-complete.html

获取更多信息https://www.youtube.com/watch?v=W8-Z85oPNmQ博客:https://itmulc.blogspot.com/2016/08/android-sqlite-database-with-complete.html