Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SQLite存储数据_Java_Android_Sql - Fatal编程技术网

Java 使用SQLite存储数据

Java 使用SQLite存储数据,java,android,sql,Java,Android,Sql,我不太熟悉使用SQL来存储Android数据项,但下面我有两种方法来插入新数据项和打印所有现有数据 我的飞行类别具有以下属性: 航班号-字符串 航空公司字符串 日期字符串 图像路径-字符串 注册字符串 类型-字符串ID int(每个实例都是唯一的) 由于某些原因,我无法打印数据,我不确定insertFlight()方法或databaseToString()方法是否存在问题 public class DatabaseSQ extends SQLiteOpenHelper { publ

我不太熟悉使用SQL来存储Android数据项,但下面我有两种方法来插入新数据项和打印所有现有数据

我的飞行类别具有以下属性:

  • 航班号-字符串
  • 航空公司字符串
  • 日期字符串
  • 图像路径-字符串
  • 注册字符串
  • 类型-字符串ID
  • int(每个实例都是唯一的)
由于某些原因,我无法打印数据,我不确定
insertFlight()
方法或
databaseToString()
方法是否存在问题

public class DatabaseSQ extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "FlightDatabase.db";
    public static final String TABLE_FLIGHTS = "flights";
    private static final int DATABASE_VERSION = 1;
    public static final String FLIGHT_COLUMN_ID = "_id";
    public static final String FLIGHT_NUMBER = "number";
    public static final String FLIGHT_DATE = "date";
    public static final String FLIGHT_REG = "reg";
    public static final String FLIGHT_AIRLINE = "airline";
    public static final String FLIGHT_TYPE = "type";
    public static final String FLIGHT_IMAGE_PATH = "image";

    public DatabaseSQ(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {

        String query = "CREATE TABLE " + TABLE_FLIGHTS + "(" +
            FLIGHT_COLUMN_ID + "INTEGER PRIMARY KEY, " +
                FLIGHT_NUMBER + " TEXT, " +
                FLIGHT_DATE + " TEXT, " +
                FLIGHT_REG + " TEXT, " +
                FLIGHT_AIRLINE + " TEXT, " +
                FLIGHT_TYPE + " TEXT, " +
                FLIGHT_IMAGE_PATH + " TEXT " +
                ");";

        db.execSQL(query);


    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_FLIGHTS);
        onCreate(db);
    }

    public void insertFlight(Flight toADD) {

        ContentValues contentValues = new ContentValues();

        contentValues.put(FLIGHT_COLUMN_ID, toADD.getId());
        contentValues.put(FLIGHT_NUMBER, toADD.getFlightNumber());
        contentValues.put(FLIGHT_DATE, toADD.getDate());
        contentValues.put(FLIGHT_REG, toADD.getReg());
        contentValues.put(FLIGHT_AIRLINE, toADD.getAirline());
        contentValues.put(FLIGHT_TYPE, toADD.getType());
        contentValues.put(FLIGHT_IMAGE_PATH, toADD.getImagePath());

        SQLiteDatabase db = getWritableDatabase();




        db.insert(TABLE_FLIGHTS, null, contentValues);
        db.close();

    }

    public String databaseToString() {

        String dbString = "";
        SQLiteDatabase db = getWritableDatabase();
        String query = "SELECT * FROM " + TABLE_FLIGHTS + " WHERE 1";

        Cursor c = db.rawQuery(query, null);
        c.moveToFirst();

        while(!c.isAfterLast()) {
            if(c.getString(c.getColumnIndex("number")) != null) {
                dbString += c.getString(c.getColumnIndex("number"));
                dbString += "\n";
            }
            c.moveToNext();
        }
        db.close();
        return dbString;
    }
}
当在另一个活动文件中单击按钮时,必须存储一个新的航班对象并将其航班号传递给主活动时,将调用该数据库。(数据库对象dbHandler在前面已实例化)


问题是因为您在表上的光标移动错误。尝试如下

Cursor c = db.rawQuery(query, null);
if(c != null) {
    while(c.moveToNext()) {
        dbString += c.getString(c.getColumnIndex("number"));
        dbString += "\n";
    }
    c.close()
}
列名与其类型之间缺少空格。这本身并不是语法错误,列名只是变成了
\u idINTEGER

db.insert(TABLE_FLIGHTS, null, contentValues);
由于没有
FLIGHT\u COLUMN\u ID
列,此插入将失败。使用
insertOrThrow()
而不是
insert()
在出现错误时引发异常

此外,您不需要在
整数主键
列中插入值-将自动为您生成一个新的rowid


更正
CREATE TABLE
SQL后,您可以卸载应用程序以使
onCreate()
再次运行。

您是否可以尝试使用SELECT*FROM“+TABLE\u航班作为查询?请删除不必要的“WHERE 1”部分。尝试过,不起作用:(我试过了,但没有起作用,因为我确实将光标移到了第一行,所以我看不出有多大的不同。什么“SELECT*FROM”+TABLE_FLIGHTS+“WHERE 1”do?这里有点问题!WHERE需要什么
子句?
FLIGHT_COLUMN_ID + "INTEGER PRIMARY KEY, " +
contentValues.put(FLIGHT_COLUMN_ID, toADD.getId());
db.insert(TABLE_FLIGHTS, null, contentValues);