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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 177
#1

Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде - Программирование Android

22.09.2014, 19:20. Просмотров 2103. Ответов 21
Метки нет (Все метки)

Привет! Есть mysql3.sqlite (импортировал данные из csv). Нужно из приложения подключится к sqlite БД и вывести данные в log. Нашел пример как можно это сделать тут: http://stackoverflow.com/questions/2...949629#5949629, но что то ничего не выходит кроме ошибки...
Подскажите в чем может быть глюк? Или может есть более простой метод подключится к уже созданной БД?
Код вот:
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
package com.example.first_databases;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class MainActivity extends Activity implements OnClickListener {
 
final String LOG_TAG = "myLogs";
 
Button btnFunc;
EditText etFunc;
TextView textView1;
 
DataBaseHelper dbHelper;
SQLiteDatabase db;
 
/** Called when the activity is first created. */
 
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
 
btnFunc = (Button) findViewById(R.id.btnFunc);
btnFunc.setOnClickListener(this);
 
etFunc = (EditText) findViewById(R.id.etFunc);
 
textView1 = (TextView) findViewById(R.id.textView1);
}
 
public void onClick(View v) {
 
// очищаем курсор
Cursor c = null;
 
// определяем нажатую кнопку
switch (v.getId()) {
// Все записи
case R.id.btnFunc:
    try {
        readtolog(c);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
break;
}
 
}
 
//Метод для вывода данних из sqlite в log
void readtolog (Cursor c) throws IOException
{
    //создаем объект dbHelper   
    dbHelper = new DataBaseHelper(this);
 
    // подключаемся к базе
    db = dbHelper.getWritableDatabase();
 
Log.d(LOG_TAG, "-— Назначаем курсору С данные из БД —-");
//выбор всех данных БД
 
c = db.query("mysql_database", null, null, null, null, null, null);
 
if (c != null) {
if (c.moveToFirst()) {
String str;
do {
str = "";
for (String cn : c.getColumnNames()) {
str = str.concat(cn + " = "
+ c.getString(c.getColumnIndex(cn)) + "; ");
}
Log.d(LOG_TAG, str);
 
} while (c.moveToNext());
}
c.close();
} else
Log.d(LOG_TAG, "Cursor is null");
 
dbHelper.close();
}
 
public class DataBaseHelper extends SQLiteOpenHelper {
    private Context mycontext;
 
    //private String DB_PATH = mycontext.getApplicationContext().getPackageName()+"/databases/";
    private static final String DB_NAME = "mysql2.sqlite";//the extension may be .sqlite or .db
    public SQLiteDatabase myDataBase;
    private String DB_PATH = "/data/data/"
                        + mycontext.getApplicationContext().getPackageName()
                        + "/databases/";
 
    public DataBaseHelper(Context context) throws IOException {
        super(context,DB_NAME,null,1);
        this.mycontext=context;
        boolean dbexist = checkdatabase();
        if (dbexist) {
            //System.out.println("Database exists");
            opendatabase(); 
        } else {
            System.out.println("Database doesn't exist");
            createdatabase();
        }
    }
 
    public void createdatabase() throws IOException {
        boolean dbexist = checkdatabase();
        if(dbexist) {
            //System.out.println(" Database exists.");
        } else {
            this.getReadableDatabase();
            try {
                copydatabase();
            } catch(IOException e) {
                throw new Error("Error copying database");
            }
        }
    }   
 
    private boolean checkdatabase() {
        //SQLiteDatabase checkdb = null;
        boolean checkdb = false;
        try {
            String myPath = DB_PATH + DB_NAME;
            File dbfile = new File(myPath);
            //checkdb = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE);
            checkdb = dbfile.exists();
        } catch(SQLiteException e) {
            System.out.println("Database doesn't exist");
        }
        return checkdb;
    }
 
    private void copydatabase() throws IOException {
        //Open your local db as the input stream
        InputStream myinput = mycontext.getAssets().open(DB_NAME);
 
        // Path to the just created empty db
        String outfilename = DB_PATH + DB_NAME;
 
        //Open the empty db as the output stream
        OutputStream myoutput = new FileOutputStream("DB_PATH + DB_NAME");
 
        // transfer byte to inputfile to outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myinput.read(buffer))>0) {
            myoutput.write(buffer,0,length);
        }
 
        //Close the streams
        myoutput.flush();
        myoutput.close();
        myinput.close();
    }
 
    public void opendatabase() throws SQLException {
        //Open the database
        String mypath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(mypath, null, SQLiteDatabase.OPEN_READWRITE);
    }
 
    public synchronized void close() {
        if(myDataBase != null) {
            myDataBase.close();
        }
        super.close();
    }
 
    @Override
    public void onCreate(SQLiteDatabase arg0) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub
        
    }
 
}
 
}
А вот xml на всякий случай:
XML
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
 
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:gravity="center_horizontal"
android:text="Справочник номеров"
android:textSize="25sp" >
 
