【问题标题】:No Column error when SQLite table creation in Android with Android Studio使用 Android Studio 在 Android 中创建 SQLite 表时没有列错误
【发布时间】:2015-04-08 04:43:01
【问题描述】:

我正在尝试为我的代码实现一个 sqlite 数据库来保存基本变量。但是,在模拟器上运行时,出现无列错误。任何见解将不胜感激。 错误:

(1) table reg_info has no column named user_pass
04-08 00:28:35.402    3133-3133/com.example.cowman897.sqlitedatabase E/SQLiteDatabase﹕ Error inserting user_pass=ghd user_ass=ggg user_name=sd
android.database.sqlite.SQLiteException: table reg_info has no column named user_pass (code 1): , while compiling: INSERT INTO reg_info(user_pass,user_ass,user_name) VALUES (?,?,?)

我的代码如下:

public class TableData {

    public TableData() {
    }

    public static abstract class TableInfo implements BaseColumns {
        public static final String USER_NAME = "user_name";
        public static final String USER_PASS = "user_pass";
        public static final String USER_ASS = "user_ass";
        public static final String DATABASE_NAME = "user_info";
        public static final String TABLE_NAME = "reg_info";
    }
}

public class DatabaseOperations extends SQLiteOpenHelper {

    public static final int database_version = 3;
    public String CREATE_QUERY = "create table " + TableData.TableInfo.TABLE_NAME + " (" + null + " integer primary key autoincrement, " + TableData.TableInfo.USER_NAME + " text not null, " + TableData.TableInfo.USER_PASS + " text not null, " + TableData.TableInfo.USER_ASS + " text not null);";

    public DatabaseOperations(Context context) {
        super(context, TableData.TableInfo.DATABASE_NAME, null, database_version);
        Log.d("Database operations", "Database Created");
    }

    @Override
    public void onCreate(SQLiteDatabase sdb) {
        sdb.execSQL(CREATE_QUERY);
        Log.d("Database operations", "Table Created");

    }

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

    public void putInformation(DatabaseOperations dop, String name, String pass, String ass) {
        SQLiteDatabase SQ = dop.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(TableData.TableInfo.USER_NAME, name);
        cv.put(TableData.TableInfo.USER_PASS, pass);
        cv.put(TableData.TableInfo.USER_ASS, ass);
        long k = SQ.insert(TableData.TableInfo.TABLE_NAME, null, cv);
        Log.d("Database operations", "One raw inserted");
    }
}

活动只是

public class MainActivity extends ActionBarActivity {

    Button sub;
    String Class, Date, Assignment;
    EditText Class_Field, Date_Field, Assignment_Field;
    Context ctx = this;

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

        sub = (Button) findViewById(R.id.button);
        Class_Field = (EditText) findViewById(R.id.editText);
        Date_Field = (EditText) findViewById(R.id.editText2);
        Assignment_Field = (EditText) findViewById(R.id.editText3);

        sub.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Class = Class_Field.getText().toString();
                Date = Date_Field.getText().toString();
                Assignment = Assignment_Field.getText().toString();
                DatabaseOperations DB = new DatabaseOperations(ctx);
                DB.putInformation(DB, Class, Date, Assignment);
                Toast.makeText(getBaseContext(), "Assignment Added", Toast.LENGTH_LONG).show();
                finish();
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.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();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

任何帮助将不胜感激。

【问题讨论】:

  • 我认为你的表没有创建...
  • 您稍后是否在表格中添加了user_pass 列?有可能一旦创建了数据库然后您更改了数据库,那么新的数据库更改就不会发生。为此,您需要卸载应用程序并再次运行。 @user2850572
  • create 语句中的 null 是什么?
  • 这是什么鬼? "create table " + TableData.TableInfo.TABLE_NAME + " (" + null + " integer primary key autoincrement, " ... NULL?!

标签: android database sqlite android-studio


【解决方案1】:

如下更新你的表创建语句并尝试,

private static final String CREATE_QUERY = "CREATE TABLE " + TableData.TableInfo.TABLE_NAME + " (" + 
                                                 TableData.TableInfo._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                                                 TableData.TableInfo.USER_NAME + " text not null, " + 
                                                 TableData.TableInfo.USER_PASS + " text not null, "+ 
                                                 TableData.TableInfo.USER_ASS + " text not null "+
                                                  " )";

【讨论】:

    猜你喜欢
    • 2016-01-21
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多