Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
hornet2319
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 3
#1

Чтение данных из базы - Программирование Android

29.11.2014, 11:30. Просмотров 714. Ответов 2
Метки нет (Все метки)

Доброго времени суток ув. форумчане!
Возникла проблема при попытке прочитать данные из БД, которая сохранена в external storage. Помогите разобраться в чем беда ибо мне кажется что я уже все перепробовал. При попытке чтения выдает ошибку, хотя все вроде правильно.
код для инициализации бд:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public class DataBaseHelper extends SQLiteOpenHelper
{
private static String TAG = "DataBaseHelper"; // Tag just for the LogCat window
//destination path (location) of our database on device
private static String DB_PATH = "/mnt/sdcard/Android/data/nutrition/"; 
private static String DB_NAME ="nutrition_db.sqlite";// Database name
private SQLiteDatabase mDataBase; 
private final Context mContext;
 
public DataBaseHelper(Context context) 
{
    super(context, DB_NAME, null, 1);// 1? its Database Version
  
    this.mContext = context;
}   
 
public void createDataBase() throws IOException
{
    //If database not exists copy it from the assets
 
    boolean mDataBaseExist = checkDataBase();
    if(!mDataBaseExist)
    {
        this.getReadableDatabase();
        this.close();
        
        
        try 
        {
            //Copy the database from assests
            copyDataBase();
            Log.e("DataBase", "Database copied");
        } 
        catch (IOException mIOException) 
        {
            throw new Error("ErrorCopyingDataBase");
        }
    }
}
    //Check that the database exists here: /data/data/your package/databases/Da Name
    private boolean checkDataBase()
    {
        File dbFile = new File(DB_PATH + DB_NAME);
        
        Log.v("dbFile", dbFile + "   "+ dbFile.exists());
        
        return dbFile.exists();
    }
 
    //Copy the database from assets
    private void copyDataBase() throws IOException
    {
        InputStream mInput = mContext.getAssets().open(DB_NAME);
        String outFileName = DB_PATH + DB_NAME;
        OutputStream mOutput = new FileOutputStream(outFileName);
        byte[] mBuffer = new byte[1024];
        int mLength;
        while ((mLength = mInput.read(mBuffer))>0)
        {
            mOutput.write(mBuffer, 0, mLength);
        }
        mOutput.flush();
        mOutput.close();
        mInput.close();
    }
 
    //Open the database, so we can query it
    public boolean openDataBase() throws SQLException
    {
        String mPath = DB_PATH + DB_NAME;
        Log.v("mPath", mPath);
        
        mDataBase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.OPEN_READONLY);
        return mDataBase != null;
    }
небольшой адаптер с запросами для работы с бд:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
public class DBAdapter 
{
    protected static final String TAG = "DataAdapter";
 
    private final Context mContext;
    private SQLiteDatabase mDb;
    private DataBaseHelper mDbHelper;
    
 
    // Table Names
    private static final String TABLE_FOOD="Food";
    private static final String TABLE_CATHEGORIES = "Cathegory";
    private static final String TABLE_FOOD_CATH = "FoodCath";
 
    // Common column names
    private static final String KEY_ID = "id";
    
    // Food Table - column names
    private static final String FOOD_NAME = "Name";
    private static final String FOOD_CALORIES = "Calories";
    private static final String FOOD_PROTEINS = "Proteins";
    private static final String FOOD_FATS = "Fats";
    private static final String FOOD_HYDROCARBONATES = "Hydrocarbonates";
 
    // Cathegory Table - column names
    private static final String CAT_NAME = "CatName";
 
    // FoodCath Table - column names
    private static final String FC_FOOD_ID = "FoodID";
    private static final String FC_CAT_ID = "CathID"; 
 
    public DBAdapter(Context context) 
    {
        this.mContext = context;
        mDbHelper = new DataBaseHelper(mContext);
    }
 
    public DBAdapter createDatabase() throws SQLException 
    {
        try 
        {
            mDbHelper.createDataBase();
        } 
        catch (IOException mIOException) 
        {
            Log.e(TAG, mIOException.toString() + "  UnableToCreateDatabase");
            throw new Error("UnableToCreateDatabase");
        }
        return this;
    }
 
    public DBAdapter open() throws SQLException 
    {
        try 
        {
            mDbHelper.openDataBase();
            mDbHelper.close();
            mDb = mDbHelper.getReadableDatabase();
        } 
        catch (SQLException mSQLException) 
        {
            Log.e(TAG, "open >>"+ mSQLException.toString());
            throw mSQLException;
        }
        return this;
    }
 
    public void close() 
    {
        mDbHelper.close();
    }
    
