SQLite编辑器中没有数据

时间:2015-12-14 06:58:58

标签: java android sqlite

我在SQLite数据库中插入数据时遇到问题。当我点击按钮保存时,我没有在SQLite编辑器中看到数据。 这段代码出了什么问题?

1)AddMedicine.java

private void AddData() {
    btn3.setOnClickListener(
        new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                HashMap queryValues = new HashMap();
                queryValues.put("medicine", medicine.getText().toString());
                queryValues.put("quantity", quantity.getText().toString());
                queryValues.put("date", date.getText().toString());
                queryValues.put("time", time.getText().toString());
                boolean isInserted = myDb.insertData(queryValues);

                if (isInserted = true) {
                    Toast.makeText(AddMedicine.this, "Data inserted", Toast.LENGTH_LONG).show();
                    Intent i = new Intent(AddMedicine.this, MainActivity.class);
                    startActivity(i);
                    //   this.callHomeActivity(view);

                } else
                    Toast.makeText(AddMedicine.this, "Data not inserted", Toast.LENGTH_LONG).show();
            }
        }
    );
}

2)DatabaseHelper.java

public boolean insertData(String Name, String quantity, String Date, String Time) {

    db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_2, Name);
    contentValues.put(COL_3, quantity);
    contentValues.put(COL_4, Date);
    contentValues.put(COL_5, Time);
    long result = db.insert(TABLE_NAME, null, contentValues);

    if (result == -1) {
        return false;
    } else {
        return true;
    }
}

4 个答案:

答案 0 :(得分:1)

方法insertData需要4个参数才能完成工作,但是将HashMap作为唯一参数传递给此方法。可能是你的问题?

希望它有所帮助。

<强> UPD

您有几种可能性来改变这种情况。 第一次使用的代码,由 GreenRobo 建议,或者您可以重写方法insertData以适合您的HashMap参数。例如:

public boolean insertData(Map<String> map) { 
    db = this.getWritableDatabase();     
    ContentValues contentValues = new ContentValues();
     contentValues.put(COL_2, map.get("name"));
     contentValues.put(COL_3, map.get("quantity"));
     contentValues.put(COL_4, map.get("date"));
     contentValues.put(COL_5, map.get("time")); 
     long result = db.insert(TABLE_NAME, null, contentValues); 
    return (result != - 1);
}

答案 1 :(得分:0)

您可以使用此方法

myDb.insertData(medicine.getText().toString(), quantity.getText().toString(), date.getText().toString(), time.getText().toString());

。 根据你的方法实现

答案 2 :(得分:0)

首先,您必须为数据库创建一个模型类,以便从中保存和检索数据。

new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String e1 = medicine.getText().toString();
            String e2 = quantity.getText().toString();
            String e3 = date.getText().toString();
            String e4 = time.getText().toString();

            User user = new User();
            user.setMedicine(e1);
            user.setQuantity(e2);
            user.setDate(e3);
            user.setTime(e4);



            Databasehandler db = new Databasehandler(getActivity());
            db.insert(user);

        }
    });

}  你的Adddata方法就像:

btn3.setOnClickListener(

boolean insertData(User user){
    SQLiteDatabase db=getWritableDatabase();
    ContentValues cv=new ContentValues();
    cv.put(COL_2,user.getMedicine());
    cv.put(COL_3,user.getQuantity());
    cv.put(COL_4, user.getDate());
    cv.put(COL_5, user.getTime());
    /// from here you can check the data you getting
    System.out.println("Medicine-------------" + user.getMedicine());
    System.out.println("Quan-------------" + user.getMedicine());
    System.out.println("Date-------------" + user.getDate());
    System.out.println("Time-------------"+user.getTime());
    long result = db.insert(TABLE_NAME, null, cv);

    if (result == -1) {
        return false;
    } else {
        return true;
    }

}

使用以下命令在Databasehandler中重复执行insertdata方法:

for()

答案 3 :(得分:0)

对于您使用的方法......: 这些是你必须做的改变:

new View.OnClickListener()    {
    @Override
    public void onClick (View view){
    String e1 = medicine.getText().toString();
    String e2 = quantity.getText().toString();
    String e3 = date.getText().toString();
    String e4 = time.getText().toString();
    HashMap queryValues = new HashMap();

    queryValues.put("medicine", e1);
    queryValues.put("quantity", e2);
    queryValues.put("date", e3);
    queryValues.put("time", e4);
    boolean isInserted = myDb.insertData(queryValues);

    if (isInserted == true)  {
        Toast.makeText(AddMedicine.this, "Data inserted", Toast.LENGTH_LONG).show();
        Intent i = new Intent(AddMedicine.this, MainActivity.class);
        startActivity(i);
        //   this.callHomeActivity(view);

    } else
        Toast.makeText(AddMedicine.this, "Data not inserted", Toast.LENGTH_LONG).show();
}
}

public boolean insertData(HashMap h) {

    db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_2, h.get("medicine"));
    contentValues.put(COL_3, h.get("quantity"));
    contentValues.put(COL_4, h.get("date"));
    contentValues.put(COL_5, h.get("time"));
    long result = db.insert(TABLE_NAME, null, contentValues);

    if (result == -1) {
        return false;
    } else {
        return true;
    }
}

到目前为止,从hashmap获取数据的方法是错误的。 还有一个apporch可以直接传递方法中的e1,e2,e3,e4,并且你的insertData将保持不变。