</TextView>
 
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp" >
 
<Button
android:id="@+id/btnFunc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Поиск по имени:" />
 
<EditText
android:id="@+id/etFunc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
 
<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="50dp"
    android:textSize="25sp" />
 
</LinearLayout>
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2014, 19:20     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде
Посмотрите здесь:
Android Подскажите где ошибка в коде (блютуз-мессенджер)
Android Как именно можно сделать SQLite запрос, если запрос уже сформирован?
Подскажите, где ошибка Android
Android Подскажите где ошибка при работе с БД
Android Подскажите по работе с SQLite
Подскажите реализацию (SQLite) Android
ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
22.09.2014, 19:35     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #2
Цитата Сообщение от yourfanat Посмотреть сообщение
new FileOutputStream("DB_PATH + DB_NAME");
кавычки уберите или
Java
1
 new FileOutputStream(outfilename)
так сделайте.
А ошибка-то какая?
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 177
22.09.2014, 19:44  [ТС]     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #3
При нажатии на кнопку выдает вот что - http://saveimg.ru/pictures/22-09-14/...8832998ae4.jpg
Сделал как вы говорили, не помогло...
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
23235 / 15226 / 4424
Регистрация: 22.10.2011
Сообщений: 27,074
Записей в блоге: 4
22.09.2014, 22:16     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #4
yourfanat, залейте изображение на форум (Инструкция), ссылка на хостинг уже сейчас невалидна.
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 177
23.09.2014, 12:35  [ТС]     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #5
Спасибо! Буду знать на счет картинок.
Миниатюры
Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде  
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
23.09.2014, 12:44     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #6
Цитата Сообщение от yourfanat Посмотреть сообщение
mycontext.getApplicationContext()
mycontext null. Обращение к нему - NullPointerException
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 177
23.09.2014, 12:57  [ТС]     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #7
Т.е. получается что программа не находит БД из которой я хочу извлчечь данные для копирования
Ошибка на этой стадии?
Java
1
InputStream myinput = mycontext.getAssets().open(DB_NAME);
МОжет быть я не туда кладу БД? Сейчас она лежит в D:\es\workspace\first_databases\assets\mysql2.sqlite
first_databases - название проекта
Правильно ли я ее поместил?
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
23.09.2014, 13:00     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #8
yourfanat, Не используйте абсолютный путь.

