私は、StackOverflowはおそらく、そのような列についてはあまりにも多くの質問を見ていることがわかります。
しかし、私が検索したところでは、見つかったものはrawQuery()
を使用していて、コマンドで1つのStringを使用していました。
@ 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);
}
}}
Userクラス
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;
}
}
私はあなたたちは、おそらくそれはめちゃくちゃだと思うかもしれないと思うので、私は、コードの組織といくつかの助けを大幅に感謝します。
おそらく、エラーは正しいですし、テーブルには 'COLUMN_USER_USERNAME'という名前の列がないと思われます。完全な 'SQLiteOpenHelper'、あるいは少なくともonCreate()とonUpgrade()メソッドを投稿することを検討するかもしれません。 – CommonsWare