2013-02-19 2 views
0

Вот мой код класса dbHelper:SQLite Исключения вопрос вставки данных для столбцов

package com.example.emp_management; 


import android.content.ContentValues; 
import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteDatabase.CursorFactory; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class DatabaseHelper extends SQLiteOpenHelper { 

public DatabaseHelper(Context context) { 
    super(context, dbName, null, 1); 
    // TODO Auto-generated constructor stub 
} 
static final String dbName="EmployeeManagementSystem"; 
static final String Login_Table="Login_Authentication"; 
static final String colID="ID"; 
static final String colUsername="Username"; 
static final String colPassword="Passwrod"; 

@Override 
public void onCreate(SQLiteDatabase db) { 
// TODO Auto-generated method stub 
//db.execSQL("CREATE TABLE" + Login_Table+ "(" + 
    //  colID + "INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     // colUsername + "TEXT NOT NULL," + 
      // colPassword + "TEXT NOT NULL);"      
      //); 
//db.execSQL("CREATE TABLE "+Login_Table+" ("+colID+ " INTEGER PRIMARY KEY AUTOINCREMENT ,"+ 
    // colUsername+ " TEXT ,"+ colPassword + "TEXT"); 
db.execSQL("CREATE TABLE " + Login_Table + "(colID INTEGER PRIMARY KEY AUTOINCREMENT, colUsername TEXT NOT NULL,colPassword TEXT NOT NULL);"); 
Log.w("Come aww man", "Database Table Created!!"); 


} 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
// TODO Auto-generated method stub 
db.execSQL("DROP TABLE IF EXISTS " + "Login_Authentication"); 
onCreate(db); 
} 
public void insert_new_user(String username,String password) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues cv = new ContentValues(); 
    cv.put(DatabaseHelper.colUsername,username); 
    cv.put(DatabaseHelper.colPassword,password); 
    db.insert(Login_Table, null, cv); 
    db.close(); 
    } 
} 

Вот код я использует, чтобы добавить новый сотрудник в таблицу я создал:

package com.example.emp_management; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class Adding_Employee extends Activity{ 

@Override 
protected void onCreate(Bundle aglakaam) { 
    // TODO Auto-generated method stub 
    super.onCreate(aglakaam); 

    setContentView(R.layout.add_employee); 
    final EditText new_user = (EditText) findViewById(R.id.editText1); 
    final EditText new_pass = (EditText) findViewById(R.id.editText2); 
    final Button create_acc = (Button) findViewById(R.id.creat_acc); 

    create_acc.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     DatabaseHelper accessing_db = new DatabaseHelper(Adding_Employee.this); 
     accessing_db.insert_new_user(new_user.getText().toString(), new_pass.getText().toString()); 
     Toast.makeText(getApplicationContext(), "New User Has Been Created!!", Toast.LENGTH_SHORT).show(); 

    } 
}); 
} 


} 

И вот мой логарифт:

02-20 02:42:26.491: E/Database(384): Error inserting Passwrod=1234 Username=sjdf 
02-20 02:42:26.491: E/Database(384): android.database.sqlite.SQLiteException: table  Login_Authentication has no column named Passwrod: , while compiling: INSERT INTO Login_Authentication(Passwrod, Username) VALUES(?, ?); 
02-20 02:42:26.491: E/Database(384): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 

Что-то странное здесь для меня здесь, что столбец имени пользователя существует. Почему это только показывает исключение для пароля, а не имя пользователя, и даже если существует столбец пароля, почему это исключение выбрано здесь. Пожалуйста, помогите мне!

ответ

1

Вы создаете столбцы с именами colPassword, colUsername и colID

db.execSQL("CREATE TABLE " + Login_Table + "(colID INTEGER PRIMARY KEY AUTOINCREMENT, colUsername TEXT NOT NULL,colPassword TEXT NOT NULL);"); 

, а затем пытается получить доступ к ним с помощью

static final String colID="ID"; 
static final String colUsername="Username"; 
static final String colPassword="Passwrod"; 

С Passwrod! = ColPassword .. конечно вы выиграли» t найти этот столбец.

Попробуйте что-то вроде этого, чтобы убедиться, что вы используете одинаковые имена для столбцов при создании таблицы вместе с ее доступом. Вам нужно будет увеличить версию своего БД, чтобы изменения отображались.

db.execSQL("CREATE TABLE " + Login_Table + "(" + colID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + colUsername + " TEXT NOT NULL," + colPassword + " TEXT NOT NULL);"); 
+0

его с тем же исключением сэр! – Alfred

+1

@Alfred Вы увеличили версию БД? super (context, dbName, null, 2); – dymmeh

+0

О, да, я забыл, что у меня есть увеличение версии на 1 каждый раз, когда я меняю. Мое приложение теперь выходит с неперехваченным исключением, а logcat говорит: 02-20 03: 13: 30.651: E/Database (625): Сбой 1 (AUTOINCREMENT разрешен только в INTEGER PRIMARY KEY) на 0x3312f0 при подготовке 'CREATE TABLE Login_Authentication (IDINTEGER PRIMARY KEY AUTOINCREMENT, UsernameTEXT NOT NULL, PasswordTEXT NOT NULL); '. – Alfred

-1

Вы ошибочно писали пароль как Passwrod. Простая опечатка. Кроме того, Java не выполняет переменную строковую интерполяцию, вам нужно использовать конкатенацию.

1

Может быть, вам просто нужно место после colID, colUsername, colPassword

db.execSQL ("CREATE TABLE" + Login_Table + "(" + colID + "INTEGER PRIMARY KEY AUTOINCREMENT," + colUsername + " TEXT NOT NULL "+ colPassword +" TEXT NOT NULL); ");

Смежные вопросы