Большая строка чисел становится научной формой при сохранении в базу данных SQL - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь сохранить различную большую строку чисел в базе данных sql и для чисел выше примерно 10 цифр, при экспорте она имеет научную форму, например, 3.5674E15.

С числами ниже этойпроблем нет, но мне нужно экспортировать значения из базы данных в точной форме, например, 45739473920284, а не в научной форме, так как некоторые из последних нескольких цифр потеряны.

Это мой адаптер базы данных:

public class DBAdapterWorkouts {
private static final String KEY_ROWID = "id";
private static final String KEY_NAME = "name";
private static final String KEY_DATE = "date";
private static final String KEY_EXERCISESTRING = "exercisestring";
private static final String KEY_SUPERSETSTRING = "supersetstring";
private static final String TAG = "DBAdapter2";

private static final String DATABASE_NAME = "CustomWorkoutsDB";
private static final String DATABASE_TABLE = "customworkouts";
private static final int DATABASE_VERSION = 1;

private static final String DATABASE_CREATE = "create table if not exists customworkouts (id integer primary key autoincrement, " + "name string, date long, exercisestring string, supersetstring string);";

private DatabaseHelper DBHelper;
private SQLiteDatabase db;

public DBAdapterWorkouts(Context ctx) {
    DBHelper = new DatabaseHelper(ctx);
}

//---opens the database---
public DBAdapterWorkouts open() throws SQLException {
    db = DBHelper.getWritableDatabase();
    return this;
}

//---closes the database---
public void close() {
    DBHelper.close();
}

//---insert a record into the database---
public long insertRecord(String name, long date, String exercisestring, String supersetstring) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_NAME, name);
    initialValues.put(KEY_DATE, date);
    initialValues.put(KEY_EXERCISESTRING, exercisestring);
    initialValues.put(KEY_SUPERSETSTRING, supersetstring);
    return db.insert(DATABASE_TABLE, null, initialValues);
}

public void deleteName(int id){
    open();
    String query = "DELETE FROM " + DATABASE_TABLE + " WHERE "
            + KEY_ROWID + " = '" + id + "'";
    Log.d(TAG, "deleteName: query: " + query);
    db.execSQL(query);
    close();
}

//---deletes all records---
public void reset() throws SQLException {
    db.delete(DATABASE_TABLE, null,null);
    db.execSQL("DELETE FROM SQLITE_SEQUENCE WHERE NAME = '" + DATABASE_TABLE + "'");
    this.DBHelper.onCreate(db);
}

//---retrieves all the records---
public Cursor getAllRecords() {
    return db.query(DATABASE_TABLE, new String[]{KEY_ROWID, KEY_NAME, KEY_DATE, KEY_EXERCISESTRING, KEY_SUPERSETSTRING}, null, null, null, null, null, null);
}

//---retrieves a particular record---
public Cursor getRecord(long rowId) throws SQLException {
    Cursor mCursor =
            db.query(true, DATABASE_TABLE, new String[]{KEY_ROWID, KEY_NAME, KEY_DATE, KEY_EXERCISESTRING, KEY_SUPERSETSTRING}, KEY_ROWID + "=" + rowId, null, null, null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}

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 arg1, int arg2) {

    }
}
}

Это в моей деятельности, где данные сохраняются и загружаются из базы данных:

            dbWorkouts.open();
            Cursor c = dbWorkouts.getAllRecords();
            boolean exists = false;
            try {
                if (c.moveToFirst()){
                    do {
                        if (c.getString(1).equals(etxtWorkoutName.getText().toString())){
                            exists = true;
                        }
                    }while (c.moveToNext());
                }
            } catch (Exception e){
                e.printStackTrace();
            }
            if (exists){
                Toast.makeText(getActivity(), "Please choose a workout name that doesn't already exist", Toast.LENGTH_LONG).show();
            }else{
                Calendar calendar = Calendar.getInstance();
                long date = calendar.getTimeInMillis();
                String name = etxtWorkoutName.getText().toString();
                dbWorkouts.insertRecord(name, date, stringExerciseOrder, stringSupersets);
                Toast.makeText(getActivity(), "Workout saved!", Toast.LENGTH_LONG).show();
                Log.w("app", stringExerciseOrder);
            }
            dbWorkouts.close();

В приведенном выше примере журнал производит число, которое я хочу сохранить (длинная строкачисел с именем stringExerciseOrder).Проблема возникает, когда я использую следующий код для извлечения значения.

dbWorkouts.open();
    Cursor c = dbWorkouts.getAllRecords();
    try {
        if (c.moveToFirst()){
            do {
                Log.w("app", c.getString(3));
            }while (c.moveToNext());
        }
    } catch (Exception e){
        e.printStackTrace();
    }
    dbWorkouts.close();

Вывод второго журнала представлен в научной форме.

Любая помощь будет принята с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 18 октября 2018

// Заменить команду создания таблицы этим.

 private static final String DATABASE_CREATE = "create table if not exists customworkouts (id integer primary key autoincrement, " + "name TEXT, date long, exercisestring TEXT, supersetstring TEXT);";

TEXT - это тип в SQLite, который используется для строкового формата.

Список типов данных SqLite

Попробуйте и обновите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...