    public ArrayList<Food> getFoodByName(String name){
        ArrayList<Food> foods = new ArrayList<Food>();
 
     String selectQuery = "SELECT  * FROM " + TABLE_FOOD + " WHERE " + FOOD_NAME + " LIKE '" +name+"%'" ;
  
        Cursor c = mDb.rawQuery(selectQuery, null);
        
     
        if (c.moveToFirst()) {
            do {
        Food food = new Food();
        food.setFood_id(c.getInt(c.getColumnIndex(KEY_ID)));
        food.setFoodName((c.getString(c.getColumnIndex(FOOD_NAME))));
        food.setFood_calories(c.getLong(c.getColumnIndex(FOOD_CALORIES)));
        food.setFood_proteins(c.getFloat(c.getColumnIndex(FOOD_PROTEINS)));
        food.setFood_fats(c.getFloat(c.getColumnIndex(FOOD_FATS)));
        food.setFood_hydrocarbonates(c.getFloat(c.getColumnIndex(FOOD_HYDROCARBONATES)));
        foods.add(food);
            } while (c.moveToNext());
        }
        return foods;
    }
Логи:
Кликните здесь для просмотра всего текста
V/dbFile(8860): /mnt/sdcard/Android/data/nutrition/nutrition_db.sqlite true
(true в конце результат проверки существует ли файл)
I/SqliteDatabaseCpp(8860): sqlite returned: error code = 1, msg = no such table: Food, db=/mnt/sdcard/Android/data/nutrition/nutrition_db.sqlite
E/AndroidRuntime(8860): at nutrition.logic.DBAdapter.getFoodByName(DBAdapter.java:78)
E/AndroidRuntime(8860): at nutrition.activities.FoodChoosingActivity$DBTask.doInBackground(FoodChoosingActivity.java:82)

Скрин моей бд чтобы вы убедились что таблица Food там все же присутствует:
также попытаюсь загрузить саму бд, может причина все-таки в ней
Кликните здесь для просмотра всего текста
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2014, 11:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение данных из базы (Программирование Android):

TableLayout - чтение данных из строк, изменение данных в строках - Программирование Android
Заполнить TableLayout довольно просто. А вот прочитать ... И примеры есть в интернете, и клипса не ругается, и методы эти существуют...

Постолбцовое отображение данных из базы данных SQLite - Программирование Android
Уважаемые форумчане, помогите пожалуйста. Необходимо вывести данные из таблицы базы данных в TextView. Вот код, когда в TextView...

Android - Вывод данных из базы данных - Программирование Android
Всем здравствуйте! Задача не сложная, надо просто знать:-[ Нужно вывести данные из БД SQLite в таблицу. Не надо их ни добавлять, ни...

Вывод данных из базы данных SQLite - Программирование Android
Здравствуйте уважаемые форумчане! Делаю программу для работы с базой данных SQLite. Смысл простой: есть одна база, в ней 9 таблиц, от 2 до...

Чтение данных БД - Программирование Android
Доброго времени суток! 2 вопроса: 1 - Что эффективнее использовать? - JDBC драйвер, подключение к MySql и далее чтение данных или...

Чтение данных из файла - Программирование Android
Пытаюсь считать текст из файла, который находится по пути assets\teams\realmadrid.txt , но вываливается ошибка. В чем дело? ...

2
YuraAAA
1576 / 1317 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
29.11.2014, 12:38 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
hornet2319, не используйте такой путь к БД. Нужно писать context.getDatabasePath(DBNAME)
1
hornet2319
0 / 0 / 0
Регистрация: 15.04.2014
Сообщений: 3
29.11.2014, 15:17  [ТС] #3
но ведь разве имеет значение путь к бд? я думал что не важно где она находится, лишь бы существовала. Ок исправим. Спасибо за совет.

Добавлено через 55 минут
Решил проблему. Оказывается путь к бд имеет значение. Использовал стандартную папку context.getDatabasePath(DBNAME).toString();
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2014, 15:17
Привет! Вот еще темы с ответами:

Чтение данных из бд в listview - Программирование Android
Здесь listview с контекстным меню. В меню 2 пункта. По клику на пункт, запись из listview'a должна добавляться в определенную таблицу. ...

Обновление Базы данных - Программирование Android
Есть база данных которую просматриваю в Активити1, сделал все работает. При нажатии на кнопку перехожу в Ативити2 где вижу последнюю...

Инициализация базы данных - Программирование Android
Есть главная активити + 3 фрагмента. Из фрагментов вызываются AsyncTask и результаты пишутся в DB. Постоянно вижу в логах ошибки на...

Шифрование базы данных - Программирование Android
У меня есть база данных. Мне надо ее зашифровать. есть https://guardianproject.info/code/sqlcipher/ все бы круто но меня смущает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru