#android #sqlite #android-activity #android-sqlite #sqliteopenhelper
#Android #sqlite #android-активность #android-sqlite #sqliteopenhelper
Вопрос:
у меня все еще есть проблема с этой базой данных sqlitedatabase. вы знаете, я хочу хранить и извлекать данные в базе данных sqlite. у меня есть таблица с именем tour с пятью столбцами. моя база данных была создана, и я мог видеть ее через filemanager, но проблема в том, что оба метода insert и read не работают. я выясняю это, получая количество строк с помощью этой команды. у меня есть класс, который управляет базой данных с именем: SQLOpenHelper с двумя методами для добавления и чтения
и вызовите метод в MainActivity
cursor.getCount();
это дает мне 0
мой класс SQLOpenHelper:
package com.google.site.sqlHelper;
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 Sql_openHelper extends SQLiteOpenHelper {
public Sql_openHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
private static final String DATABASE_NAME="tours.db";
private static final int DATABASE_VERSION=1;
private static final String TABLE_TOURS="tours";
private static final String COLUMN_ID="tourId";
private static final String COLUMN_TITLE="title";
private static final String COLUMN_DESC="description";
private static final String COLUMN_PRICE="price";
private static final String COLUMN_IMAGE="image";
private static final String TABLE_CREATE="CREATE TABLE " TABLE_TOURS " ("
COLUMN_ID " INTEGER PRIMARY KEY AUTOINCREMENT, "
COLUMN_TITLE " TEXT, "
COLUMN_DESC " TEXT, "
COLUMN_IMAGE " TEXT, "
COLUMN_PRICE " TEXT "
" )";
private static final String SQL_DELETE_ENTRIES=
"DROP TABLE IF EXISTS " TABLE_TOURS;
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
db.close();
}
@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
onUpgrade(db,oldVersion,newVersion);
}
public void InsertDb(tour tour)
{
ContentValues values=new ContentValues();
values.put(COLUMN_TITLE, tour.getTitle());
values.put(COLUMN_DESC, tour.getDescription());
values.put(COLUMN_PRICE, tour.getPrice());
values.put(COLUMN_IMAGE, tour.getImage());
SQLiteDatabase db=this.getWritableDatabase();
db.insert(TABLE_TOURS, null, values);
Log.d("InsertDb method", "InsertDb method operation has been done");
}
public tour Readdb(tour tour)
{
long count=0;
SQLiteDatabase db=this.getReadableDatabase();
String[] tableColumns = new String[] {
COLUMN_ID,COLUMN_TITLE,COLUMN_DESC,COLUMN_PRICE,COLUMN_IMAGE
};
try{
Cursor cursor =
db.query(TABLE_TOURS, // a. table
tableColumns, // b. column names
COLUMN_TITLE " like '" tour.getTitle() "'", // c. selections
new String[] { COLUMN_TITLE }, // d. selections args
null, // e. group by
null, // f. having
null, // g. order by
null); // h. limit
cursor.moveToFirst();
count=cursor.getCount();
tour.setTitle(cursor.getString(cursor.getColumnIndex(COLUMN_TITLE)));
} catch(Exception e){Log.d("Error: ",e.getMessage() );}
Log.d("Read method", "Read method operation has been done " String.valueOf(count));
return tour;
}
}
и это мой класс MainActivity:
package com.google.site.android_developer_sqlite;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import com.google.site.sqlHelper.Sql_openHelper;
import com.google.site.sqlHelper.UIHelper;
import com.google.site.sqlHelper.tour;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Sql_openHelper helper=new Sql_openHelper(this);
tour tour=new tour();
tour.setTitle("Happy birthday");
tour.setDescription("you are the best one that i love in this world");
tour.setImage("you don't need image of u're self");
tour.setPrice("25$");
tour.setTours("no need");
helper.InsertDb(tour);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void btnclick(View view)
{
Sql_openHelper helper=new Sql_openHelper(this);
tour tour=new tour();
tour=helper.Readdb(tour);
UIHelper.displayText(this, R.id.textview, tour.getTitle() " " tour.getDescription());
}
}
основная проблема заключается в том, что cursor.getCount(); возвращает 0, поэтому это означает, что мой метод insert метод не работает, но он не знает, почему это не происходит из-за ошибки!!!
Комментарии:
1. Внимательно проверьте, что ваша база данных не создана.
2. я проверяю это в проводнике файлов DDMS под именем моего пакета, там была папка с именем data, а два файла в папке data — tours.db и tours.db.journal
3. Вы очень странно говорите о файлах и папках. Файлы находятся в папках. И папки могут быть В других папках. Вы говорили о /data/data/packagename/tours.db ?
4. Да: D, раньше я описывал это очень подробно. именно это я и имею в виду, дорогой greenapp
Ответ №1:
db.query(TABLE_TOURS, // a. table
tableColumns, // b. column names
COLUMN_TITLE " like '" tour.getTitle() "'", // c. selections
new String[] { COLUMN_TITLE }, // d. selections args
Аргументы выбора работают только тогда, когда у вас действительно есть параметры в выборе:
db.query(...
COLUMN_TITLE " like ?", // c. selections
new String[] { tour.getTitle() }, // d. selections args
Ответ №2:
Перепишите btnclick так же, как это
public void btnclick(View view)
{
Sql_openHelper helper=new Sql_openHelper(this);
tour tour=new tour();
tour.setTitle("Happy");
tour=helper.Readdb(tour);
UIHelper.displayText(this, R.id.textview, tour.getTitle() " " tour.getDescription());
}