android 中的 SQLite:正在输入空白行 即使在 nullcolumnhack 设置为 null 之后。为什么?
SQLite in android : blank row being entered Even after nullcolumnhack is set to null. Why?
这是我的 dbAdapter class,它处理数据库中的数据输入。
已在自定义 dialogfragment 中初始化此 class 对象。以及我正在插入一行的自定义对话框片段按钮的 onclick 事件。
如果我将 edittext 留空然后执行 onclick ,它会 INSERTS 一行。它不应该。
请帮忙。
public class dbAdapter{
dbHelper dbhelper;
dbAdapter(Context context){
dbhelper = new dbHelper(context);
}
public long insert(String name){
SQLiteDatabase db = dbhelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(dbHelper.NAME,name);
long id = db.insert(dbHelper.TABLE_NAME,null,values);
db.close();
return id;
}
public String getalldata(){
SQLiteDatabase db = dbhelper.getWritableDatabase();
String[] columns={dbhelper.UID,dbhelper.NAME};
Cursor cursor = db.query(dbhelper.TABLE_NAME,columns,null,null,null,null,null);
StringBuffer buffer=new StringBuffer();
while (cursor.moveToNext()){
int cid = cursor.getInt(0);
String id=cursor.getString(1);
buffer.append(cid+": "+id+"\n");
}
return buffer.toString();
}
static class dbHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "geekslabstudios.db";
private static final String TABLE_NAME="GEEKS";
private static int DATABASE_VERSION =1;
private static final String UID = "_id";
private static final String NAME = "Name";
private static final String CREATE_TABLE="CREATE TABLE "+TABLE_NAME+" ("+UID+" INTEGER PRIMARY KEY AUTOINCREMENT , "+NAME+" VARCHAR(255));";
private static final String DROP_TABLE="DROP TABLE IF EXISTS "+TABLE_NAME;
private Context context;
public dbHelper(Context context) {
super(context, DATABASE_NAME, null,DATABASE_VERSION);
this.context=context;
Toast.makeText(context,"dbAdapter Constructor Called",Toast.LENGTH_SHORT).show();
}
@Override
public void onCreate(SQLiteDatabase db) {
//CREATE TABLE GEEKS (_id INTEGER PRIMARYKEY AUTOINCREMENT , Name VARCHAR(255));
//CREATE TABLE TABLE_NAME (COLUMN_1_NAME INTEGER PRIMARYKEY AUTOINCREMENT , COLUMN_2_NAME DATA_TYPE);
try{
db.execSQL(CREATE_TABLE);
Toast.makeText(context,"On Create Called",Toast.LENGTH_SHORT).show();
}catch (SQLiteException e){
e.printStackTrace();
Toast.makeText(context,""+e,Toast.LENGTH_SHORT).show();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
Toast.makeText(context,"On Upgrade Called",Toast.LENGTH_SHORT).show();
db.execSQL(DROP_TABLE);
onCreate(db);
}
catch (SQLiteException e){
e.printStackTrace();
Toast.makeText(context,""+e,Toast.LENGTH_SHORT).show();
}
}
}
}
我错过了什么吗?请帮助。
检查点击按钮后EditText是否为空。
如果是,则告诉用户填写所有字段,否则您可以继续插入该行。
您也可以尝试在 table 创建时使用 "NOT NULL" 命令来确保没有插入空值,但我认为我提到的第一个选项是必不可少的。
所以我终于想出了合法的解决方案。
我会像这样从 edittext 中获取值到数据库:
String name=username_EditText.getText().toString().trim();
long id = adapter.insert(name);
if(id<0){
Toast.makeText(getActivity(),"Unsuccessfull",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getActivity(),"YAY!!! Inserted a
SQlite row."+name,Toast.LENGTH_SHORT).show();
}
插入方法在我的 dbAdapter class 中,它从像这样写的编辑文本中插入值到数据库中。
public long insert(String name){
long id;
SQLiteDatabase db = dbhelper.getWritableDatabase();
ContentValues values = new ContentValues();
if(name.equals("")){
id=-1;
}
else{
values.put(dbHelper.NAME,name);
id = db.insert(dbHelper.TABLE_NAME,null,values);
db.close();
}
return id;
}
这对我来说效果很好。顺便谢谢大家 :)
这是我的 dbAdapter class,它处理数据库中的数据输入。
已在自定义 dialogfragment 中初始化此 class 对象。以及我正在插入一行的自定义对话框片段按钮的 onclick 事件。
如果我将 edittext 留空然后执行 onclick ,它会 INSERTS 一行。它不应该。
请帮忙。
public class dbAdapter{
dbHelper dbhelper;
dbAdapter(Context context){
dbhelper = new dbHelper(context);
}
public long insert(String name){
SQLiteDatabase db = dbhelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(dbHelper.NAME,name);
long id = db.insert(dbHelper.TABLE_NAME,null,values);
db.close();
return id;
}
public String getalldata(){
SQLiteDatabase db = dbhelper.getWritableDatabase();
String[] columns={dbhelper.UID,dbhelper.NAME};
Cursor cursor = db.query(dbhelper.TABLE_NAME,columns,null,null,null,null,null);
StringBuffer buffer=new StringBuffer();
while (cursor.moveToNext()){
int cid = cursor.getInt(0);
String id=cursor.getString(1);
buffer.append(cid+": "+id+"\n");
}
return buffer.toString();
}
static class dbHelper extends SQLiteOpenHelper{
private static final String DATABASE_NAME = "geekslabstudios.db";
private static final String TABLE_NAME="GEEKS";
private static int DATABASE_VERSION =1;
private static final String UID = "_id";
private static final String NAME = "Name";
private static final String CREATE_TABLE="CREATE TABLE "+TABLE_NAME+" ("+UID+" INTEGER PRIMARY KEY AUTOINCREMENT , "+NAME+" VARCHAR(255));";
private static final String DROP_TABLE="DROP TABLE IF EXISTS "+TABLE_NAME;
private Context context;
public dbHelper(Context context) {
super(context, DATABASE_NAME, null,DATABASE_VERSION);
this.context=context;
Toast.makeText(context,"dbAdapter Constructor Called",Toast.LENGTH_SHORT).show();
}
@Override
public void onCreate(SQLiteDatabase db) {
//CREATE TABLE GEEKS (_id INTEGER PRIMARYKEY AUTOINCREMENT , Name VARCHAR(255));
//CREATE TABLE TABLE_NAME (COLUMN_1_NAME INTEGER PRIMARYKEY AUTOINCREMENT , COLUMN_2_NAME DATA_TYPE);
try{
db.execSQL(CREATE_TABLE);
Toast.makeText(context,"On Create Called",Toast.LENGTH_SHORT).show();
}catch (SQLiteException e){
e.printStackTrace();
Toast.makeText(context,""+e,Toast.LENGTH_SHORT).show();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
Toast.makeText(context,"On Upgrade Called",Toast.LENGTH_SHORT).show();
db.execSQL(DROP_TABLE);
onCreate(db);
}
catch (SQLiteException e){
e.printStackTrace();
Toast.makeText(context,""+e,Toast.LENGTH_SHORT).show();
}
}
}
}
我错过了什么吗?请帮助。
检查点击按钮后EditText是否为空。 如果是,则告诉用户填写所有字段,否则您可以继续插入该行。
您也可以尝试在 table 创建时使用 "NOT NULL" 命令来确保没有插入空值,但我认为我提到的第一个选项是必不可少的。
所以我终于想出了合法的解决方案。
我会像这样从 edittext 中获取值到数据库:
String name=username_EditText.getText().toString().trim();
long id = adapter.insert(name);
if(id<0){
Toast.makeText(getActivity(),"Unsuccessfull",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getActivity(),"YAY!!! Inserted a
SQlite row."+name,Toast.LENGTH_SHORT).show();
}
插入方法在我的 dbAdapter class 中,它从像这样写的编辑文本中插入值到数据库中。
public long insert(String name){
long id;
SQLiteDatabase db = dbhelper.getWritableDatabase();
ContentValues values = new ContentValues();
if(name.equals("")){
id=-1;
}
else{
values.put(dbHelper.NAME,name);
id = db.insert(dbHelper.TABLE_NAME,null,values);
db.close();
}
return id;
}
这对我来说效果很好。顺便谢谢大家 :)