Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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/2/linux/22.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
Android 多表sqlite数据库_Android_Sqlite - Fatal编程技术网

Android 多表sqlite数据库

Android 多表sqlite数据库,android,sqlite,Android,Sqlite,我是SQlite数据库的新手,我想制作两个表: 1) my_folders( folder_id INTEGER PRIMARY KEY AUTOINCREMENT, folder_tite TEXT NOT NULL currency TEXT folder_descrip TEXT folder_pic TEXT ); 2) TABLE my_expenses( log_id INT

我是SQlite数据库的新手,我想制作两个表:

1) my_folders(
    folder_id       INTEGER PRIMARY KEY AUTOINCREMENT, 
    folder_tite     TEXT NOT NULL
    currency        TEXT 
    folder_descrip  TEXT
    folder_pic      TEXT
);

2) TABLE my_expenses(
    log_id      INTEGER PRIMARY KEY AUTOINCREMENT,
    e_folder_id INTEGER
    name        TEXT NOT NULL, 
    amount      INTEGER
    date        NUMERIC NOT NULL
    time        NUMERIC NOT NULL
    notes       TEXT
    FOREIGN KEY(e_folder_id) REFERENCES my_folders(folder_id)
);
我的问题是如何实现第二个表?我可以直接添加代码,在同一DBAdapter文件中创建第二个表“我的费用”吗?或者我应该像在中那样将所有表分隔在不同的文件中?如果是这种情况,在“我的\u文件夹和我的\u费用”表中插入新记录所需的代码是什么

我已经创建了1个表,可以通过以下代码向表中添加新记录:

Button b1 = (Button) findViewById(R.id.bnext); 
b1.setOnClickListener(new OnClickListener() 
        { public void onClick(View v) 
            {
                db.open();
                db.insertFolder(getFolderTitle.getText().toString(), 
                        getCurrency.getSelectedItem().toString(), getFolderDescription.getText().toString());
                db.close();
            }
        }

这是我的数据库代码:

public class DBAdapter 
{
    public static final String KEY_ROWID = "_id";
    public static final String KEY_NAME = "name";
    public static final String KEY_CURRENCY = "currency";
    public static final String KEY_NOTES = "notes";
    private static final String TAG = "DBAdapter";

    private static final String DATABASE_NAME = "MyDB";
    private static final String DATABASE_TABLE = "my_folders";
    private static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE = 
            "create table my_folders (_id integer primary key autoincrement, "
            + "name text not null, currency text not null, notes text not null);";

    private final Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public DBAdapter(Context ctx) 
    {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper 
    {
        DatabaseHelper(Context context) 
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) 
        {
            try 
            {
                db.execSQL(DATABASE_CREATE);
            } 
            catch (SQLException e) 
            {
                e.printStackTrace();
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
        {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS my_folders");
            onCreate(db);
        }
    }

    // ---opens the database---
    public DBAdapter open() throws SQLException 
    {
        db = DBHelper.getWritableDatabase();
        return this;
    }

    // ---closes the database---
    public void close() 
    {
        DBHelper.close();
    }

    // ---insert a folder into the database---
    public long insertFolder(String name, String currency, String notes) 
    {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_NAME, name);
        initialValues.put(KEY_CURRENCY, currency);
        initialValues.put(KEY_NOTES, notes);
        return db.insert(DATABASE_TABLE, null, initialValues);
    }

    // ---deletes a particular folder---
    public boolean deleteFolder(long rowId) 
    {
        return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
    }

    // ---deletes all folders---
    public boolean deleteAll()
    {
        return db.delete(DATABASE_TABLE, "1", null) > 0;
    }

    // ---retrieves all the folders---
    public Cursor getAllFolders() 
    {
        return db.query(DATABASE_TABLE, new String[] 
                {KEY_ROWID, KEY_NAME, KEY_CURRENCY, KEY_NOTES}, null, null, null, null, null);
    }

    // ---retrieves a particular folder---
    public Cursor getFolder(long rowId) throws SQLException 
    {
        Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] 
                { KEY_ROWID, KEY_NAME, KEY_CURRENCY, KEY_NOTES }, 
                KEY_ROWID + "=" + rowId, null, null, null, null, null);
        if (mCursor != null) 
        {
            mCursor.moveToFirst();
        }
        return mCursor;
    }

    // ---updates a folder---
    public boolean updateFolder(long rowId, String name, String currency, String notes) 
    {
        ContentValues args = new ContentValues();
        args.put(KEY_NAME, name);
        args.put(KEY_CURRENCY, currency);
        args.put(KEY_NOTES, notes);
        return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
    }
}

您只需在onCreate方法中执行更多查询:

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_DBINFO); //create table db_info as...
    db.execSQL(CREATE_TYPE); //create table ...
    db.execSQL(CREATE_TAG);  //create table ... all are constant strings!
    db.execSQL(CREATE_CATEGORY);
    db.execSQL(CREATE_RESOURCE);
    db.execSQL(CREATE_RESTAG);
    db.execSQL(CREATE_RESCAT);
    db.execSQL(CREATE_TYPECAT);
    db.execSQL("insert into DBInfo values(-1,0)");
    db.execSQL("insert into Tag values(1,'No tag',0)");
}
这是我不久前做的一个项目的一个简短示例。 这些是定义CREATETABLE查询的常量(您已经为第一个表定义了这些常量)


只需编写新的创建查询,就可以了。

只需在onCreate方法中执行更多查询:

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_DBINFO); //create table db_info as...
    db.execSQL(CREATE_TYPE); //create table ...
    db.execSQL(CREATE_TAG);  //create table ... all are constant strings!
    db.execSQL(CREATE_CATEGORY);
    db.execSQL(CREATE_RESOURCE);
    db.execSQL(CREATE_RESTAG);
    db.execSQL(CREATE_RESCAT);
    db.execSQL(CREATE_TYPECAT);
    db.execSQL("insert into DBInfo values(-1,0)");
    db.execSQL("insert into Tag values(1,'No tag',0)");
}
这是我不久前做的一个项目的一个简短示例。 这些是定义CREATETABLE查询的常量(您已经为第一个表定义了这些常量)


只要编写新的创建查询,就可以了。

是的,您可以在同一个文件中添加代码。 首先从my_folders中获取要添加到第二个表中的文件夹\u id,并将其存储在某个类变量中。 您可以使用返回文件夹id的函数

public int getFolder_id(String name) throws SQLException 
    {
       int id =0;
       Cursor cursor = db.rawQuery("select _id from my_folders where name  = ?", new String[] { name });

        if (mCursor != null) 
        {
            mCursor.moveToFirst();
            id = cursor.getInt(cursor.getColumnIndex("_id"));
        }
        return id;
    }

然后检查该变量是否不是0或-1,然后可以添加类似的代码以添加第二个表中的所有值。

是的,可以在同一文件中添加代码。 首先从my_folders中获取要添加到第二个表中的文件夹\u id,并将其存储在某个类变量中。 您可以使用返回文件夹id的函数

public int getFolder_id(String name) throws SQLException 
    {
       int id =0;
       Cursor cursor = db.rawQuery("select _id from my_folders where name  = ?", new String[] { name });

        if (mCursor != null) 
        {
            mCursor.moveToFirst();
            id = cursor.getInt(cursor.getColumnIndex("_id"));
        }
        return id;
    }
然后检查该变量是否不是0或-1,然后可以添加类似的代码来添加第二个表中的所有值