Java Android应用程序未创建数据库/未在文件资源管理器-DDMS中找到它

Java Android应用程序未创建数据库/未在文件资源管理器-DDMS中找到它,java,android,Java,Android,所以,我创建了一个应用程序,它应该是一个数据库。不过,我看过ADM,发现它不在里面 我的困惑是为什么它没有被创造出来?我有: DatabaseHandler.java MyActivity.java java 我在MyActivity中从DatabaseHandler.java调用方法。我的项目中有0个错误 这是我的DatabaseHandler.java: package com.example.brad.myapplication; import android.accounts.Acco

所以,我创建了一个应用程序,它应该是一个数据库。不过,我看过ADM,发现它不在里面

我的困惑是为什么它没有被创造出来?我有:

DatabaseHandler.java MyActivity.java java 我在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();
如果项目中没有错误,如何将区域划分到不工作的区域?

使用以下命令更改创建表SQL命令:

    db.execSQL("CREATE TABLE" + TABLE_CARS + "(" + KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_ADDRESS + " TEXT,"+  KEY_POSTCODE + " TEXT," + KEY_IMAGE  + " TEXT)");
未创建数据库,这是因为create Table SQL命令语法错误

你也应该改变这个

  Cursor cursor = db.rawQuery("SELECT " + KEY_ID + "," + KEY_IMAGE + " FROM" + TABLE_CARS + "ORDER BY RANDOM() LIMIT 1", null);

在DatabaseHandler类的getRandomImageKey方法中,以及在getCurrentCar方法中执行相同操作时,创建表语法是错误的。因此更改此行

    db.execSQL("CREATE TABLE" + TABLE_CARS + ")" + KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT," + KEY_ADDRESS + " TEXT,"+  KEY_POSTCODE + " TEXT," + KEY_IMAGE  + " TEXT)");
进入

正如Frank所说,您的两个rawQuery语句是错误的,请在FROM之后留出空间


操作完成后,光标太近。

不仅您的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)");
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_CARS, null);
尝试使用以下方法:

db.execSQLCREATE TABLE+TABLE_CARS++KEY_ID+整数主键自动递增,+KEY_ADDRESS+TEXT,+KEY_POSTCODE+TEXT,+KEY_IMAGE+TEXT

试试这个


发布您的DatabaseHandler类Hi M D,这是上面的Paste链接。由于进行了这些更改,我的应用程序在每次启动时都停止工作。@M D由于某种原因,我的logcat无法生成anything@BradlySpicer那么很难确定问题到底在哪里?但我认为你的问题与此无关。我想,@BradlySpicer的问题不是关于你的应用程序,而是关于你的模拟器。只需从DDMS->Devices->右上角单击菜单->adb resetLet us中选择选项。
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);