Java
1
2
ContextWrapper cw =new ContextWrapper(getApplicationContext());
DB_PATH =cw.getFilesDir().getAbsolutePath()+ "/databases/";
Копирование из ассетов:

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
private void copyDataBase()
    {
        Log.i("Database",
                "New database is being copied to device!");
        byte[] buffer = new byte[1024];
        OutputStream myOutput = null;
        int length;
        // Open your local db as the input stream
        InputStream myInput = null;
        try
        {
            myInput =myContext.getAssets().open(DB_NAME);
            // transfer bytes from the inputfile to the
            // outputfile
            myOutput =new FileOutputStream(DB_PATH+ DB_NAME);
            while((length = myInput.read(buffer)) > 0)
            {
                myOutput.write(buffer, 0, length);
            }
            myOutput.close();
            myOutput.flush();
            myInput.close();
            Log.i("Database",
                    "New database has been copied to device!");
 
 
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 177
23.09.2014, 13:51  [ТС]     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #9
Спасибо! Удалось скопировать БД - New database has been copied to device!
В БД была таблица "mysql_database" - просматривал с помощью SqliteBrowser. После переноса пытаюсь подключится к ней:
Java
1
c = db.query("mysql_database", null, null, null, null, null, null);
Но выдается ошибка в логах: no such table mysql_database
В чем может быть причина?
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
23.09.2014, 14:06     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #10
yourfanat, нет такой таблицы в БД как бы
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 177
23.09.2014, 14:21  [ТС]     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #11
Ну так таблица есть Могу прикрепить базу данных, которая в assets. Вот она:
Вложения
Тип файла: zip mysql2.zip (22 байт, 8 просмотров)
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
23.09.2014, 14:30     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #12
нет там ничего)
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 177
23.09.2014, 14:42  [ТС]     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #13
Сори, видимо тут БД просто так выкладывать нельзя. ВОт ссылка на файл: https://drive.google.com/file/d/0B6O...it?usp=sharing

Добавлено через 7 минут
На всякий случай весь код еще раз:
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
package com.example.first_databases;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class MainActivity extends Activity implements OnClickListener {
 
final String LOG_TAG = "myLogs";
 
Button btnFunc;
EditText etFunc;
TextView textView1;
 
DataBaseHelper dbHelper;
SQLiteDatabase db;
 
/** Called when the activity is first created. */
 
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
 
btnFunc = (Button) findViewById(R.id.btnFunc);
btnFunc.setOnClickListener(this);
 
etFunc = (EditText) findViewById(R.id.etFunc);
 
textView1 = (TextView) findViewById(R.id.textView1);
}
 
public void onClick(View v) {
 
// очищаем курсор
Cursor c = null;
 
// определяем нажатую кнопку
switch (v.getId()) {
// Все записи
case R.id.btnFunc:
    try {
        readtolog(c);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
break;
}
 
}
 
//Метод для вывода данних из sqlite в log
void readtolog (Cursor c) throws IOException
{
    //создаем объект dbHelper   
    dbHelper = new DataBaseHelper(this);
 
    // подключаемся к базе
    db = dbHelper.getWritableDatabase();
 
Log.d(LOG_TAG, "-— Назначаем курсору С данные из БД —-");
//выбор всех данных БД
 
c = db.query("mysql_database", null, null, null, null, null, null);
 
if (c != null) {
if (c.moveToFirst()) {
String str;
do {
str = "";
for (String cn : c.getColumnNames()) {
str = str.concat(cn + " = "
+ c.getString(c.getColumnIndex(cn)) + "; ");
}
Log.d(LOG_TAG, str);
 
} while (c.moveToNext());
}
c.close();
} else
Log.d(LOG_TAG, "Cursor is null");
 
dbHelper.close();
}
 
public class DataBaseHelper extends SQLiteOpenHelper {
    private Context mycontext;
 
    ContextWrapper cw =new ContextWrapper(getApplicationContext());
 
    //private String DB_PATH = mycontext.getApplicationContext().getPackageName()+"/databases/";
    private static final String DB_NAME = "mysql2.sqlite";//the extension may be .sqlite or .db
    public SQLiteDatabase myDataBase;
    private String DB_PATH = cw.getFilesDir().getAbsolutePath()+ "/databases/";
 
    public DataBaseHelper(Context context) throws IOException {
        super(context,DB_NAME,null,1);
        this.mycontext=context;
        boolean dbexist = checkdatabase();
        if (dbexist) {
            //System.out.println("Database exists");
            opendatabase(); 
        } else {
            System.out.println("Database doesn't exist");
            createdatabase();
        }
    }
 
    public void createdatabase() throws IOException {
        boolean dbexist = checkdatabase();
        if(dbexist) {
            //System.out.println(" Database exists.");
        } else {
            this.getReadableDatabase();
            copydatabase();
        }
    }   
 
    private boolean checkdatabase() {
        //SQLiteDatabase checkdb = null;
        boolean checkdb = false;
        try {
            String myPath = DB_PATH + DB_NAME;
            File dbfile = new File(myPath);
            //checkdb = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE);
            checkdb = dbfile.exists();
        } catch(SQLiteException e) {
            System.out.println("Database doesn't exist");
        }
        return checkdb;
    }
 
    private void copydatabase()
    {
        Log.i("Database",
                "New database is being copied to device!");
        byte[] buffer = new byte[1024];
        OutputStream myOutput = null;
        int length;
        // Open your local db as the input stream
        InputStream myInput = null;
        try
        {
            myInput =mycontext.getAssets().open(DB_NAME);
            // transfer bytes from the inputfile to the
            // outputfile
            myOutput =new FileOutputStream(DB_PATH+ DB_NAME);
            while((length = myInput.read(buffer)) > 0)
            {
                myOutput.write(buffer, 0, length);
            }
            myOutput.close();
            myOutput.flush();
            myInput.close();
            Log.i("Database",
                    "New database has been copied to device!");
 
 
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
 
    public void opendatabase() throws SQLException {
        //Open the database
        String mypath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(mypath, null, SQLiteDatabase.OPEN_READWRITE);
    }
 
    public synchronized void close() {
        if(myDataBase != null) {
            myDataBase.close();
        }
        super.close();
    }
 
    @Override
    public void onCreate(SQLiteDatabase arg0) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub
        
    }
 
}
 
}
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 177
24.09.2014, 19:45  [ТС]     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #14
В обещем мучался создавать таблицы, ничего так и не получилось.
Вопробовал создать новую БД, адаптированную под андроид.
Использовал следующие рекомеднации отсюда: http://vlad8.com/tech/android-add-ex...-own-database/

"Представим, что у вас уже есть собственный файл базы данных. Чтобы сделать его съедобным для Андроид-приложения, необходимо немного отредактировать базу, для чего вы можете воспользоваться, например, SQLite Database Browser, доступным для всех платформ.

Откройте вашу базу и добавьте новую таблицу под названием «android_metadata», воспользуйтесь для этого следующим запросом:

SQL
1
CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US')
Теперь добавим одну строку с текстом «en_US» в таблицу «android_metadata»:

SQL
1
INSERT INTO "android_metadata" VALUES ('en_US')
Потом нужно переименовать первичное поле id ваших таблиц на «_id», чтобы Андроид распознал поле идентификаторов ваших таблиц. В SQLite Database Browser это можно сделать нажав на кнопку Редактировать, потом выбрав таблицу, которую вы хотите изменить, и, наконец, выбрав поле для переименования.

После выполнения указанных операций база данных готова для использования в приложениях Андроид."


Получил базу данных: mydb5.sqlite
Вот ссылка на нее https://drive.google.com/file/d/0B6O...it?usp=sharing

В программе вроде бы как удается скопировать БД, но при попытке считать данные из таблицы пишет что таблица не найдена - no such table: mydb

В чем может быть дело, подскажите плиз. Финальный код:

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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
package com.example.first_databases;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class MainActivity extends Activity implements OnClickListener {
 
final String LOG_TAG = "myLogs";
 
Button btnFunc;
EditText etFunc;
TextView textView1;
 
DataBaseHelper dbHelper;
SQLiteDatabase db;
 
/** Called when the activity is first created. */
 
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
 
btnFunc = (Button) findViewById(R.id.btnFunc);
btnFunc.setOnClickListener(this);
 
etFunc = (EditText) findViewById(R.id.etFunc);
 
textView1 = (TextView) findViewById(R.id.textView1);
}
 
public void onClick(View v) {
 
// очищаем курсор
Cursor c = null;
 
// определяем нажатую кнопку
switch (v.getId()) {
// Все записи
case R.id.btnFunc:
    try {
        readtolog(c);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
break;
}
 
}
 
//Метод для вывода данних из sqlite в log
void readtolog (Cursor c) throws IOException
{
    //создаем объект dbHelper   
    dbHelper = new DataBaseHelper(this);
 
    // подключаемся к базе
    db = dbHelper.getWritableDatabase();
 
Log.d(LOG_TAG, "-— Назначаем курсору С данные из БД —-");
//выбор всех данных БД
 
c = db.query("mydb", null, null, null, null, null, null);
 
if (c != null) {
if (c.moveToFirst()) {
String str;
do {
str = "";
for (String cn : c.getColumnNames()) {
str = str.concat(cn + " = "
+ c.getString(c.getColumnIndex(cn)) + "; ");
}
Log.d(LOG_TAG, str);
 
} while (c.moveToNext());
}
c.close();
} else
Log.d(LOG_TAG, "Cursor is null");
 
dbHelper.close();
}
 
public class DataBaseHelper extends SQLiteOpenHelper {
    private Context mycontext;
 
    ContextWrapper cw =new ContextWrapper(getApplicationContext());
 
    //private String DB_PATH = mycontext.getApplicationContext().getPackageName()+"/databases/";
    private static final String DB_NAME = "mydb5.sqlite";//the extension may be .sqlite or .db
    public SQLiteDatabase myDataBase;
    private String DB_PATH = cw.getFilesDir().getAbsolutePath()+ "/databases/";
 
    public DataBaseHelper(Context context) throws IOException {
        super(context,DB_NAME,null,1);
        this.mycontext=context;
        boolean dbexist = checkdatabase();
        if (dbexist) {
            //System.out.println("Database exists");
            opendatabase(); 
        } else {
            System.out.println("Database doesn't exist");
            createdatabase();
        }
    }
 
    public void createdatabase() throws IOException {
        boolean dbexist = checkdatabase();
        if(dbexist) {
            //System.out.println(" Database exists.");
        } else {
            this.getReadableDatabase();
            copydatabase();
        }
    }   
 
    private boolean checkdatabase() {
        //SQLiteDatabase checkdb = null;
        boolean checkdb = false;
        try {
            String myPath = DB_PATH + DB_NAME;
            File dbfile = new File(myPath);
            //checkdb = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE);
            checkdb = dbfile.exists();
        } catch(SQLiteException e) {
            System.out.println("Database doesn't exist");
        }
        return checkdb;
    }
 
    private void copydatabase()
    {
        Log.i("Database",
                "New database is being copied to device!");
        byte[] buffer = new byte[1024];
        OutputStream myOutput = null;
        int length;
        // Open your local db as the input stream
        InputStream myInput = null;
        try
        {
            myInput =mycontext.getAssets().open(DB_NAME);
            // transfer bytes from the inputfile to the
            // outputfile
            myOutput =new FileOutputStream(DB_PATH+ DB_NAME);
            while((length = myInput.read(buffer)) > 0)
            {
                myOutput.write(buffer, 0, length);
            }
            myOutput.close();
            myOutput.flush();
            myInput.close();
            Log.i("Database",
                    "New database has been copied to device!");
 
 
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }
 
    public void opendatabase() throws SQLException {
        //Open the database
        String mypath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(mypath, null, SQLiteDatabase.OPEN_READWRITE);
    }
 
    public synchronized void close() {
        if(myDataBase != null) {
            myDataBase.close();
        }
        super.close();
    }
 
    @Override
    public void onCreate(SQLiteDatabase arg0) {
        // TODO Auto-generated method stub
        
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub
        
    }
 
}
 
}
Добавлено через 6 часов 5 минут
Никто не сталкивался такой проблемой?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2014, 17:40     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде
Еще ссылки по теме:
Android Где хранятся файлы с БД SQLite в Android Studio?
Подскажите программу для получения опыта работы с SQLite Android
Где хранится файл базы данных SQLite на устройстве? Android
Android При переносе приложения на карту памяти где хранятся SharedPreferences, SQLite базы и тп ?
Выбрать hasmap или sqlite Android

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

Или воспользуйтесь поиском по форуму:
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 177
25.09.2014, 17:40  [ТС]     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде #15
Возникли новые обстоятельства. До меня только что дошло на какой стадии ошибка, но из за чего она и как ее испправить не знаю...
Ошибка на стадии создания БД для переноса. У меня нет root прав, и я не знаю где храняться БД на устройстве, может путь не так прописан? Или права какие то назначать нужно. Скрин прилагаю, что делать подскажите
Миниатюры
Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде  
Yandex
Объявления
25.09.2014, 17:40     Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде
Ответ Создать тему
Опции темы

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