Android 数据库 报错

大哥王 2015-09-21 04:24:43
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.androiddatabase/com.androiddatabase.activity.MainActivity}: android.database.sqlite.SQLiteException: no such column: student_id: , while compiling: SELECT student_id FROM classes WHERE course_id=?


...全文
184 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
大哥王 2015-09-21
  • 打赏
  • 举报
回复
引用 4 楼 afei__ 的回复:
[quote=引用 2 楼 sinat_26862281 的回复:] [quote=引用 1 楼 afei__ 的回复:] 你看错误提示的内容说得很明白了, 数据库里没有 student_id这一列, 肯定是你的数据库出问题了
帮我看看呗~ 大哥[/quote]SQL语句写错了,漏了很多空格

String sql = "CREATE TABLE " + TABLE_NAME + "(" + ID
                    + " INTEGER PRIMARY KEY AUTOINCREMENT ," + NAME + " TEXT,"
                    + PASSWORD + " TEXT)";
给你看下示例,注意每个INTEGER、TEXT前面的空格[/quote]
package com.androiddatabase.activity;

import com.example.androiddatabase.ClassTable;
import com.example.androiddatabase.R;
import com.example.androiddatabase.SchemaHelper;

import android.support.v7.app.ActionBarActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        SchemaHelper sh = new SchemaHelper(this);
        //向数据库加入一个Student
        long sid1= sh.addStudent("王博", "cnn", 12);
        //加入一个课程 course
        long cid1 = sh.addCourse("cnn");
        
        //将课程与学生关联
        sh.enrollStudentClass((int)sid1, (int)cid1);
        
        //从课程中找到学生
        Cursor c = sh.getStudentsForCourse((int)cid1);
        while (c.moveToNext()) {
        	int colid = c.getColumnIndex(ClassTable.STUDENT_ID);
        	int sid = c.getInt(colid);
 
        	Log.v(String.valueOf(sid),String.valueOf(sid));
        	System.out.println(sid+"//"+cid1);
        	
        	
		}
        
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
这个是main的 好像是这里的错?
大哥王 2015-09-21
  • 打赏
  • 举报
回复
引用 4 楼 afei__ 的回复:
[quote=引用 2 楼 sinat_26862281 的回复:] [quote=引用 1 楼 afei__ 的回复:] 你看错误提示的内容说得很明白了, 数据库里没有 student_id这一列, 肯定是你的数据库出问题了
帮我看看呗~ 大哥[/quote]SQL语句写错了,漏了很多空格

String sql = "CREATE TABLE " + TABLE_NAME + "(" + ID
                    + " INTEGER PRIMARY KEY AUTOINCREMENT ," + NAME + " TEXT,"
                    + PASSWORD + " TEXT)";
给你看下示例,注意每个INTEGER、TEXT前面的空格[/quote] 大神帮看看~ 代码在上面 ~~~
大哥王 2015-09-21
  • 打赏
  • 举报
回复
引用 3 楼 u010566192 的回复:
Integer前面应该加个空格

package com.example.androiddatabase;

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

public class SchemaHelper extends SQLiteOpenHelper {

	private static final String DATABASE_NAME = "adv_data.db";
	private static final int DATABASE_VERSION = 1;

	public SchemaHelper(Context context) {

		super(context, DATABASE_NAME, null, DATABASE_VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {

		// 创建 学生 表
		db.execSQL("CREATE TABLE " + StudentTable.TABLE_NAME + " ("
				+ StudentTable.ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
				+ StudentTable.NAME + " TEXT," 
				+ StudentTable.STATE + " TEXT,"
				+ StudentTable.GRADE + " INTEGER);");

		// 创建课程表
		db.execSQL("CREATE TABLE " + CourseTable.TABLE_NAME + " ("
				+ CourseTable.ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
				+ CourseTable.NAME + " TEXT);");

		// 创建中间表 把学生和课程 关联起来
		db.execSQL("CREATE TABLE " + ClassTable.TABLE_NAME + " ("
				+ ClassTable.ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
				+ ClassTable.STUDENT_ID + " INTEGER,"
				+ ClassTable.COURSE_ID + " INTEGER);");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
	}

	// 一个加同学的函数
	public long addStudent(String name, String state, int grade) {

		ContentValues cv = new ContentValues();
		cv.put(StudentTable.NAME, name);
		cv.put(StudentTable.STATE, state);
		cv.put(StudentTable.GRADE, grade);

		SQLiteDatabase sd = getWritableDatabase();
		long result = sd.insert(StudentTable.TABLE_NAME, StudentTable.NAME, cv);

		return result;
	}

	// 一个加课程的函数
	public long addCourse(String name) {
		ContentValues cv = new ContentValues();
		cv.put(CourseTable.NAME, name);

		SQLiteDatabase sd = getWritableDatabase();
		long result = sd.insert(CourseTable.TABLE_NAME, CourseTable.NAME, cv);

		return result;
	}

	// 有ID号 把 学生和课表关联起来的函数
	public Boolean enrollStudentClass(int studentId, int courseId) {

		ContentValues cv = new ContentValues();
		cv.put(ClassTable.STUDENT_ID, studentId);
		cv.put(ClassTable.COURSE_ID, courseId);

		SQLiteDatabase sd = getWritableDatabase();
		long result = sd.insert(ClassTable.TABLE_NAME, ClassTable.STUDENT_ID, cv);

		return (result >= 0);
	}

	// 从课程表中找到都有哪些学生 函数

	public Cursor getStudentsForCourse(int courseId) {

		SQLiteDatabase sd = getWritableDatabase();

		// 我们只需要返回学生的ID
		String[] cols = new String[] { ClassTable.STUDENT_ID };
		String[] selectionArgs = new String[] { String.valueOf(courseId) };//转成字符串

		// 在数据库中查找
		//query 1 表名 2 返回的行 3 筛选条件 4 条件
		Cursor c = sd.query(ClassTable.TABLE_NAME, cols, ClassTable.COURSE_ID
				+ "=?", selectionArgs, null, null, null);
		return c;
	}
}
改了这个还有bug,报错还是这个 大神帮看看
阿飞__ 2015-09-21
  • 打赏
  • 举报
回复
引用 2 楼 sinat_26862281 的回复:
[quote=引用 1 楼 afei__ 的回复:] 你看错误提示的内容说得很明白了, 数据库里没有 student_id这一列, 肯定是你的数据库出问题了
帮我看看呗~ 大哥[/quote]SQL语句写错了,漏了很多空格

String sql = "CREATE TABLE " + TABLE_NAME + "(" + ID
                    + " INTEGER PRIMARY KEY AUTOINCREMENT ," + NAME + " TEXT,"
                    + PASSWORD + " TEXT)";
给你看下示例,注意每个INTEGER、TEXT前面的空格
萌萌的程序员 2015-09-21
  • 打赏
  • 举报
回复
Integer前面应该加个空格
大哥王 2015-09-21
  • 打赏
  • 举报
回复
引用 1 楼 afei__ 的回复:
你看错误提示的内容说得很明白了, 数据库里没有 student_id这一列, 肯定是你的数据库出问题了
帮我看看呗~ 大哥
阿飞__ 2015-09-21
  • 打赏
  • 举报
回复
你看错误提示的内容说得很明白了, 数据库里没有 student_id这一列, 肯定是你的数据库出问题了

80,362

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