【发布时间】:2016-10-04 18:18:46
【问题描述】:
我们有这两个类 MainActivity 和一个 DBHelper
DBHelper 创建数据库和两个表一个表masterPW,它将只有一行和两列ID 和ColPW。一旦创建并插入数据,该表将只包含一条记录。
应用启动时,ColPW 列将为空或 null
第一次。
我们希望在应用启动时以编程方式调用rawQuery,并将ColPW 列的值设置为String。
如果字符串变量为 null 或为空,则显示 MainActivity
两个EditText 字段和保存按钮。如果字符串变量获得
来自ColPW 列的数据。 MainActivity 将只显示一个
EditText 字段和 ENTER 按钮。
作为真正的 Android 新手,我不知道如何制作
应用程序以编程方式调用rawQuery。我应该把rawQuery放在哪里?
如果查询结果在DBHelper类中,如何发送
结果到MainActivity?意图,全局单例类,或
使用带有 getter 和 setter 以及 Adapter 类的模型类?
我已经用 DerbyDB 和 JavaFX 编写了这个,但我可以打开 并创建表查询同一个类中的表
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button btnSave;
Button btnEnter;
TextView tvPW;
TextView tvCPW;
EditText etPW;
EditText etCPW;
int x = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
tvPW = (TextView) findViewById( R.id.tvPW );
tvCPW = (TextView) findViewById( R.id.tvCPW );
etPW = (EditText) findViewById( R.id.etPW );
etCPW = (EditText) findViewById( R.id.etCPW );
btnEnter = (Button) findViewById( R.id.btnEnter );
btnSave = (Button) findViewById( R.id.btnSave );
addListenerOnButtonSave();
DBHelper dbHelper = new DBHelper( this );
String str = dbHelper.getCol_PW();
if (str == null || str.isEmpty()) {
System.out.println( "I am null" );
} else {
System.out.println( "I am NOT NULL" );
}
}
private void addListenerOnButtonSave() {
btnSave.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
if (x == 1) {
btnSave.setVisibility( View.INVISIBLE );
btnEnter.setVisibility( View.VISIBLE );
tvCPW.setVisibility( View.INVISIBLE );
etCPW.setVisibility( View.INVISIBLE );
etPW.requestFocus();
setTitle( "Enter Password" );
}
}
} );
}
}
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "PassWord";
public static final Integer DB_VERSION = 1;
public static final String TABLE_NAME = "masterPW";
public static final String Col_ID = "ID";
public static final String Col_MPW = "mpw";
private static final String MAKE_TABLE = "CREATE TABLE " + TABLE_NAME +
"(" + Col_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + Col_MPW + " TEXT" + ")";
SQLiteDatabase db;
public DBHelper(Context context){
super(context,DB_NAME,null,DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL( MAKE_TABLE );
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
db.execSQL(MAKE_TABLE);
}
public String getCol_PW(){
String str = null;
String q = "SELECT mpw FROM masterPW";
Cursor cursor = db.rawQuery(q,null);
if(cursor.moveToFirst()){
str = cursor.getString(cursor.getColumnIndex(Col_MPW));
}
return str;
}
}
【问题讨论】:
-
一个吸气剂 - 在 DBHelper 中。这就是你所需要的。然后,在 Activity 的
onCreate中创建一个DBHelper的实例。不需要单身人士。 SQLite 不处理 Intent。欢迎您为某些 ORM 目的创建模型,但这不是您的目的所必需的
标签: android sqlite android-sqlite