Android无法向sqlite添加数据

时间:2017-04-07 19:11:01

标签: java android sqlite

我知道有很多关于此错误的主题,但我尝试了很多解决方案,但仍然遇到了这个错误。这是我第一次玩SQLite,而且我不明白那里发生了什么错误。我无法添加第二个Activity的数据,但是有效的活动。

我的班级

public static final String KEY_ID = "_ID";
public static final String COL_CODE_TREE = "code_tree";
public static final String COL_STATUS_HIGH = "updateStatus";

public static final String TABLE_NAME_Product = "Product";
public static final String COL_PRODUCT_ALL = "product_all";
public static final String COL_PRODUCT_BEST = "product_best";
public static final String COL_DATE_PRODUCT = "date_product";



public DatabaseCoconut(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
}

public void onCreate(SQLiteDatabase db) {

    String query,queryProduct;
    query = "CREATE TABLE High ( _Id INTEGER PRIMARY KEY, code_tree VARCHAR, high_tree INTEGER, date_high DATE, updateStatus TEXT)";
    queryProduct = "CREATE TABLE Product ( _Id INTEGER PRIMARY KEY, code_tree VARCHAR, product_all INTEGER, product_best INTEGER , date_product DATE, updateStatus TEXT)";
    db.execSQL(query);
    db.execSQL(queryProduct);

}

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   // db.execSQL("DROP TABLE IF EXISTS "+ TABLE_NAME_HIGH);
    String query,queryProduct;
    query = "DROP TABLE IF EXISTS High";
    queryProduct = "DROP TABLE IF EXISTS Product";
    db.execSQL(query);
    db.execSQL(queryProduct);
    onCreate(db);
}

secondActivity

public class ProductActivity extends AppCompatActivity{

public static final String BARCODE_KEY = "BARCODE";
private Barcode barcodeResult;
private EditText result;

ListView listproductshow;
DatabaseCoconut mHelper;
SQLiteDatabase mDb2;
Cursor mCursor2;
DatabaseCoconut controller = new DatabaseCoconut(this);
ProgressDialog prgDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_product);
    Log.d("ProductActivity", "onCreate");

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    result = (EditText) findViewById(R.id.editCodeProduct);
    final EditText editall = (EditText)findViewById(R.id.editproductall);
    final EditText editbest = (EditText)findViewById(R.id.editproductbest);

    mHelper = new DatabaseCoconut(this);
    mDb2 = mHelper.getWritableDatabase();

    //Toast.makeText(getApplicationContext(), mHelper.getSyncStatus(), Toast.LENGTH_LONG).show();

    Button buttonAdd = (Button)findViewById(R.id.buttonAddproduct);
    buttonAdd.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            String codeproduct = result.getText().toString();
            String all = editall.getText().toString();
            String best = editbest.getText().toString();
            String no = "no";

            if(codeproduct.trim().length() != 0 && all.trim().length() != 0 && best.trim().length() != 0 ) {

                Cursor mCursor = mDb2.rawQuery("SELECT * FROM " + DatabaseCoconut.TABLE_NAME_Product
                        + " WHERE " + DatabaseCoconut.COL_CODE_TREE + "='" + codeproduct + "'"
                        + " AND " + DatabaseCoconut.COL_PRODUCT_ALL + "='" + all + "'"
                        + " AND " + DatabaseCoconut.COL_PRODUCT_BEST + "='" + best + "'"
                        + " AND " + DatabaseCoconut.COL_STATUS_HIGH + "='" + no + "'"
                        + " AND " + DatabaseCoconut.COL_DATE_PRODUCT + "='" + getDateTime() + "'", null);

                if(mCursor.getCount() == 0) {
                    mDb2.execSQL("INSERT INTO "+ DatabaseCoconut.TABLE_NAME_Product
                            +" (" + DatabaseCoconut.COL_CODE_TREE
                            + ", " + DatabaseCoconut.COL_PRODUCT_ALL
                            + ", " + DatabaseCoconut.COL_PRODUCT_BEST
                            + ", " + DatabaseCoconut.COL_STATUS_HIGH
                            + ", " + DatabaseCoconut.COL_DATE_PRODUCT + ") VALUES ('"
                            + codeproduct + "', '" + all + "', '" + best + "', '" + no + "', '" + getDateTime() + "');");

                    result.setText("");
                    editall.setText("");
                    editbest.setText("");

                    Toast.makeText(getApplicationContext()
                            ,"เพิ่มข้อมูลเรียบร้อยแล้ว", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext()
                            ,"คุณมีข้อมูลนี้อยู่แล้ว", Toast.LENGTH_SHORT).show();
                }

            } else {
                Toast.makeText(getApplicationContext()
                        ,"กรุณากรอกข้อมูลให้ครบทุกช่อง", Toast.LENGTH_SHORT).show();
            }

            mCursor2 = mDb2.rawQuery("SELECT * FROM "
                    + DatabaseCoconut.TABLE_NAME_Product, null);

            //listproductshow = (ListView)findViewById(R.id.listhigh);
            //listproductshow.setAdapter(updateListView());

        }
    });
      private String getDateTime() {
    SimpleDateFormat dateFormat = new SimpleDateFormat(
            "yyyy-MM-dd ", Locale.getDefault());
    Date date = new Date();
    return dateFormat.format(date);
}

我的Logcat

ATAL EXCEPTION: main
                                                                       Process: com.nectec.ProjectCoconut, PID: 27718
                                                                       android.database.sqlite.SQLiteException: no such table: Product (Sqlite code 1): , while compiling: SELECT * FROM Product WHERE code_tree='hi' AND product_all='99' AND product_best='56' AND updateStatus='no' AND date_product='2017-04-08 ', (OS error - 2:No such file or directory)
                                                                           at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                           at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:897)
                                                                           at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:508)
                                                                           at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                           at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:63)
                                                                           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:1344)
                                                                           at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1278)
                                                                           at com.nectec.ProjectCoconut.ProductActivity$1.onClick(ProductActivity.java:90)
                                                                           at android.view.View.performClick(View.java:5264)
                                                                           at android.view.View$PerformClick.run(View.java:21297)
                                                                           at android.os.Handler.handleCallback(Handler.java:743)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                           at android.os.Looper.loop(Looper.java:150)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:5546)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

1 个答案:

答案 0 :(得分:0)

您可能是第一次执行代码而无需在 onCreate(SQLiteDatabase db)方法中创建“Product”表。当您在第二次运行具有相同数据库版本号的代码时,它不会更新它并告诉您该表不存在。只需手动卸载应用程序或删除数据即可使用相同版本 DB_VERSION 强制重建数据库。