Intereting Posts
Поверхность :: setbuffersDimensions Лог, находящийся в спаме Android: как создать корпус Switch из этого? Как добавить элементы подменю в действие ActionBar в коде? Правильное отслеживание ссылок на установку в Play Маркете Цветовой диапазон только для Android 4.0+ DataOutputSteam бросает мне «java.io.IOException: неожиданный конец потока»? Тестирование Android В приложениях Биллинг реальных покупок Android / gradle: включить имя версии из аромата в имени файла apk Есть ли команда orroid shell или adb, которую я мог бы использовать для получения IMEI / MEID устройства? Android – изменить значение в strings.xml Ориентация камеры Android ISsue Отсутствующие стили. Правильная ли тема выбрана для этого макета? Пользовательский глобальный класс приложения разбивается на "android.app.Application не может быть отброшен в" Как сделать аннотацию, как подсветку, зачеркивание, подчеркивание, рисование, добавление текста и т. Д. В андроид для просмотра PDF? Защитная пленка Proguard и RecyclerView

Можно ли использовать первичный ключ в текстовых полях в базе данных Android

Я создал простую таблицу, содержащую имя и адрес электронной почты лиц. Когда я даю запрос создания следующим образом:

"create table contacts (name text not null, email text primary key not null);"

Но это не работает. Во время работы я не получаю никаких исключений или ошибок, ни первичный ключ не работает. При просмотре таблицы с помощью браузера SQLite я заметил, что существует только четыре типа данных: Введите описание изображения здесь

Можно ли использовать первичный ключ только для целого числа? В том случае, если я хочу первичный ключ в текстовых полях. Спасибо. Это код, который я использовал:

public class DBAdapter {

 public static final String KEY_ROWID = "_id"; public static final String KEY_NAME = "name"; public static final String KEY_EMAIL = "email"; private static final String TAG = "DBAdapter"; private static final String DATABASE_NAME = "MyDB"; private static final String DATABASE_TABLE = "contacts"; private static final int DATABASE_VERSION = 2; private static final String DATABASE_CREATE = "create table contacts (_id integer primary key autoincrement, " + "name text not null, email text not null);"; private final Context context; private DatabaseHelper DBHelper; private SQLiteDatabase db; public DBAdapter(Context ctx) { this.context = ctx; DBHelper = new DatabaseHelper(context); } private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { try { db.execSQL(DATABASE_CREATE); } catch (SQLException e) { e.printStackTrace(); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS contacts"); onCreate(db); } } //---opens the database--- public DBAdapter open() throws SQLException { db = DBHelper.getWritableDatabase(); return this; } //---closes the database--- public void close() { DBHelper.close(); } //---insert a contact into the database--- public long insertContact(String name, String email) { ContentValues initialValues = new ContentValues(); initialValues.put(KEY_NAME, name); initialValues.put(KEY_EMAIL, email); return db.insert(DATABASE_TABLE, null, initialValues); } //---deletes a particular contact--- public boolean deleteContact(long rowId) { return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; } //---retrieves all the contacts--- public Cursor getAllContacts() { return db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME, KEY_EMAIL}, null, null, null, null, null); } //---retrieves a particular contact--- public Cursor getContact(long rowId) throws SQLException { Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME, KEY_EMAIL}, KEY_ROWID + "=" + rowId, null, null, null, null, null); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; } //---updates a contact--- public boolean updateContact(long rowId, String name, String email) { ContentValues args = new ContentValues(); args.put(KEY_NAME, name); args.put(KEY_EMAIL, email); return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; } 

}

Solutions Collecting From Web of "Можно ли использовать первичный ключ в текстовых полях в базе данных Android"

Согласно документации sqlite, использование TEXT в качестве типа данных для первичного ключа должно работать.

Я использовал ваш запрос, и вот он, таблица создана.

 CREATE TABLE contacts ( email text primary key not null, name text not null); INSERT INTO contacts VALUES ('sample@email.com', 'sample') INSERT INTO contacts VALUES ('people@email.com', 'sample') 

Введите описание изображения здесь

Введите описание изображения здесь

Теперь вот где все пошло не так.

Когда я снова запустил это

 INSERT INTO contacts VALUES ('sample@email.com', 'sample') 

Ничего не случилось, никаких ошибок. Но он не обновил запись. Поэтому я заключу, что целостность данных есть, но вы не получаете никакой информации об отказе .

SQLiteDatabase.insertOrThrow () должен генерировать исключение, если значение не может быть вставлено. Также его возвращаемые значения, а также одно из SQLiteDatabase.insert() – это rowid вставленной строки или -1 если она терпит неудачу. Вы должны выбрать любой из этих альтернатив в своем коде.