Member 12745794 Ответов: 1

Как соединить две таблицы, чтобы вернуть заметки пользователю?


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



вот код..

public class NotebookDbAdapter {

    private static final String DATABASE_NAME = "notebook.db";
    private static final int DATABASE_VERSION = 3;


    public static final String USER_TABLE = "users";
    public static final String COLUMN_ID_USER = "_id";
    public static final String COLUMN_EMAIL = "email";
    public static final String COLUMN_PASS = "password";

    public static final String NOTE_TABLE = "note";
    public static final String COLUMN_ID = "_id";
    public static final String COLUMN_TITLE = "title";
    public static final String COLUMN_MESSAGE = "message";
    public static final String COLUMN_CATEGORY = "category";
    public static final String COLUMN_DATE = "date";

    private String[] allColumns = {COLUMN_ID, COLUMN_TITLE, COLUMN_MESSAGE, COLUMN_CATEGORY,
            COLUMN_DATE};

    public static final String CREATE_TABLE_NOTE = " create table " + NOTE_TABLE + " ( "
            + COLUMN_ID + " integer primary key autoincrement, "
            + COLUMN_TITLE + " text not null, "
            + COLUMN_MESSAGE + " text not null, "
            + COLUMN_CATEGORY + " text not null, "
            + COLUMN_DATE + ");";

    public static final String CREATE_TABLE_USERS = " create table " + USER_TABLE + " ( "
            + COLUMN_ID_USER + " integer primary key autoincrement, "
            + COLUMN_EMAIL + " TEXT , "
            + COLUMN_PASS + " TEXT );";

    private SQLiteDatabase sqlDB;
    private Context context;

    private NotebookDbHelper notebookDbHelper;

    public NotebookDbAdapter(Context ctx) {
        context = ctx;
    }

    public NotebookDbAdapter open() throws android.database.SQLException {
        notebookDbHelper = new NotebookDbHelper(context);
        sqlDB = notebookDbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        notebookDbHelper.close();
    }

    public Note createNote(String title, String message, Note.Category category) {
        ContentValues values = new ContentValues();
        values.put(COLUMN_TITLE, title);
        values.put(COLUMN_MESSAGE, message);
        values.put(COLUMN_CATEGORY, category.name());
        values.put(COLUMN_DATE, Calendar.getInstance().getTimeInMillis() + "");

        long insertId = sqlDB.insert(NOTE_TABLE, null, values);

        Cursor cursor = sqlDB.query(NOTE_TABLE,
                allColumns, COLUMN_ID + " = " + insertId, null, null, null, null);

        cursor.moveToFirst();
        Note newNote = cursorToNote(cursor);
        cursor.close();
        return newNote;
    }

    public long deleteNote(long idToDelete) {
        return sqlDB.delete(NOTE_TABLE, COLUMN_ID + " = " + idToDelete, null);
    }

    public long updateNote(long idToUpdate, String newTitle, String newMessage, Note.Category newCategory) {
        ContentValues values = new ContentValues();
        values.put(COLUMN_TITLE, newTitle);
        values.put(COLUMN_MESSAGE, newMessage);
        values.put(COLUMN_CATEGORY, newCategory.name());
        values.put(COLUMN_DATE, Calendar.getInstance().getTimeInMillis() + "");

        return sqlDB.update(NOTE_TABLE, values, COLUMN_ID + " = " + idToUpdate, null);

    }


Что я уже пробовал:

Я пробовал это сделать, но все равно ничего не получал и получал ошибки... может ли кто-нибудь указать правильный путь для успеха моего проекта? Спасибо!

1 Ответов

Рейтинг:
0

Wendelius

Похоже, что в инструкции create NOTE_TABLE отсутствует тип данных для COLUMN_DATE. Так что у вас, вероятно, должно быть что-то вроде

public static final String CREATE_TABLE_NOTE = " create table " + NOTE_TABLE + " ( "
        + COLUMN_ID + " integer primary key autoincrement, "
        + COLUMN_TITLE + " text not null, "
        + COLUMN_MESSAGE + " text not null, "
        + COLUMN_CATEGORY + " text not null, "
        + COLUMN_DATE + " integer);";



Дополнительные сведения о датах в SQLite см. В разделе Типы Данных В SQLite Версии 3[^]


Member 12745794

@Mika Wendelius спасибо за ответ.. у меня есть вопрос.. знаете ли вы, как запросить его, получив заметки вместе с введенным пользователем?

Wendelius

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

ВЫБИРАТЬ *
Из примечания n
Внутреннее соединение пользователи
На Н.CreatedById = у.Параметр _id

Для получения дополнительной информации о соединениях см. SQLite присоединяется[^]

Member 12745794

спасибо. должен ли я также отредактировать код для просмотра заметки? или просто запросите его в SQL?

Wendelius

Боюсь, я не могу ответить на этот вопрос. Насколько я вижу, в вашем вопросе нет кода, связанного с просмотром заметок.

Member 12745794

используя rawQuery?