【问题标题】:How to use a SQLite data base properly?如何正确使用 SQLite 数据库?
【发布时间】:2018-02-08 11:07:53
【问题描述】:

请向我推荐此代码的解决方案。这是行不通的。按下提交按钮后,应用程序返回。它不能存储数据

public class UserContract  {
//if you need multi tabless user inner classes to represent each table inn class

public  static abstract class NewUserinfo implements BaseColumns
{
    public static final String USER_NAME="user_name"; //right side represent column name
    public static final String USER_MOB="user_mob";
    public static final String USER_EMAIL="user_email";

    public static final String TABLE_NAME="user_info";

}

}


public class UserDbHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME="USERINFO.DB";
private static final int database_version=1;
private static final String create_query=
        "CREATE TABLE "+ UserContract.NewUserinfo.TABLE_NAME + " ("+ UserContract.NewUserinfo.USER_NAME+" TEXT, "+
        UserContract.NewUserinfo.USER_MOB+" TEXT,"+ UserContract.NewUserinfo.USER_EMAIL+" TEXT);";


public UserDbHelper(Context context)
{
    super(context,DATABASE_NAME,null,database_version);
    Log.e("database operation ","database created /opend");

}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(create_query);
        Log.e("database operation","table created");
}
public void addinformation(String name, String mob, String email, SQLiteDatabase db)
{
    ContentValues contentValues=new ContentValues();
    contentValues.put(UserContract.NewUserinfo.USER_NAME,name);
    contentValues.put(UserContract.NewUserinfo.USER_MOB,mob);
    contentValues.put(UserContract.NewUserinfo.USER_EMAIL,email);
    db.insert(UserContract.NewUserinfo.TABLE_NAME,null,contentValues);
    Log.e("database operation","one row insert");
}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

}
}

public class NewContactActivity extends AppCompatActivity {
UserDbHelper userDbHelper;
SQLiteDatabase sqLiteDatabase;
EditText editText,editText1,editText2;
Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_new_contact);
    editText=findViewById(R.id.contect_name);
    editText1=findViewById(R.id.mob_number);
    editText2=findViewById(R.id.email);
}

public void addcontact(View view)
{
    String name= editText.getText().toString();
    String number=editText1.getText().toString();
    String email=editText2.getText().toString();
    userDbHelper=new UserDbHelper(context);
    sqLiteDatabase=userDbHelper.getWritableDatabase();
    userDbHelper.addinformation(name,number,email,sqLiteDatabase);
    Toast.makeText(getBaseContext(), "data saved", Toast.LENGTH_SHORT).show();


}
}

【问题讨论】:

  • 你有什么stackerror要给我们看吗?
  • 控制台是否显示任何错误如果显示请添加它
  • 显示错误消息后重定向到主要活动
  • 显示你的 logcat
  • 这在 logcat 中出现红线

标签: java android database sqlite android-sqlite


【解决方案1】:

您需要一个变量中的主键。这么说吧。

String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + TITLE + " TEXT," + PRINT_NAME + " TEXT," + MRP + " TEXT," + QTY + " TEXT, " + IMAGE + " BLOB, " + WEIGHT + " TEXT " + ")";
    db.execSQL(CREATE_TABLE);
}

整个代码应该看起来像......

public class SQLiteHandler extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "Club100database";
private static final String TABLE_NAME = "myclub100cart";
private static final String KEY_ID = "cart_id";
private static final String TITLE = "title";
private static final String PRINT_NAME = "print_name";
private static final String MRP = "mrp";
private static final String QTY = "qty";
private static final String IMAGE = "image";
private static final String WEIGHT = "weight";


public SQLiteHandler(Context context) {

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


@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + TITLE + " TEXT," + PRINT_NAME + " TEXT," + MRP + " TEXT," + QTY + " TEXT, " + IMAGE + " BLOB, " + WEIGHT + " TEXT " + ")";
    db.execSQL(CREATE_TABLE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
    db.execSQL(" DROP TABLE " + TABLE_NAME);
    onCreate(db);
}
}

【讨论】:

  • 先看评论再回答
  • 它是在“回答”标题...但是您是否阅读了这个问题? PS:哪里说需要在表中进行PK?
【解决方案2】:

正如你提到的错误:

02-08 16:22:06.453 1994-1994/com.example.abbas.sqlitedatabase E/dalvikvm: 找不到类 'android.graphics.drawable.RippleDrawable',引用自方法 android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering

不是 DataBase 的问题,是 Drawable Resource 的问题

看看这个

Could not find RippleDrawable

Could not find class 'android.graphics.drawable.RippleDrawable', Could not execute method for android:onClick, Android Studio

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多