[英]Android SQLite Database, creating the database and DDMS perspective
[英]Android App isn't creating Database / not finding it in File Explorer - DDMS
因此,我创建了一个应该创建数据库的应用程序。 但是,我查看了ADM,但发现它不在其中。
我的困惑是为什么不创建它? 我有:
我从MyActivity内部的DatabaseHandler.java调用方法。 我的项目中有0个错误。
这是我的DatabaseHandler.java:
package com.example.brad.myapplication;
import android.accounts.Account;
import android.database.DatabaseUtils;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import static android.database.DatabaseUtils.dumpCursorToString;
/**
* Created by Brad on 19/07/2014.
*/
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "carsGrid",
TABLE_CARS = "cars",
KEY_ID = "id",
KEY_POSTCODE = "postcode",
KEY_ADDRESS = "address",
KEY_IMAGE = "image";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE" + TABLE_CARS + ")" + KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_ADDRESS + " TEXT,"+ KEY_POSTCODE + " TEXT," + KEY_IMAGE + " TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CARS);
onCreate(db);
}
public void createCar(Car car) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_ADDRESS, car.get_address());
values.put(KEY_POSTCODE, car.get_postcode());
values.put(KEY_IMAGE, car.get_image());
db.insert(TABLE_CARS, null, values);
db.close();
}
public Car getCar(int id) {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(TABLE_CARS, new String[] {KEY_ID, KEY_IMAGE, KEY_ADDRESS, KEY_POSTCODE}, KEY_ID + "=?", new String[] { String.valueOf(id)}, null,null,null,null);
if (cursor != null)
cursor.moveToFirst();
Car car = new Car(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2),cursor.getString(3));
return car;
}
public int getCarCount() {
//SELECT * FROM CARS
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM" + TABLE_CARS, null);
cursor.close();
return cursor.getCount();
}
public String getRandomImageKey() {
//SELECT * FROM CARS
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT " + KEY_ID + "," + KEY_IMAGE + " FROM" + TABLE_CARS + "ORDER BY RANDOM() LIMIT 1", null);
int columnIndex = cursor.getColumnIndex(KEY_ID);
String toReturn = cursor.getString(columnIndex);
return toReturn;
}
public Car getCurrentCar() {
SQLiteDatabase db = getWritableDatabase();
String sql = "SELECT " + KEY_ID + "," + KEY_IMAGE + " FROM " + TABLE_CARS + "ORDER BY RANDOM() LIMIT 1";
Cursor cursor = db.rawQuery(sql, new String[] {});
Car car = null;
try {
if (cursor.moveToFirst()) {
car = new Car(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), cursor.getString(3));
}
}
finally {
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
db.close();
}
return car;
}
}
这是我的MyActivity.java:
public class MyActivity extends Activity {
// Defining elements in XML
EditText postCodeStringTxt, DistanceNumberTxt, DebugCarTxt;
String imagestring;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
// Creating elements in XML
postCodeStringTxt = (EditText) findViewById(R.id.postCodeString);
DistanceNumberTxt = (EditText) findViewById(R.id.DistanceNumber);
DebugCarTxt = (EditText) findViewById(R.id.DebugCar);
// you should instantiate 'DatabaseHandler' here
DatabaseHandler db = new DatabaseHandler(this); // "this" refer to the context
Car cars = db.getCurrentCar();
db.createCar(new Car(cars.get_id(),cars.get_address(),cars.get_postcode(),cars.get_image()));
String rows= "id : "+ cars.get_id()+ " address : "+cars.get_address() + "postcode : "+cars.get_postcode()+" image : "+cars.get_image();
如果项目中没有错误,如何将区域划分为无效区域?
使用以下更改您的Create Table SQL Command
:
db.execSQL("CREATE TABLE" + TABLE_CARS + "(" + KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_ADDRESS + " TEXT,"+ KEY_POSTCODE + " TEXT," + KEY_IMAGE + " TEXT)");
未创建数据库是因为创建Table SQL Command Syntax
错误。
你也应该改变这个
Cursor cursor = db.rawQuery("SELECT " + KEY_ID + "," + KEY_IMAGE + " FROM" + TABLE_CARS + "ORDER BY RANDOM() LIMIT 1", null);
至
Cursor cursor = db.rawQuery("SELECT " + KEY_ID + "," + KEY_IMAGE + " FROM " + TABLE_CARS + " ORDER BY RANDOM() LIMIT 1", null);// make space after FROM and before ORDER BY
在您的getRandomImageKey()方法中,并且在getCurrentCar()方法中也做同样的事情
在您的DatabaseHandler
类中,创建表语法错误。因此请更改此行
db.execSQL("CREATE TABLE" + TABLE_CARS + ")" + KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_ADDRESS + " TEXT,"+ KEY_POSTCODE + " TEXT," + KEY_IMAGE + " TEXT)");
进入
db.execSQL("CREATE TABLE" + TABLE_CARS + "(" + KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_ADDRESS + " TEXT,"+ KEY_POSTCODE + " TEXT," + KEY_IMAGE + " TEXT)");
正如弗兰克建议的那样,您的两个rawQuery
语句是错误的,请在FROM
后给空格
完成视力操作后,该Cursor
将关闭。
不仅您的CREATE TABLE是错误的,而且其他人也正确指出了这一点(括号相反,并且缺少空格):
db.execSQL("CREATE TABLE" + TABLE_CARS + ")" + KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_ADDRESS + " TEXT,"+ KEY_POSTCODE + " TEXT," + KEY_IMAGE + " TEXT)");
应该
db.execSQL("CREATE TABLE " + TABLE_CARS + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_ADDRESS + " TEXT,"+ KEY_POSTCODE + " TEXT," + KEY_IMAGE + " TEXT)");
您还有另一个问题(缺少空格):
Cursor cursor = db.rawQuery("SELECT * FROM" + TABLE_CARS, null);
应该
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CARS, null);
尝试使用此:
db.execSQL(“ CREATE TABLE” + TABLE_CARS +“(” + KEY_ID +“ INTEGER PRIMARY KEY AUTOINCREMENT,” + KEY_ADDRESS +“ TEXT,” + KEY_POSTCODE +“ TEXT,” + KEY_IMAGE +“ TEXT)”);
尝试这个..
String createTableQuery=String.format(
"CREATE TABLE %s(%s INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT,%s TEXT,%s TEXT)",
TABLE_CARS, KEY_ID, KEY_ADDRESS, KEY_POSTCODE, KEY_IMAGE);
....
dB.execSQL(createTableQuery);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.