База с двумя таблицами

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Verjilius
Сообщения: 11
Зарегистрирован: 31 май 2016, 21:56

База с двумя таблицами

Сообщение Verjilius » 31 май 2016, 22:15

Подскажите пожалуйста.
У меня есть SQL база и в ней две таблицы:

CREATE TABLE `TorgPred` (
`_id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`username` TEXT NOT NULL,
`price` TEXT NOT NULL,
`status` INTEGER NOT NULL
);

CREATE TABLE `Monitoring` (
`_id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`namett` TEXT NOT NULL,
`adrestt` TEXT NOT NULL,
`teltt` TEXT NOT NULL,
`geott` TEXT NOT NULL,
`emailtt` TEXT NOT NULL,
`timett` TEXT NOT NULL,
`_idtt` INTEGER NOT NULL,
FOREIGN KEY(`_idtt`) REFERENCES `TorgPred`(`_id`)
);

C первой с свободно работаю ч/з MainActivity, а вторая выдаёт ошибку, когда пытаюсь к ней обратится в другом активити.
android.database.sqlite.SQLiteException: no such table: Monitiring (code 1): , while compiling: SELECT _idtt as _id, namett From Monitiring

Скажите может, что манифесте или в DBHelper надо что то указать, но с первой табл всё нормально.


package ru.verjilius.p001_dipmobile;

import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;
import android.content.Context;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.File;
import java.sql.SQLException;

public class DatabaseHelper extends SQLiteOpenHelper {

public static String DB_PATH = "/data/data/ru.verjilius.p001_dipmobile/databases/";
public static String DB_NAME = "DipBase.db";
public static final int SCHEMA = 1; // версия базы данных
public static final String TABLE = "TorgPred";

public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAME = "username";
public static final String COLUMN_PRICE = "price";
public static final String COLUMN_STATUS = "status";

public static final String TABLE_TT = "Monitoring";

public static final String COLUMN_IDTT = "_idtt";
public static final String COLUMN_NAMETT = "namett";
public static final String COLUMN_ADRESTT = "adrestt";
public static final String COLUMN_TELTT = "teltt";
public static final String COLUMN_GEOTT = "geott";
public static final String COLUMN_EMAILTT = "emailtt";
public static final String COLUMN_TIMETT = "timett";

private SQLiteDatabase database;
private Context myContext;

public DatabaseHelper(Context context) {
super(context, DB_NAME, null, SCHEMA);
this.myContext=context;
}

@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

public void create_db(){
InputStream myInput = null;
OutputStream myOutput = null;
try {
File file = new File(DB_PATH + DB_NAME);
if (!file.exists()) {
this.getReadableDatabase();
//получаем локальную бд как поток
myInput = myContext.getAssets().open(DB_NAME);
// Путь к новой бд
String outFileName = DB_PATH + DB_NAME;

// Открываем пустую бд
myOutput = new FileOutputStream(outFileName);

// побайтово копируем данные
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}

myOutput.flush();
myOutput.close();
myInput.close();
}
}
catch(IOException ex){

}
}

public void open() throws SQLException {
String path = DB_PATH + DB_NAME;
database = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.OPEN_READWRITE);

}

@Override
public synchronized void close() {
if (database != null) {
database.close();
}
super.close();
}
}

Буду очень балогодарен за любые наводки.

Verjilius
Сообщения: 11
Зарегистрирован: 31 май 2016, 21:56

Re: База с двумя таблицами

Сообщение Verjilius » 31 май 2016, 22:29

Сейчас попробовал обратиться к первой таблице из втрого активи всё работает, значит дело в самой таблице, но я её создал по аналогу, не мойму что может быть нетак.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: База с двумя таблицами

Сообщение Foenix » 31 май 2016, 23:08

у тебя ошибка в названии таблицы
Monitiring
Читай внимательнее.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Verjilius
Сообщения: 11
Зарегистрирован: 31 май 2016, 21:56

Re: База с двумя таблицами

Сообщение Verjilius » 01 июн 2016, 01:06

Foenix писал(а):у тебя ошибка в названии таблицы
Monitiring
Читай внимательнее.
Спасибо конечно, это действительно ошибка, но это я просто методы перебирал и очипятолся, так как ошибка таже самая:
no such table: Monitoring (code 1): , while compiling: SELECT _idtt as _id, namett From Monitoring
я думаю, что ошибка вот тут

db = sqlHelper.getReadableDatabase();
final Cursor cursor = db.rawQuery("SELECT "+DatabaseHelper.COLUMN_IDTT+" as _id, "+
DatabaseHelper.COLUMN_NAMETT+" From "+"Monitoring", new String[]{});

Может быть она связанна она с id таблицы, я не могу понять какой я должен id указывать в запросе для 2ой таблицы.

У первой и второй _id - PRIMARY KEY.

