Вставка и получение данных в / из SQLite - PullRequest
0 голосов
/ 07 мая 2018

Я новичок в sqllite в android. Я добавляю записи в базу данных sql, и запрос вставки, и выбор не выдают ошибку времени выполнения, за исключением того, что у меня пустой курсор при извлечении данных (при выборе запроса). дайте мне знать, если есть проблема при вставке значений или их извлечении. Как и при выборе запроса, я получаю имена столбцов, но без записи. вот мой код.

public class SQLHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "MyDb.db";
private static final int DATABASE_VERSION = 1;
private SQLiteDatabase database;

public String stringArray[];
private ArrayList<tasksList> arrayList;

public final static String PROCESS_TABLE = "Process";
public final static String DB_P_ID = "db_process_id";
public final static String PROCESS_ASSIGNMENT_ID = "process_id";
public final static String CASETITLE = "case_title";
public final static String APPEARANCE_DATE = "appearance_date";
public final static String APPEARANCE_TIME = "appearance_time";
public final static String APPEARANCE_REASON = "appearance_reason"; 
public final static String COURT_NAME = "court_name";
public final static String RESPONDENT_NAME = "respondent_name";
public final static String ADDRESS = "address";
public final static String CONTACT_NO = "contact_no";
public final static String CNIC = "cnic";
public final static String NOTICE_NUMBER = "notice_number";

private static final String DATABASE_CREATE_PROCESS_TABLE = " CREATE TABLE "+ PROCESS_TABLE + " (db_process_id integer primary key autoincrement," +
        " process_id text not null," +
        " case_title text not null,appearanc e_date text not null ,appearance_time text not null, court_name text not null , respondent_name text not null ," +
        " address text not null ,contact_no text not null ,cnic text not null , appearance_reason text not null , notice_number text not null );";

public SQLHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}


@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    sqLiteDatabase.execSQL(DATABASE_CREATE_PROCESS_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
    Log.w(SQLHelper.class.getName(),"Upgrading database from version " + oldVersion + " to "
            + newVersion + ", which will destroy all old data");
    sqLiteDatabase.execSQL("DROP TABLE IF EXISTS Process");
    onCreate(sqLiteDatabase);
}

public Boolean insertProcess(String id, String case_Title,String app_date, String app_time, String app_reason,
                           String court_name,String name,String location,String cnic,String notice_no,String contact_no) {

    database = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(PROCESS_ASSIGNMENT_ID, id);
    values.put(CASETITLE, case_Title);
    values.put(APPEARANCE_DATE, app_date);
    values.put(APPEARANCE_TIME, app_time);
    values.put(APPEARANCE_REASON, app_reason);
    values.put(COURT_NAME, court_name);
    values.put(RESPONDENT_NAME, name);
    values.put(ADDRESS, location);
    values.put(CONTACT_NO, contact_no);
    values.put(CNIC, cnic);
    values.put(NOTICE_NUMBER, notice_no);
    database.insert(PROCESS_TABLE, null, values);

    return true;

}

public Cursor getCompletedTask(Context applicationContext) {
    Context context = applicationContext;
    database = this.getReadableDatabase();
    String[] cols = new String[] { CASETITLE};

    Cursor mCursor = database.rawQuery(" Select * from " + PROCESS_TABLE , null);

 //        Cursor mCursor = database.query(true, PROCESS_TABLE, cols, null, null, null, null,  null, null);
    int size = mCursor.getCount();
    stringArray = new String[size];
    if (mCursor != null) {
        mCursor.moveToFirst();
        while (!mCursor.isAfterLast()) {
            String id = mCursor.getString(0);
            String title = mCursor.getString(1);

            tasksList fooditem=new tasksList();
            fooditem.setCase_id(id);
            fooditem.setCase_title(title);
            arrayList.add(fooditem);
            mCursor.moveToNext();
        }
    }
    return mCursor; // iterate to get each value.
}

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Ваша проблема в том, что у вас есть пробел в appearanc e_date text not null, то есть это должно быть appearance_date text not null

Сказать, что это само по себе не приведет к сбою, просто имя столбца будет appearanc , а не внешний вид_даты. Это вполне может вызвать последующее замешательство (например, ваша вероятная проблема, как указано ниже).

Это яркий пример того, почему рекомендуется полагаться на один источник для имен таблиц и столбцов. Так что вместо исправленного: -

private static final String DATABASE_CREATE_PROCESS_TABLE = " CREATE TABLE "+ PROCESS_TABLE + " (db_process_id integer primary key autoincrement," +
        " process_id text not null," +
        " case_title text not null,appearance_date text not null ,appearance_time text not null, court_name text not null , respondent_name text not null ," +
        " address text not null ,contact_no text not null ,cnic text not null , appearance_reason text not null , notice_number text not null );";

Я бы предложил что-то вроде: -

