2015-05-03 2 views
0

У меня есть два класса: классНе удается найти столбец SQL в проекте андроида

База данных:

package com.qstra.soamazingtodoapp; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DBAdapter { 

    private static final String TAG = "DBAdapter"; // used for logging database 
                // version changes 

    // Field Names: 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_TASK = "task"; 
    public static final String KEY_DATE = "date"; 

    public static final String KEY_HOUR = "hour"; 
    public static final String KEY_MINUTE = "minute"; 

    public static final String[] ALL_KEYS = new String[] { KEY_ROWID, KEY_TASK, 
      KEY_DATE, KEY_HOUR, KEY_MINUTE }; 

    // Column Numbers for each Field Name: 
    public static final int COL_ROWID = 0; 
    public static final int COL_TASK = 1; 
    public static final int COL_DATE = 2; 
    public static final int COL_HOUR = 3; 
    public static final int COL_MINUTE = 4; 

    // DataBase info: 
    public static final String DATABASE_NAME = "dbToDo"; 
    public static final String DATABASE_TABLE = "mainToDo"; 
    public static final int DATABASE_VERSION = 2; // The version number must be 
                // incremented each time a 
                // change to DB structure 
                // occurs. 

    // SQL statement to create database 
    private static final String DATABASE_CREATE_SQL = "CREATE TABLE " 
      + DATABASE_TABLE + " (" + KEY_ROWID 
      + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_TASK 
      + " TEXT NOT NULL, " + KEY_DATE + " TEXT" + KEY_HOUR + " TEXT" 
      + KEY_MINUTE + " TEXT" + ");"; 

    private final Context context; 
    private DatabaseHelper myDBHelper; 
    private SQLiteDatabase db; 

    public DBAdapter(Context ctx) { 
     this.context = ctx; 
     myDBHelper = new DatabaseHelper(context); 
    } 

    // Open the database connection. 
    public DBAdapter open() { 
     db = myDBHelper.getWritableDatabase(); 
     return this; 
    } 

    // Close the database connection. 
    public void close() { 
     myDBHelper.close(); 
    } 

    // Add a new set of values to be inserted into the database. 
    public long insertRow(String task, String date, String hour, String minute) { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(KEY_TASK, task); 
     initialValues.put(KEY_DATE, date); 
     initialValues.put(KEY_HOUR, hour); 
     initialValues.put(KEY_MINUTE, minute); 

     // Insert the data into the database. 
     return db.insert(DATABASE_TABLE, null, initialValues); 
    } 

    // Delete a row from the database, by rowId (primary key) 
    public boolean deleteRow(long rowId) { 
     String where = KEY_ROWID + "=" + rowId; 
     return db.delete(DATABASE_TABLE, where, null) != 0; 
    } 

    public void deleteAll() { 
     Cursor c = getAllRows(); 
     long rowId = c.getColumnIndexOrThrow(KEY_ROWID); 
     if (c.moveToFirst()) { 
      do { 
       deleteRow(c.getLong((int) rowId)); 
      } while (c.moveToNext()); 
     } 
     c.close(); 
    } 

    // Return all data in the database. 
    public Cursor getAllRows() { 
     String where = null; 
     Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS, where, null, null, 
       null, null, null); 
     if (c != null) { 
      c.moveToFirst(); 
     } 
     return c; 
    } 

    // Get a specific row (by rowId) 
    public Cursor getRow(long rowId) { 
     String where = KEY_ROWID + "=" + rowId; 
     Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS, where, null, null, 
       null, null, null); 
     if (c != null) { 
      c.moveToFirst(); 
     } 
     return c; 
    } 

    // Change an existing row to be equal to new data. 
    public boolean updateRow(long rowId, String task, String date, String hour, String minute) { 
     String where = KEY_ROWID + "=" + rowId; 
     ContentValues newValues = new ContentValues(); 
     newValues.put(KEY_TASK, task); 
     newValues.put(KEY_DATE, date); 
     newValues.put(KEY_HOUR, hour); 
     newValues.put(KEY_MINUTE, minute); 

     // Insert it into the database. 
     return db.update(DATABASE_TABLE, newValues, where, null) != 0; 
    } 

    private static class DatabaseHelper extends SQLiteOpenHelper { 
     DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase _db) { 
      _db.execSQL(DATABASE_CREATE_SQL); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) { 
      Log.w(TAG, "Upgrading application's database from version " 
        + oldVersion + " to " + newVersion 
        + ", which will destroy all old data!"); 

      // Destroy old database: 
      _db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 

      // Recreate new database: 
      onCreate(_db); 
     } 
    } 

} 

MainActivity класс:

package com.qstra.soamazingtodoapp; 


import com.qstratwo.soamazingtodoapp.R; 