В идеале план был сделать так
db = sqlHelper.getReadableDatabase();
final Cursor cursor = db.query("Monitoring",new String[]{"_idtt", "namett"},null,null,null,null,null);
, но всё таже ошибка.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: База с двумя таблицами

Сообщение Foenix » 01 июн 2016, 12:05

Нет. Если говорит - нет таблицы, значит так и есть.
Запусти свою прогу на рутованном устройстве или на эмуляторе, вытащи базу данных и посмотри в нее.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: База с двумя таблицами

Сообщение Foenix » 01 июн 2016, 12:07

И еще . У тебя метод вообще create_db где вызывается?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Verjilius
Сообщения: 11
Зарегистрирован: 31 май 2016, 21:56

Re: База с двумя таблицами

Сообщение Verjilius » 01 июн 2016, 12:20

Дополню, вот что странно - я пробывал открывать вторую таблицу в MainActivity(Там где у меня всё нормально с первой таблицой). И не смотря на то, что обе таблицы созданы одинаково и работаю с ними одним и тем же способом, но первая обрабатывается нормально, а вторая выдаёт туже ошибку. я уже теряюсь в догатках...

Verjilius
Сообщения: 11
Зарегистрирован: 31 май 2016, 21:56

Re: База с двумя таблицами

Сообщение Verjilius » 01 июн 2016, 12:21

Foenix писал(а):И еще . У тебя метод вообще create_db где вызывается?
package ru.verjilius.p001_dipmobile;

import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase;
import android.content.Context;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.File;
import java.sql.SQLException;

public class DatabaseHelper extends SQLiteOpenHelper {

public static String DB_PATH = "/data/data/ru.verjilius.p001_dipmobile/databases/";
public static String DB_NAME = "DipBase.db";
public static final int SCHEMA = 1; // версия базы данных
public static final String TABLE = "TorgPred";

public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAME = "username";
public static final String COLUMN_PRICE = "price";
public static final String COLUMN_STATUS = "status";

public static final String TABLE_TT = "Monitoring";

public static final String COLUMN_IDTT = "_idtt";
public static final String COLUMN_NAMETT = "namett";
public static final String COLUMN_ADRESTT = "adrestt";
public static final String COLUMN_TELTT = "teltt";
public static final String COLUMN_GEOTT = "geott";
public static final String COLUMN_EMAILTT = "emailtt";
public static final String COLUMN_TIMETT = "timett";

private SQLiteDatabase database;
private Context myContext;

public DatabaseHelper(Context context) {
super(context, DB_NAME, null, SCHEMA);
this.myContext=context;
}

@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

public void create_db(){
InputStream myInput = null;
OutputStream myOutput = null;
try {
File file = new File(DB_PATH + DB_NAME);
if (!file.exists()) {
this.getReadableDatabase();
//получаем локальную бд как поток
myInput = myContext.getAssets().open(DB_NAME);
// Путь к новой бд
String outFileName = DB_PATH + DB_NAME;

// Открываем пустую бд
myOutput = new FileOutputStream(outFileName);

// побайтово копируем данные
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}

myOutput.flush();
myOutput.close();
myInput.close();
}
}
catch(IOException ex){

}
}

public void open() throws SQLException {
String path = DB_PATH + DB_NAME;
database = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.OPEN_READWRITE);

}

@Override
public synchronized void close() {
if (database != null) {
database.close();
}
super.close();
}
}

Verjilius
Сообщения: 11
Зарегистрирован: 31 май 2016, 21:56

Re: База с двумя таблицами

Сообщение Verjilius » 01 июн 2016, 13:07

Вот база из проекта.
Изображение

Verjilius
Сообщения: 11
Зарегистрирован: 31 май 2016, 21:56

Re: База с двумя таблицами

Сообщение Verjilius » 01 июн 2016, 13:46

Попробывал сделать так как вы сказали. Зашел в Android Device Monitor, там перешел в data\data\ru.verjilius.p001_dipmobile\databases\ -> Pull a file from a device
открыл то что выгрузил с помощью DB browser from sqlite и к моему удивлению там таблиц моих нету. :lol:

CREATE TABLE `android_metadata` (
`locale` TEXT
);

со значение en_US - это всё, что там было, но данные из первой таблцы я получаю же.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: База с двумя таблицами

Сообщение Foenix » 01 июн 2016, 18:53

у тебя вообще нигде не вызывается метод create_db
У тебя он просто есть.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Verjilius
Сообщения: 11
Зарегистрирован: 31 май 2016, 21:56

Re: База с двумя таблицами

Сообщение Verjilius » 02 июн 2016, 00:05

Foenix писал(а):у тебя вообще нигде не вызывается метод create_db
У тебя он просто есть.
Проблема заключалась в том, что 2ая таблица была создана, когда база уже быза загружена на устройтсво и отсюда все вытекающие. Проблему решил и влюбом случае спасибо.

Ответить