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
链接android应用程序的嵌套SQLite数据库表_Android_Sqlite - Fatal编程技术网

链接android应用程序的嵌套SQLite数据库表

链接android应用程序的嵌套SQLite数据库表,android,sqlite,Android,Sqlite,我在做一个android项目,只是想让你知道我是个新手。我有一个有多个表的项目。有一个列表活动,单击该活动将导致另一个列表活动。顶级活动的构造函数在创建行时为类设置id。第二级活动的表和数据中包含对顶级活动id的引用。我不确定在创建第二级活动的对象时如何添加id。也许看看我的代码会让问题更清楚 这是我的学期课: package com.mikero.termtracker; public class Term { private long id; private String

我在做一个android项目,只是想让你知道我是个新手。我有一个有多个表的项目。有一个列表活动,单击该活动将导致另一个列表活动。顶级活动的构造函数在创建行时为类设置id。第二级活动的表和数据中包含对顶级活动id的引用。我不确定在创建第二级活动的对象时如何添加id。也许看看我的代码会让问题更清楚

这是我的学期课:

package com.mikero.termtracker;

public class Term {

    private long id;
    private String termsName;
    private String termStartDate;
    private String termEndDate;

    //Constructor
    Term(){

    }

    Term(String termsName, String termStartDate, String termEndDate){
        this.termsName = termsName;
        this.termStartDate = termStartDate;
        this.termEndDate = termEndDate;
    }

    Term(int id, String termsName, String termStartDate, String termEndDate){
        this.id = id;
        this.termsName = termsName;
        this.termStartDate = termStartDate;
        this.termEndDate = termEndDate;
    }

    //G&S id

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    //G&S terms name

    public String getTermsName() {
        return termsName;
    }

    public void setTermsName(String termsName) {
        this.termsName = termsName;
    }

    //G&S terms start date

    public String getTermStartDate() {
        return termStartDate;
    }

    public void setTermStartDate(String termStartDate) {
        this.termStartDate = termStartDate;
    }

    //G&S terms end date

    public String getTermEndDate() {
        return termEndDate;
    }

    public void setTermEndDate(String termEndDate) {
        this.termEndDate = termEndDate;
    }

    public String toString(){
        return termsName;
    }
}
这是我的课程:

package com.mikero.termtracker;

public class Course {

    private long id;
    private String courseName;
    private String courseStart;
    private String courseEnd;
    private String courseStatus;
    private String courseMentor;
    private String termId;

    Course(){

    }
//需要此构造函数的帮助吗

    Course(String courseName, String courseStart, String courseEnd, String courseStatus,
           String courseMentor){
        this.courseName = courseName;
        this.courseStart = courseStart;
        this.courseEnd = courseEnd;
        this.courseStatus = courseStatus;
        this.courseMentor = courseMentor;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public String getCourseStart() {
        return courseStart;
    }

    public void setCourseStart(String courseStart) {
        this.courseStart = courseStart;
    }

    public String getCourseEnd() {
        return courseEnd;
    }

    public void setCourseEnd(String courseEnd) {
        this.courseEnd = courseEnd;
    }

    public String getCourseStatus() {
        return courseStatus;
    }

    public void setCourseStatus(String courseStatus) {
        this.courseStatus = courseStatus;
    }

    public String getCourseMentor() {
        return courseMentor;
    }

    public void setCourseMentor(String courseMentor) {
        this.courseMentor = courseMentor;
    }

    public String getTermId() {
        return termId;
    }

    public void setTermId(String termId) {
        this.termId = termId;
    }

    public String toString() {
        return courseName;
    }
}
下面是一个数据源类,它根据从编辑文本框收集的数据创建行和类:

package com.mikero.termtracker;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;

import java.util.ArrayList;
import java.util.List;

public class DataSource {

    //Fields
    private SQLiteDatabase db;
    private DBOpenHelper helper;

    private String[] allTermColums = {DBOpenHelper.KEY_ID, DBOpenHelper.NAME_OF_TERM,
        DBOpenHelper.TERM_START_DATE, DBOpenHelper.TERM_END_DATE};

    private String[] allCourseColums = {DBOpenHelper.COURSE_ID, DBOpenHelper.COURSE_NAME,
        DBOpenHelper.COURSE_START, DBOpenHelper.COURSE_END, DBOpenHelper.COURSE_STATUS,
        DBOpenHelper.COURSE_MENTOR, DBOpenHelper.KEY_ID};

    public DataSource(Context context){
        helper = new DBOpenHelper(context);
    }

    public void open() throws SQLiteException{
        db = helper.getWritableDatabase();
    }

    public void close(){
        helper.close();
    }

    //Create Term
    public Term createTerm(Term term){
        ContentValues cv = new ContentValues();
        cv.put(DBOpenHelper.NAME_OF_TERM, term.getTermsName());
        cv.put(DBOpenHelper.TERM_START_DATE, term.getTermStartDate());
        cv.put(DBOpenHelper.TERM_END_DATE, term.getTermEndDate());
        long insertId = db.insert(DBOpenHelper.TERMS_TABLE, null, cv);
        term.setId(insertId);
        return term;
    }

    //Create Course
    public Course createCourse(Course course){
        ContentValues cv = new ContentValues();
        cv.put(DBOpenHelper.COURSE_NAME, course.getCourseName());
        cv.put(DBOpenHelper.COURSE_START, course.getCourseStart());
        cv.put(DBOpenHelper.COURSE_END, course.getCourseEnd());
        cv.put(DBOpenHelper.COURSE_STATUS, course.getCourseStatus());
        cv.put(DBOpenHelper.COURSE_MENTOR, course.getCourseMentor());
        cv.put(DBOpenHelper.KEY_ID, course.getTermId());
        long insertId = db.insert(DBOpenHelper.COURSE_TABLE, null, cv);
        course.setId(insertId);
        return course;
    }

    //Update term
    public void updateTerm(Term term){
        long id = term.getId();
        ContentValues cv = new ContentValues();
        cv.put(DBOpenHelper.NAME_OF_TERM, term.getTermsName());
        cv.put(DBOpenHelper.TERM_START_DATE, term.getTermStartDate());
        cv.put(DBOpenHelper.TERM_END_DATE, term.getTermEndDate());
        db.update(DBOpenHelper.TERMS_TABLE, cv, DBOpenHelper.KEY_ID + " = " + id, null);
    }

    //Update Course
    public void updateCourse(Course course){
        long id = course.getId();
        ContentValues cv = new ContentValues();
        cv.put(DBOpenHelper.COURSE_NAME, course.getCourseName());
        cv.put(DBOpenHelper.COURSE_START, course.getCourseStart());
        cv.put(DBOpenHelper.COURSE_END, course.getCourseEnd());
        cv.put(DBOpenHelper.COURSE_STATUS, course.getCourseStatus());
        cv.put(DBOpenHelper.COURSE_MENTOR, course.getCourseMentor());
        cv.put(DBOpenHelper.KEY_ID, course.getTermId());
        db.update(DBOpenHelper.COURSE_TABLE, cv, DBOpenHelper.COURSE_ID + " = " + id, null);
    }

    //CursorToTerm method
    private Term cursorToTerm(Cursor cursor){
        Term term  = new Term();
        term.setId(cursor.getLong(0));
        term.setTermsName(cursor.getString(1));
        term.setTermStartDate(cursor.getString(2));
        term.setTermEndDate(cursor.getString(3));
        return term;
    }

    //CursonToCourse
    private Course cursorToCourse(Cursor cursor){
        Course course = new Course();
        course.setId(cursor.getLong(0));
        course.setCourseName(cursor.getString(1));
        course.setCourseStart(cursor.getString(2));
        course.setCourseEnd(cursor.getString(3));
        course.setCourseStatus(cursor.getString(4));
        course.setCourseMentor(cursor.getString(5));
        return course;
    }

    //Getting all terms
    public List<Term> getAllTerms(){
        List<Term> termList = new ArrayList<>();

        Cursor cursor = db.query(DBOpenHelper.TERMS_TABLE, allTermColums,
                null, null, null, null, null);

        cursor.moveToFirst();
        while(!cursor.isAfterLast()) {
            Term term = cursorToTerm(cursor);
            termList.add(term);
            cursor.moveToNext();
        }
        cursor.close();
        return termList;
    }

    //Getting all courses
    public List<Course> getAllCourses(){
        List<Course> courseList = new ArrayList<>();

        Cursor cursor = db.query(DBOpenHelper.COURSE_TABLE, allCourseColums,
                null, null, null, null, null);

        cursor.moveToFirst();
        while(!cursor.isAfterLast()){
            Course course = cursorToCourse(cursor);
            courseList.add(course);
            cursor.moveToNext();
        }
        cursor.close();
        return courseList;
    }

    //Getting and creating a single term
    public Term getSingleTermById(long id){
        Cursor cursor = db.query(DBOpenHelper.TERMS_TABLE, allTermColums,
                DBOpenHelper.KEY_ID + " = ?",
                new String[] {String.valueOf(id)}, null, null, null);
        if (cursor != null){
            cursor.moveToFirst();
        }

        Term term = cursorToTerm(cursor);
        return term;
    }

    //Getting and creating a single course
    public Course getSingleCourseById(long id){
        Cursor cursor = db.query(DBOpenHelper.COURSE_TABLE, allCourseColums,
                DBOpenHelper.COURSE_ID + " = ?",
                new String[] {String.valueOf(id)}, null, null, null);
        if (cursor != null){
            cursor.moveToFirst();
        }

       Course course = cursorToCourse(cursor);
        return course;
    }


    //Delete single term
    public void deleteTerm(Term term){
        long id = term.getId();
        db.delete(DBOpenHelper.TERMS_TABLE, DBOpenHelper.KEY_ID + " = " + id, null);
    }
    //Delete single course
    public void deleteCourse(Course course){
        long id = course.getId();
        db.delete(DBOpenHelper.COURSE_TABLE, DBOpenHelper.COURSE_ID + " = " + id, null);
    }

    //Delete single term by id
    public void deleteTermById(long id){
        db.delete(DBOpenHelper.TERMS_TABLE, DBOpenHelper.KEY_ID + " = " + id, null);
    }
    //Delete single course by id
    public void deleteCourseById(long id){
        db.delete(DBOpenHelper.COURSE_TABLE, DBOpenHelper.COURSE_ID + " = " + id, null);
    }

}

当我调用createterm()方法时,您可以从数据源中看到,它将所有适当的列添加到数据库中,然后更新id,然后返回术语。当我尝试运行createcourse()方法时,我不确定如何创建一个能够从相关术语中获取正确id的课程对象

您需要检索存储的学期ID,并将其传递给要存储的新课程对象。我想也许我可以利用意图继续将ID传递给以下活动。@Jonas452您能给我一个如何执行此操作的示例吗?我不知道如何找到正确的术语。
package com.mikero.termtracker;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class CourseEditActivity extends AppCompatActivity {

    private Button courseAddButton;
    private EditText courseNameEditText;
    private EditText courseStartEditText;
    private EditText courseEndEditText;
    private EditText courseStatusEditText;
    private EditText courseMentorEditText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_term_edit);


        courseAddButton = (Button) findViewById(R.id.add_course_button);
        courseNameEditText = (EditText) findViewById(R.id.course_name_edittext);
        courseStartEditText = (EditText) findViewById(R.id.course_start_edittext);
        courseEndEditText= (EditText) findViewById(R.id.course_end_editext);
        courseStatusEditText = (EditText) findViewById(R.id.course_status_editext);
        courseMentorEditText = (EditText) findViewById(R.id.course_mentor_editext);

        courseAddButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Code to test that edit boxes are filled

                if(courseNameEditText.getText().toString().trim().length() > 0
                        && courseStartEditText.getText().toString().trim().length() > 0
                        && courseEndEditText.getText().toString().trim().length() > 0)
                        && courseStatusEditText.getText().toString().trim().length() > 0
                        && courseMentorEditText.getText().toString().trim().length() > 0 {
                    Course course = new Course(courseNameEditText.getText().toString(),
                            courseStartEditText.getText().toString(),
                            courseEndEditText.getText().toString()),
                            courseStatusEditText.getText().toString()),
                            courseMentorEditText.getText().toString());
                    DataSource ds = new DataSource(getApplicationContext());
                    ds.open();
                    ds.createCourse(course);
                    ds.close();
                }

            }
        });
    }
}