2016-09-26 2 views
-1

Я знаю, что StackOverflow, вероятно, видел слишком много вопросов о отсутствии такого столбца.
Но насколько я искал, те, которые я нашел, использовали rawQuery() и использовали одну строку с командами.
По просьбе @ Code-Apprentice и сам рекомендовал вместо этого использовать query(), я создаю свою.android.database.sqlite.SQLiteException: нет такого столбца: COLUMN_USER_USERNAME

Этот метод ниже подключается к таблице, чтобы пользователь мог проверить логин/пароль, а затем запустить другое действие.
Моя ошибка «нет такого столбца».

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

public boolean search_access(user user){ 
    SQLiteDatabase db = this.getReadableDatabase(); 
    String [] tabela_user = new String[]{"usuaid","username","password"}; 
    String [] whereargs = new String[]{user.getUsername()}; 
    String compare_user = "COLUMN_USER_USERNAME = ?"; 

    Cursor cursor = db.query(TABLE_USER, tabela_user, compare_user, whereargs, null, null, null); 

    cursor.moveToFirst(); 
    if(cursor.getString(0).equals(user.getPassword())) { 
     return true; 
    } else{ 
     CharSequence text = "Incorrect Username/Password!!"; 
     int duration = Toast.LENGTH_SHORT; 
     Toast toast = Toast.makeText(null, text, duration); 
     toast.show(); 
     return false; 
    } 
} 

Ошибка:

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.relatoriodeobras, PID: 2714 
       android.database.sqlite.SQLiteException: no such column: COLUMN_USER_USERNAME (code 1): , while compiling: SELECT usuaid, username, password FROM usuario WHERE COLUMN_USER_USERNAME = ? 
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889) 
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500) 
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37) 
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316) 
        at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163) 
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034) 
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1202) 
        at com.example.relatoriodeobras.projeto_db.busca_acesso(projeto_db.java:173) <- ERROR LINE HERE, which is Cursor's 
        at com.example.relatoriodeobras.MainActivity$1.onClick(MainActivity.java:42) 
        at android.view.View.performClick(View.java:4780) 
        at android.view.View$PerformClick.run(View.java:19866) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5254) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

EDIT: SQLiteOpenHelper класс. Просто добавлены части, связанные с управлением пользователями.

package com.example.relatoriodeobras; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 
import android.widget.Toast; 

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

public final class projeto_db extends SQLiteOpenHelper{ 

public static final String LOG = "DatabaseHelper"; 
public static final int DATABASE_VERSION = 1; 
public static final String DATABASE_NAME = "projeto_db"; 

public static final String TABLE_USER = "usuario"; 

public static final String COLUMN_USER_ENTRY_ID = "usuaid"; 
public static final String COLUMN_USER_USERNAME = "username"; 
public static final String COLUMN_USER_PASSWORD = "password"; 

private static final String CREATE_TABLE_USER = "CREATE TABLE " 
     + TABLE_USER + "(" + COLUMN_USER_ENTRY_ID + " INTEGER PRIMARY KEY, " + COLUMN_USER_USERNAME 
     + " TEXT, " + COLUMN_USER_PASSWORD + " TEXT, " + KEY_CREATED_AT + " DATETIME" + ")"; 

public projeto_db(Context context) { 

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

@Override 
public void onCreate(SQLiteDatabase db){ 
    db.execSQL(CREATE_TABLE_USER); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // on upgrade drop older tables 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_USER); 
    onCreate(db); 
} 

public boolean registra_usuario(user user){ //Registra fiscais que utilizarão o sistema.registrado = true; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    try{ 
     values.put(COLUMN_USER_USERNAME, add_usuario.username); 
     values.put(COLUMN_USER_PASSWORD, add_usuario.password); 
     values.put(KEY_CREATED_AT  , add_usuario.created_at); 
     db.insert(TABLE_USER, null, values); 
     db.close(); 
     return true; 
    }catch (Exception e){ 
     db.close(); 
     return false; 
    } 
} 

public boolean busca_acesso(user user){ 
    SQLiteDatabase db = this.getReadableDatabase(); 
    String [] tabela_user = new String[]{"usuaid","username","password"}; 
    String [] whereargs = new String[]{user.getUsername()}; 
    String compare_user = "COLUMN_USER_USERNAME = ?"; 

    Cursor cursor = db.query(TABLE_USER, tabela_user, compare_user, whereargs, null, null, null); 

    cursor.moveToFirst(); 
    if(cursor.getString(0).equals(user.getPassword())) { 
     return true; 
    } else{ 
     CharSequence text = "Incorrect Username/Password!!"; 
     int duration = Toast.LENGTH_SHORT; 
     Toast toast = Toast.makeText(null, text, duration); 
     toast.show(); 
     return false; 
    } 
} 
public static String getDateTime() { 
    SimpleDateFormat dateFormat = new SimpleDateFormat(
      "yyyy-MM-dd HH:mm:ss", Locale.getDefault()); 
    Date date = new Date(); 
    return dateFormat.format(date); 
} 
}} 

класс пользователя

package com.example.relatoriodeobras; 

import android.database.sqlite.SQLiteDatabase; 


public class user { 
private static projeto_db dbHelper; 
private static SQLiteDatabase database; 

int id = 0; 
private String username; 
String password; 
String created_at; 
static boolean registrado = false; 

public int getId() { 

    return id; 
} 

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

public String getUsername() { 

    return username; 
} 

public void setUsername(String username) { 

    this.username = username; 
} 

public String getPassword() { 

    return password; 

} 

public void setPassword(String password) { 

    this.password = password; 
} 


public void setCreated_at(String created_at) { 
    this.created_at = created_at; 
} 

public String getCreated_at() { 

    return created_at; 
} 
} 

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

+2

Предположительно, ошибка верна и что в вашей таблице нет столбца с именем 'COLUMN_USER_USERNAME'. Вы можете рассмотреть возможность публикации полного 'SQLiteOpenHelper' или, по крайней мере, его методов' onCreate() 'и' onUpgrade() '. – CommonsWare

ответ

1

Ваша ошибка не лежит. У вас нет столбца с именем COLUMN_USER_USERNAME.

У вас есть переменная с этим именем.

Значение строки для него является "username"

Вариант 1:

String compare_user = projeto_db.COLUMN_USER_USERNAME + " = ?"; 

Вариант 2:

String compare_user = "username = ?"; 

Помимо: Не храните пароли в обычный текст

+0

Я знаю это. Это всего лишь тест, который я делаю. Так как я еще не дошел до криптографии. Но спасибо за объяснение. Я буду искать способ решить эту проблему. – HextechEnthusiast

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