База с двумя таблицами
База с двумя таблицами
Подскажите пожалуйста.
У меня есть 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();
}
}
Буду очень балогодарен за любые наводки.
У меня есть 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();
}
}
Буду очень балогодарен за любые наводки.
Re: База с двумя таблицами
Сейчас попробовал обратиться к первой таблице из втрого активи всё работает, значит дело в самой таблице, но я её создал по аналогу, не мойму что может быть нетак.
Re: База с двумя таблицами
у тебя ошибка в названии таблицы
Monitiring
Читай внимательнее.
Monitiring
Читай внимательнее.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: База с двумя таблицами
Спасибо конечно, это действительно ошибка, но это я просто методы перебирал и очипятолся, так как ошибка таже самая: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);
, но всё таже ошибка.
Re: База с двумя таблицами
Нет. Если говорит - нет таблицы, значит так и есть.
Запусти свою прогу на рутованном устройстве или на эмуляторе, вытащи базу данных и посмотри в нее.
Запусти свою прогу на рутованном устройстве или на эмуляторе, вытащи базу данных и посмотри в нее.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: База с двумя таблицами
И еще . У тебя метод вообще create_db где вызывается?
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: База с двумя таблицами
Дополню, вот что странно - я пробывал открывать вторую таблицу в MainActivity(Там где у меня всё нормально с первой таблицой). И не смотря на то, что обе таблицы созданы одинаково и работаю с ними одним и тем же способом, но первая обрабатывается нормально, а вторая выдаёт туже ошибку. я уже теряюсь в догатках...
Re: База с двумя таблицами
package ru.verjilius.p001_dipmobile;Foenix писал(а):И еще . У тебя метод вообще create_db где вызывается?
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();
}
}
Re: База с двумя таблицами
Вот база из проекта.
Re: База с двумя таблицами
Попробывал сделать так как вы сказали. Зашел в Android Device Monitor, там перешел в data\data\ru.verjilius.p001_dipmobile\databases\ -> Pull a file from a device
открыл то что выгрузил с помощью DB browser from sqlite и к моему удивлению там таблиц моих нету.
CREATE TABLE `android_metadata` (
`locale` TEXT
);
со значение en_US - это всё, что там было, но данные из первой таблцы я получаю же.
открыл то что выгрузил с помощью DB browser from sqlite и к моему удивлению там таблиц моих нету.
CREATE TABLE `android_metadata` (
`locale` TEXT
);
со значение en_US - это всё, что там было, но данные из первой таблцы я получаю же.
Re: База с двумя таблицами
у тебя вообще нигде не вызывается метод create_db
У тебя он просто есть.
У тебя он просто есть.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: База с двумя таблицами
Проблема заключалась в том, что 2ая таблица была создана, когда база уже быза загружена на устройтсво и отсюда все вытекающие. Проблему решил и влюбом случае спасибо.Foenix писал(а):у тебя вообще нигде не вызывается метод create_db
У тебя он просто есть.