import android.app.Activity; 
import android.app.Dialog; 
import android.app.TimePickerDialog; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.text.TextUtils; 
import android.text.format.Time; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TimePicker; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    Time today = new Time(Time.getCurrentTimezone()); 
    DBAdapter myDb; 
    EditText etTasks; 
    static final int DIALOG_ID = 0; 
    int hour_x; 
    int minute_x; 
    String string_hour_x, string_minute_x="None"; 

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

     etTasks = (EditText) findViewById(R.id.editText1); 
     openDB(); 
     listViewItemClick(); 
     listViewItemLongClick(); 
     populateListView(); 
    // setNotification(); 

    } 

    @Override 
    protected Dialog onCreateDialog(int idD){ 
     if (idD== DIALOG_ID){ 
      return new TimePickerDialog(MainActivity.this, kTimePickerListener, hour_x,minute_x, false); 
     } 
     return null; 

    } 
    protected TimePickerDialog.OnTimeSetListener kTimePickerListener = 
      new TimePickerDialog.OnTimeSetListener() { 

       @Override 
       public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 

         hour_x=hourOfDay; 
         minute_x=minute; 


        string_hour_x = Integer.toString(hour_x); 
        string_minute_x = Integer.toString(minute_x); 

         Toast.makeText(MainActivity.this, hour_x+" : "+ minute_x,Toast.LENGTH_LONG).show(); 

       } 

      }; 



    public void setNotification(View v) { 
     showDialog(DIALOG_ID); 

    } 







    private void openDB() { 
     myDb = new DBAdapter(this); 
     myDb.open();  
    } 

    public void onClick_AddTask (View v) { 

     today.setToNow(); 
     String timestamp = today.format("%Y-%m-%d %H:%m:%s"); 
     if(!TextUtils.isEmpty(etTasks.getText().toString())) { 

      myDb.insertRow(etTasks.getText().toString(),timestamp,string_hour_x, string_minute_x); 

    } 
     populateListView(); 


     } 




    private void populateListView() { 
     Cursor cursor = myDb.getAllRows(); 
     String[] fromFieldNames=new String[] { 
       DBAdapter.KEY_ROWID, DBAdapter.KEY_TASK }; 
     int[] toViewIDs = new int[] { 
       R.id.textViewItemNumber, R.id.textViewItemTasks}; 
     SimpleCursorAdapter myCursorAdapter; 
     myCursorAdapter = new SimpleCursorAdapter(getBaseContext(), R.layout.item_layout, cursor, fromFieldNames, toViewIDs, 0); 
     ListView myList = (ListView) findViewById(R.id.listViewTask); 
     myList.setAdapter(myCursorAdapter); 


    } 

    private void updateTask(long id){ 
     Cursor cursor = myDb.getRow(id); 
     if (cursor.moveToFirst()){ 
      String task = etTasks.getText().toString(); // POBIERANIE Z TEXTFIELD 
      today.setToNow(); 
      String date = today.format("%Y-%m-%d %H:%m"); 

//   String string_minute_x= Integer.toString(minute_x); 
//   String string_houte_x=Integer.toString(hour_x); 

      myDb.updateRow(id, task, date, string_hour_x, string_minute_x ); 

     } 
     cursor.close(); 

    }public void onClick_DeleteTasks(View v) { 
     myDb.deleteAll(); 
     populateListView(); 
    } 
    public void onClick_AppClose(View v) { 
     moveTaskToBack(true); 
     MainActivity.this.finish(); 
    } 

    public void listViewItemLongClick(){ 

     ListView myList = (ListView) findViewById(R.id.listViewTask); 
     myList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

      @Override 
      public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
        int arg2, long id) { 
       // TODO Auto-generated method stub 
       myDb.deleteRow(id); 
       populateListView(); 
       return false; 

      } 




     }); 

     } 





    private void listViewItemClick(){ 
     ListView myList = (ListView) findViewById(R.id.listViewTask); 
     myList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long id) { 
       updateTask(id); 
       populateListView(); 
       displayToast(id); 

      } 

     }); 
    } 

    private void displayToast(long id){ 
     Cursor cursor = myDb.getRow(id); 
     if(cursor.moveToFirst()) { 
      long idDB = cursor.getLong(DBAdapter.COL_ROWID); 
      String task = cursor.getString(DBAdapter.COL_TASK); 
      String date = cursor.getString(DBAdapter.COL_DATE); 

      String message = "ID: " + idDB + "\n" + "Task: " + task + "\n" + "Date: " + date; 

      Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show(); 

     } 

     cursor.close(); 
    } 
} 

(получение идентификатора и текст из texfield в базу данных работает отлично, но ..)

Я пытаюсь получить значения часов и минут из TimePickerDialog и вставить в da tabase, но кажется, что он не работает.

Снимок экрана из журнала кошки:

i.imgur.com/srQMgZr.png

Почему не может его увидеть столбец с именем «час»?

+2

ваша ссылка на изображение не работает. Кроме того, было бы лучше, если бы вы вставили все соответствующие строки кода здесь, а не перенаправляли нас на внешний сайт – Razgriz

ответ

0

Добавить запятые в своем заявлении для создания базы данных

// SQL statement to create database 
    private static final String DATABASE_CREATE_SQL = "CREATE TABLE " 
      + DATABASE_TABLE + " (" + KEY_ROWID 
      + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_TASK 
      + " TEXT NOT NULL, " + KEY_DATE + " TEXT," + KEY_HOUR + " TEXT," 
      + KEY_MINUTE + " TEXT" + ")"; 
Смежные вопросы