Я создаю приложение, которое включает данные, хранящиеся в SQLitedatabase. Я использую длинный первичный ключ (сгенерировал покупку значительных бит java.util.UUID). Я обрабатываю соединение с базой данных с расширенным SQLiteOpenHelper. Запрос:Android: long => SQLiteDatabase => long, precision lost
INSERT INTO Categorys VALUES('-7311183930966261019', 'Mat', 'Matkonto', '#FFFFFF', '#F23341', '0', '231451', '0', '0', '');
проходит без проблем, но когда я получить значение много точности в первом значении -7311183930966261019, были потеряны. Запрос
SELECT * FROM Categorys WHERE _id='-7311183930966261019';
null null;
Я пробовал одни и те же запросы в sqlite3 и в командной строке и не получал такую же проблему, поэтому я пришел к выводу, что проблема связана либо с Android, либо с моей обработкой на этом пути.
Update: После исправления querys я теперь:
INSERT INTO Categorys VALUES(-6645129292311215613, 'Sparande', 'Pengar som sparas inför framtiden', '#FFFFFF', '#F23341', '0', '231451', '0', 0, '');
И из базы данных я получаю (ToString() из моего класса):
Category: name: Sparande; description: Pengar som sparas inför framtiden; colorLight: #FFFFFF; colorDark: #F23341 _id: -6645129292311215104
Этот код извлечения данных:
public static List<Category> readCategorys(Context context){
TransactionSQLOH helper = new TransactionSQLOH(context, DATABASE_NAME);
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.query(CategorySQLOH.TABLE_NAME, CategorySQLOH.COLUMNS, null, null, null, null, null);
List<Category> result = CategorySQLOH.cursorToCategory(cursor);
helper.close();
return result;
}
public static List<Category> cursorToCategory(Cursor cursor){
List<Category> result = new Vector<Category>();
if (cursor == null || cursor.getCount() == 0){
return result;
}
cursor.moveToFirst();
Category c;
do{
long _id = cursor.getLong(cursor.getColumnIndex(CategorySQLOH.COLUMNS[0]));
String name = cursor.getString(cursor.getColumnIndex(CategorySQLOH.COLUMNS[1]));
String description= cursor.getString(cursor.getColumnIndex(CategorySQLOH.COLUMNS[2]));
String colorLight = cursor.getString(cursor.getColumnIndex(CategorySQLOH.COLUMNS[3]));
String colorDark = cursor.getString(cursor.getColumnIndex(CategorySQLOH.COLUMNS[4]));
int destribution = cursor.getInt(cursor.getColumnIndex(CategorySQLOH.COLUMNS[5]));
long categoryGroup = cursor.getLong(cursor.getColumnIndex(CategorySQLOH.COLUMNS[6]));
int intData = cursor.getInt(cursor.getColumnIndex(CategorySQLOH.COLUMNS[7]));
long longData = cursor.getLong(cursor.getColumnIndex(CategorySQLOH.COLUMNS[8]));
String strData = cursor.getString(cursor.getColumnIndex(CategorySQLOH.COLUMNS[9]));
c = new Category(_id, name, description, colorLight, colorDark, destribution, categoryGroup, intData, longData, strData);
result.add(c);
}while(cursor.moveToNext());
return result;
}
Обновление:
Результат SELECT * FROM Categorys; на выдвинутом базе данных:
sqlite> SELECT * FROM Categorys;
-6.64512929231122e+18|Sparande|Pengar som sparas inf├Âr framtiden|#FFFFFF|#F2334
1|0|231451.0|0|0.0|
Update:
результат .schema на запряженных базе данных.
CREATE TABLE Categorys (_id REAL PRIMARY KEY, name TEXT NOT NULL, description T
EXT , colorLight TEXT , colorDark TEXT , destribution INTEGER , categoryGroup RE
AL , intData INTEGER , longData REAL , strData TEXT);
CREATE TABLE android_metadata (locale TEXT);
Вы сбросили эту базу данных после вставки, чтобы узнать, какие значения указаны в столбцах? вы говорите, что точность - это список, но прямых доказательств здесь нет, это то, что происходит. –
Нет, я только что прочитал, что вернулся, когда я обращаюсь к базе данных. – SverkerSbrg
В этом пункте вы делаете предположение о проблеме без каких-либо доказательств. удалите строки DB и проверьте фактическое значение строки. –