private static final String CREATE_PROCESS_TABLE = 
        "CREATE TABLE IF NOT EXISTS " +
                PROCESS_TABLE + 
                "(" +
                PROCESS_ASSIGNMENT_ID + " INTEGER PRIMARY KEY," + //NOTE you very likely don't want autoincrement
                CASETITLE + " TEXT NOT NULL," +
                APPEARANCE_DATE + " TEXT NOT NULL," +
                APPEARANCE_TIME + " TEXT NOt NULL," +
                COURT_NAME + " TEXT NOT NULL, " +
                RESPONDENT_NAME + " TEXT NOT NULL," +
                ADDRESS + " TEXT NOT NULL," +
                CONTACT_NO + " TEXT NOT NULL, " +
                CNIC + " TEXT NOT NULL," +
                APPEARANCE_REASON + " TEXT NOT NULL," +
                NOTICE_NUMBER + " TEXT NOT NULL" +
                ")";

Возможно, проблема связана с непредвиденным именем столбца appearan, а не с ожидаемым именем столбца appearance_date, так как попытка вставить запись не будет знать о столбце creation_date и не вставлять строку. Таким образом, ваш стол будет пустым.

Если вы посмотрите журнал, вы увидите нечто похожее на: -

05-07 21:13:54.724 1285-1285/? E/SQLiteLog: (1) table Process has no column named appearance_date

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

0 голосов
/ 07 мая 2018

вы создаете класс модели для вставки данных и извлечения данных ..

Попробуйте этот код ..

public class DBHelper extends SQLiteOpenHelper{

//USER TABLE
public static final String USER_TABLE_NAME = "MyTableTwo";
public static final String USER_COLUMN_USER_ID = "id";
public static final String USER_COLUMN_USER_NAME = "Item_Name";
public static final String USER_COLUMN_USER_ADDRESS = "Weight";
public static final String USER_COLUMN_USER_CREATED_AT = "MRP";
public static final String USER_COLUMN_USER_UPDATED_AT = "BARCODE";

public DBHelper(Context context,
                String dbName,
                Integer version) {
    super(context, dbName, null, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
    tableCreateStatements(db);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + USER_TABLE_NAME);
    onCreate(db);
}

private void tableCreateStatements(SQLiteDatabase db) {
    try {
        db.execSQL(
                "CREATE TABLE IF NOT EXISTS "
                        + USER_TABLE_NAME + "("
                        + USER_COLUMN_USER_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
                        + USER_COLUMN_USER_NAME + " VARCHAR(20), "
                        + USER_COLUMN_USER_ADDRESS + " VARCHAR(50), "
                        + USER_COLUMN_USER_CREATED_AT + " VARCHAR(10) DEFAULT " + getCurrentTimeStamp() + ", "
                        + USER_COLUMN_USER_UPDATED_AT + " VARCHAR(10) DEFAULT " + getCurrentTimeStamp() + ")"
        );

    } catch (SQLException e) {
        e.printStackTrace();
    }
}
public List<MyTableTwo> getMyItems() {
    List<MyTableTwo> mySuperList = new ArrayList<>();
    SQLiteDatabase db = this.getReadableDatabase();
    String selectQuery = "SELECT  * FROM " + USER_TABLE_NAME ;
    Cursor c = db.rawQuery(selectQuery, null);
    if (c != null) {
        c.moveToFirst();
        while (c.isAfterLast() == false) {
            MyTableTwo myTable = new MyTableTwo();
            myTable.itemName = (c.getString(c.getColumnIndex("Item_Name")));
            myTable.weight = (c.getString(c.getColumnIndex("Weight")));
            myTable.mrp = (c.getString(c.getColumnIndex("MRP")));
            myTable.barcod = (c.getString(c.getColumnIndex("BARCODE")));

            mySuperList.add(myTable);
            c.moveToNext();
        }
    }
    return mySuperList;
}

public Long insertUser(MyTableTwo user) throws Exception {
    try {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(USER_COLUMN_USER_NAME, user.itemName);
        contentValues.put(USER_COLUMN_USER_ADDRESS, user.barcod);
        contentValues.put(USER_COLUMN_USER_CREATED_AT, user.weight);
        contentValues.put(USER_COLUMN_USER_UPDATED_AT, user.barcod);

        return db.insert(USER_TABLE_NAME, null, contentValues);
    } catch (Exception e) {
        e.printStackTrace();
        throw e;
    }
}

private String getCurrentTimeStamp() {
    return String.valueOf(System.currentTimeMillis() / 1000);
}

}

и используется как указано ниже.

DBHelper dbHelper=new DBHelper(DbInsert.this,"DB",1);
            MyTableTwo myTableTwo=new MyTableTwo("abcd","5kg","120","xyz");
            try {
                dbHelper.insertUser(myTableTwo);
            } catch (Exception e) {
                e.printStackTrace();
            }

класс pojo ..

public class MyTableTwo {

public String itemName,weight,mrp,barcod;
public MyTableTwo(){}
public MyTableTwo(String itemName, String weight, String mrp, String barcod) {
    this.itemName = itemName;
    this.weight = weight;
    this.mrp = mrp;
    this.barcod = barcod;
}

}

вы также делаете метод установки геттера ..

...