Не в состоянии создать простую базу данных - PullRequest
0 голосов
/ 29 мая 2018

Я делаю свой последний годовой проект об исламе.Я хочу использовать базу данных SQLite в нем.Но я не могу просто создать в нем базу данных. Я хочу добавить в нее ежедневную посещаемость намаза.и второй как мне установить тип столбца на дату Помогите мне .... Заранее спасибо .. !!!

DataBaseHelper.java

package com.example.shakeelmughal.assanislam;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * Created by Shakeel Mughal on 5/29/2018.
 */

public class DataBaseHelper extends SQLiteOpenHelper {

    public static final String databasename="Test.db";
    public static final String Tbname = "student_table";
    public static final String Col_1 = "ID";
    public static final String Col_2 = "Name";
    public static final String Col_3 = "Class";
    public static final String Col_4 = "Marks";

    public DataBaseHelper(Context context) {
        super(context, databasename, null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        sqLiteDatabase.execSQL("CREATE TABLE "+Tbname+"(ID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, Class TEXT, Marks INTEGER)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS "+Tbname);
        onCreate(sqLiteDatabase);
    }
}

Моя основная деятельность для базы данных NamazCounterActivity, java

package com.example.shakeelmughal.assanislam;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;

public class NamazCounterActivity extends AppCompatActivity {

    DataBaseHelper mydb;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_namaz_counter);


        mydb = new DataBaseHelper(this);
        mydb.getWritableDatabase();

        //home button
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
        }


    }

    //function for going back to previous activity
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(item.getItemId() == android.R.id.home)
            finish();
        return super.onOptionsItemSelected(item);
    }
}

1 Ответ

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

Ваш код работает нормально, например, использование вашего кода привело к: -

Database Version = 1
Table Name = android_metadata Created Using = CREATE TABLE android_metadata (locale TEXT)
Table = android_metadata ColumnName = locale ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
Table Name = student_table Created Using = CREATE TABLE student_table(ID INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, Class TEXT, Marks INTEGER)
Table = student_table ColumnName = ID ColumnType = INTEGER Default Value = null PRIMARY KEY SEQUENCE = 1
Table = student_table ColumnName = Name ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
Table = student_table ColumnName = Class ColumnType = TEXT Default Value = null PRIMARY KEY SEQUENCE = 0
Table = student_table ColumnName = Marks ColumnType = INTEGER Default Value = null PRIMARY KEY SEQUENCE = 0
Table Name = sqlite_sequence Created Using = CREATE TABLE sqlite_sequence(name,seq)

Так что отвечает "Невозможно создать простую базу данных"

В SQLite нет определенного типа данных для дат.На самом деле в SQLite тип не так уж важен, так как вы можете хранить любой тип значения в столбце любого типа (кроме псевдонима столбца rowid , который может быть только INTEGER).

Важно то, как вы сохраняете данные.Есть заметные преимущества в сохранении даты в распознанном формате / типе.

например, согласно: -

2.2.Дата и время Тип данных SQLite не имеет класса хранения, выделенного для хранения дат и / или времени.Вместо этого встроенные функции даты и времени в SQLite способны сохранять даты и время в виде значений TEXT, REAL или INTEGER:

TEXT в виде строк ISO8601 ("YYYY-MM-DD HH: MM: SS.SSS ").НАСТОЯЩЕЕ, как юлианские числа, число дней с полудня в Гринвиче 24 ноября 4714 г. до н.э. в соответствии с Григорианским календарем.INTEGER как Unix Time, количество секунд с 1970-01-01 00:00:00 UTC.Приложения могут сохранять даты и время в любом из этих форматов и свободно конвертировать между форматами, используя встроенные функции даты и времени.

Типы данных в SQLite версии 3

Короче говоря, приведенная выше ссылка ДОЛЖНА ПРОЧИТАТЬ и действительно является ответом на ваш вопрос "howя установил тип столбца на дату ".Здесь также приводится очень краткий обзор.

Эта ссылка может оказаться полезной Функции даты и времени

Демонстрация

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

    DBHelper mydb; //<<<< Note the DatabaseHelper class has been renamed for my convenience
    mydb = new DBHelper(this);
    SQLiteDatabase sqldb = mydb.getWritableDatabase();

    sqldb.delete(DBHelper.Tbname,null,null); //<<<< delete all rows, if any

    //Prepare to insert a row
    ContentValues cv = new ContentValues();
    cv.put(DBHelper.Col_2,"2018-01-01 10:30:00"); //<<<< recognised date format
    cv.put(DBHelper.Col_3,100.99D); //<<<< Double into a column defined as TEXT
    cv.put(DBHelper.Col_4, "Sorry you scored nothing"); //<<<< Text into an INTEGER
    sqldb.insert(
            DBHelper.Tbname,
            null,
            cv
    );
    cv.clear();
    // Prepare to insert a 2nd row
    cv.put(DBHelper.Col_2,"Fred");
    cv.put(DBHelper.Col_3,System.currentTimeMillis()); //<<<<< can be used stores long as INTEGER
    sqldb.insert(DBHelper.Tbname,null,cv);

    // get all the rows from the table
    Cursor csr = sqldb.query(DBHelper.Tbname,
            null,
            null,
            null,
            null,
            null,
            null
    );
    while (csr.moveToNext()) {
        Log.d("DATA",
                "ROW " + csr.getPosition() +
                        " has a value of " +
                        String.valueOf(csr.getLong(csr.getColumnIndex(DBHelper.Col_1))) +
                        " in the " + DBHelper.Col_1 +
                        " column, a value of " +
                        csr.getString(csr.getColumnIndex(DBHelper.Col_2)) +
                        " in the " +
                        DBHelper.Col_2 +
                        " column, a value of " +
                        csr.getString(csr.getColumnIndex(DBHelper.Col_3)) +
                        " in the " +
                        DBHelper.Col_3 +
                        " column, and a value of " +
                        csr.getString(csr.getColumnIndex(DBHelper.Col_4)) +
                        " in the " +
                        DBHelper.Col_4 +
                        " column."
        );
    }
    csr.close(); //<<<< Should always close a Cursor when done with it

Вышеуказанное приводит к тому, что в журнал выводится следующее: -

ROW 0 has a value of 5 in the ID column, a value of 2018-01-01 10:30:00 in the Name column, a value of 100.99 in the Class column, and a value of Sorry you scored nothing in the Marks column.
    ROW 1 has a value of 6 in the ID column, a value of Fred in the Name column, a value of 1527600028305 in the Class column, and a value of null in the Marks column.
  • идентификаторывыше, чем ожидалось из-за нескольких запусков приложения.
  • 1527600028305 - это отметка времени, когда он был запущен.
...