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

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

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

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

22.09.2014, 19:20. Просмотров 2218. Ответов 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>
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2014, 19:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде (Программирование Android):

Подскажите где ошибка в коде (блютуз-мессенджер) - Программирование Android
Добрый вечер Нарыл в интернете: создание блютуз-мессенджера, решил попробовать (недавно начал осваивать android studio и язык java,...

Как именно можно сделать SQLite запрос, если запрос уже сформирован? - Программирование Android
Здравствуйте. Помогите понять , как именно можно сделать SQLite запрос , если запрос уже сформирован Перечитал кучу информации но не могу...

Как подключиться уже созданному файлу Sqlite через js? - JavaScript
Как подключиться уже созданному файлу Sqlite через js? Есть примеры?

Подскажите мне какую оперативную память купить к уже существующей? - Оперативная память
Хочу купить еще 4 гб, сейчас стоит 2гб, подскажите пожалуйста как подобрать? Скрин из АИДА64

подскажите где ошибка в коде! - Delphi
Дана строка из слов. Нужно равномерно распределить пробелы между словами и чтоб длина строки была =50. program Project1; ...

Подскажите где ошибка в коде ? - Assembler
REM Вводим исходные данные N1: DC 3 N2: DC 9 N3: DC 4 N4: DC 5 C: DC 5 Y: DC 0 REM p: DC 1 REM

21
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
22.09.2014, 19:35 #2
Цитата Сообщение от yourfanat Посмотреть сообщение
new FileOutputStream("DB_PATH + DB_NAME");
кавычки уберите или
Java
1
 new FileOutputStream(outfilename)
так сделайте.
А ошибка-то какая?
0
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
22.09.2014, 19:44  [ТС] #3
При нажатии на кнопку выдает вот что - http://saveimg.ru/pictures/22-09-14/...8832998ae4.jpg
Сделал как вы говорили, не помогло...
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
23839 / 15831 / 4777
Регистрация: 22.10.2011
Сообщений: 27,999
Записей в блоге: 5
22.09.2014, 22:16 #4
yourfanat, залейте изображение на форум (Инструкция), ссылка на хостинг уже сейчас невалидна.
0
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
23.09.2014, 12:35  [ТС] #5
Спасибо! Буду знать на счет картинок.
0
Миниатюры
Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде  
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
23.09.2014, 12:44 #6
Цитата Сообщение от yourfanat Посмотреть сообщение
mycontext.getApplicationContext()
mycontext null. Обращение к нему - NullPointerException
0
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
23.09.2014, 12:57  [ТС] #7
Т.е. получается что программа не находит БД из которой я хочу извлчечь данные для копирования
Ошибка на этой стадии?
Java
1
InputStream myinput = mycontext.getAssets().open(DB_NAME);
МОжет быть я не туда кладу БД? Сейчас она лежит в D:\es\workspace\first_databases\assets\mysql2.sqlite
first_databases - название проекта
Правильно ли я ее поместил?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
23.09.2014, 13:00 #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();
        }
    }
0
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
23.09.2014, 13:51  [ТС] #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
В чем может быть причина?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
23.09.2014, 14:06 #10
yourfanat, нет такой таблицы в БД как бы
0
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
23.09.2014, 14:21  [ТС] #11
Ну так таблица есть Могу прикрепить базу данных, которая в assets. Вот она:
0
Вложения
Тип файла: zip mysql2.zip (22 байт, 8 просмотров)
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
23.09.2014, 14:30 #12
нет там ничего)
1
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
23.09.2014, 14:42  [ТС] #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
        
    }
 
}
 
}
0
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
24.09.2014, 19:45  [ТС] #14
В обещем мучался создавать таблицы, ничего так и не получилось.
Вопробовал создать новую БД, адаптированную под андроид.
Использовал следующие рекомеднации отсюда: http://vlad8.com/tech/android-add-existing-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 минут
Никто не сталкивался такой проблемой?
0
yourfanat
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
25.09.2014, 17:40  [ТС] #15
Возникли новые обстоятельства. До меня только что дошло на какой стадии ошибка, но из за чего она и как ее испправить не знаю...
Ошибка на стадии создания БД для переноса. У меня нет root прав, и я не знаю где храняться БД на устройстве, может путь не так прописан? Или права какие то назначать нужно. Скрин прилагаю, что делать подскажите
0
Миниатюры
Как подключиться к уже существующей sqlite, или подскажите где ошибка в коде  
25.09.2014, 17:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2014, 17:40
Привет! Вот еще темы с ответами:

Подскажите где ошибка в коде - PHP БД
Здравствуйте подскажите где ошибка в коде $query = mysql_query(&quot;SELECT * FROM `city` WHERE gorod='$cityaR'&quot;); ...

Подскажите пожалуйста, Где ошибка в коде? - PHP
Добрый вечер! этот скрипт для редактирования, удаления и добавления информации в базу данных mysql так вот, он выводит информацию из...

Подскажите пожалуйста где ошибка в коде? - PHP
Подскажите пожалуйста где ошибка в коде? &lt;?php $days = array(&quot;Понедельник&quot;, &quot;Вторник&quot;, &quot;Среда&quot;, &quot;Четверг&quot;, &quot;Пятница&quot;,...

Подскажите пожалуйста где ошибка в коде - PHP БД
&lt;?php $resultat = mysql_query(&quot;SELECT * FROM catalog&quot;,$db); $array = mysql_fetch_array($resultat); do {...


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

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

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