简体   繁体   English

无法打开 sqlite 数据库,指定的目录或数据库文件不存在

[英]Could not open sqlite database, specified directory or database file does not exist

I am trying to add information to my firebase using sqlite.我正在尝试使用 sqlite 向我的 firebase 添加信息。 I have added Order.db database file to my assets directory but am still getting getting this error.我已将 Order.db 数据库文件添加到我的资产目录,但仍然收到此错误。 I am a bit new to programming.我对编程有点陌生。

      #################################################################
Error Code : 1294 (SQLITE_CANTOPEN_ENOENT)
Caused By : Specified directory or database file does not exist.
    (unknown error (code 1294): Could not open database)
#################################################################
    com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getReadableDatabase(SQLiteAssetHelper.java:264)
    at com.urbanx.urbaninsure.Database.Database.addToCart(Database.java:64)
    at com.urbanx.urbaninsure.ProposalForm1.onClick(ProposalForm1.java:723)
    at android.view.View.performClick(View.java:5076)
    at android.view.View$PerformClick.run(View.java:20279)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5910)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

below is part of the Proposal class.以下是提案 class 的一部分。 I wasn't able to post all the code.我无法发布所有代码。 When i click on bSubmit button i get the error when trying to access the database.当我单击 bSubmit 按钮时,尝试访问数据库时出现错误。

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.bSubimt:
            fillProposalForm();

            new Database(getBaseContext()).addToCart(new Order(
                    currentProposer.getFirstNameProposer(),
                    currentProposer.getSurnameProposer(),
                    currentProposer.getLastNameProposer(),
                    currentProposer.getMobile(),
                    currentProposer.getIdNumber(),
                    currentProposer.getDuration(),
                    currentProposer.getVehicleReg(),
                    currentProposer.getTotalPremium()));

            startActivity(new Intent(ProposalForm1.this, Cart.class));



            break;


        case R.id.bOwnershipAttachCert:


            break;




        case R.id.cbWindscreen:

            if (cbWindscreen.isChecked()) {
                etLimitWindscreen.setVisibility(View.VISIBLE);
            }else {
                etLimitWindscreen.setVisibility(View.GONE);
            }
            break;


        case R.id.cbDvd:

            if (cbDvd.isChecked()) {
                etLimitDvd.setVisibility(View.VISIBLE);
            }else {
                etLimitDvd.setVisibility(View.GONE);
            }
            break;


        case R.id.cbRiot:

            if (cbRiot.isChecked()) {
                etLimitRiot.setVisibility(View.VISIBLE);
            }
            else {
                etLimitRiot.setVisibility(View.GONE);
            }
            break;

        case R.id.cbExcessProtect:

            if (cbExcessProtect.isChecked()) {
                etLimitExcessProtect.setVisibility(View.VISIBLE);
            }
            else {
                etLimitExcessProtect.setVisibility(View.GONE);
            }
            break;

        case R.id.cbTerrorism:

            if (cbTerrorism.isChecked()) {
                etLimitTerrorism.setVisibility(View.VISIBLE);
            }
            else {
                etLimitTerrorism.setVisibility(View.GONE);
            }
            break;

        case R.id.cbCourtesyCar:

            if (cbCourtesyCar.isChecked()){
                etCourtesyCar.setVisibility(View.VISIBLE);
            }
            else {
                etCourtesyCar.setVisibility(View.GONE);
            }
            break;



    }

}

private void fillProposalForm() {


    if (etFirstNameOfProposer.getText().toString().isEmpty()){
        etFirstNameOfProposer.setError("First name cannot be empty");
    } else if (etSurnameProposer.getText().toString().isEmpty()){
        etSurnameProposer.setError("Surname cannot be empty");
    } else if (etLastNameProposer.getText().toString().isEmpty()){
        etLastNameProposer.setError("Last name cannot be empty");
    } else if (etPassportNo.getText().toString().isEmpty()){
        etPassportNo.setError("ID/Passport number cannot be empty");
    } else if (etPinNo.getText().toString().isEmpty()){
        etPinNo.setError("KRA pin number cannot be empty");

    }else if (etMobile.getText().toString().isEmpty()){
        etMobile.setError("Mobile number cannot be empty");
    }else if (etEmail.getText().toString().isEmpty()){
        etEmail.setError("Email cannot be empty");


    } else if (etDrivingTime.getText().toString().isEmpty()){
        etDrivingTime.setError("Driving time duration cannot be empty");

    } else if (etDuration.getText().toString().isEmpty()) {
        etDuration.setError("Duraion of insurance cannot be empty");

    } else if (etVehicelReg.getText().toString().isEmpty()){
        etVehicelReg.setError("Vehicle registration cannot be empty");

    } else if (etEstimate.getText().toString().isEmpty()) {
        etEstimate.setError("The present estimated value of vehicle cannot be empty");


    } else if (!Patterns.EMAIL_ADDRESS.matcher(etEmail.getText().toString()).matches()){
        etEmail.setError("Invalid email address");
    }


     firstNameProposer = etFirstNameOfProposer.getText().toString();
     lastNameProposer = etLastNameProposer.getText().toString();
     surnameProposer = etSurnameProposer.getText().toString();
     idNumber = etPassportNo.getText().toString();
     pinNo = etPinNo.getText().toString();
     email = etEmail.getText().toString();
     mobile = etMobile.getText().toString();
     drivingTime = etDrivingTime.getText().toString();

     duration = etDuration.getText().toString();


     vehicleReg  = etVehicelReg.getText().toString();

    marketValue = etEstimate.getText().toString();
    if (marketValue == null || marketValue.isEmpty()){
        marketValue.equals("0.0");
    }


    spTypeOfCoverage.setAdapter(TypeOfCoverageAdapter);
    spTypeOfCoverage.setOnItemSelectedListener(new 
        AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, 
      long id) {
             typeOfCoverage = 
       spTypeOfCoverage.getItemAtPosition(position).toString();

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });


    spMake.setAdapter(MakeAdapter);
    spMake.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, 
       long id) {
            if (i == 0) {

                vehicleMake = spMake.getItemAtPosition(position).toString();


               //                    vehicleModelLayout.setVisibility(View.GONE);
               //                    otherMakeRow.setVisibility(View.GONE);
              //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 1) {
                spModel.setAdapter(subaruCarsAdapter);

                vehicleMake = spMake.getItemAtPosition(position).toString();

             //                    vehicleModelLayout.setVisibility(View.VISIBLE);
             //                    otherMakeRow.setVisibility(View.GONE);
            //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 2) {
                spModel.setAdapter(toyotaCarsAdapter);

                vehicleMake = spMake.getItemAtPosition(position).toString();

            //                    vehicleModelLayout.setVisibility(View.VISIBLE);
            //                    otherMakeRow.setVisibility(View.GONE);
            //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 3) {
                spModel.setAdapter(nissanCarsAdapter);

                vehicleMake = spMake.getItemAtPosition(position).toString();

             //                    vehicleModelLayout.setVisibility(View.VISIBLE);
             //                    otherMakeRow.setVisibility(View.GONE);
              //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 4) {
                spModel.setAdapter(mercedesBenzCarsAdapter);

                vehicleMake = spMake.getItemAtPosition(position).toString();

             //                    vehicleModelLayout.setVisibility(View.VISIBLE);
              //                    otherMakeRow.setVisibility(View.GONE);
             //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 5) {
                spModel.setAdapter(BMWCarsAdapter);

                vehicleMake = spMake.getItemAtPosition(position).toString();

             //                    vehicleModelLayout.setVisibility(View.VISIBLE);
             //                    otherMakeRow.setVisibility(View.GONE);
              //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 6) {
                spModel.setAdapter(audiCarsAdapter);
             //                    vehicleModelLayout.setVisibility(View.VISIBLE);
                vehicleMake = spMake.getItemAtPosition(position).toString();

            //                    otherMakeRow.setVisibility(View.GONE);
             //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 7) {
                spModel.setAdapter(landRoverCarsAdapter);
             //                    vehicleModelLayout.setVisibility(View.VISIBLE);
             //                    otherMakeRow.setVisibility(View.GONE);
                vehicleMake = spMake.getItemAtPosition(position).toString();

               //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 8) {
                spModel.setAdapter(hondaCarsAdapter);
             //                    vehicleModelLayout.setVisibility(View.VISIBLE);

                vehicleMake = spMake.getItemAtPosition(position).toString();

             //                    otherMakeRow.setVisibility(View.GONE);
               //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 9) {
                spModel.setAdapter(mazdaCarsAdapter);
              //                    vehicleModelLayout.setVisibility(View.VISIBLE);
             //                    otherMakeRow.setVisibility(View.GONE);
                vehicleMake = spMake.getItemAtPosition(position).toString();

            //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 10) {
                spModel.setAdapter(mitsubishiCarsAdapter);
              //                    vehicleModelLayout.setVisibility(View.VISIBLE);
             //                    otherMakeRow.setVisibility(View.GONE);
                vehicleMake = spMake.getItemAtPosition(position).toString();

            //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 11) {
                spModel.setAdapter(peugeotCarsAdapter);
            //                    vehicleModelLayout.setVisibility(View.VISIBLE);
            //                    otherMakeRow.setVisibility(View.GONE);
                vehicleMake = spMake.getItemAtPosition(position).toString();

             //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 12) {
                spModel.setAdapter(isuzuCarsAdapter);
            //                    vehicleModelLayout.setVisibility(View.VISIBLE);
            //                    otherMakeRow.setVisibility(View.GONE);
                vehicleMake = spMake.getItemAtPosition(position).toString();

            //                    otherModelRow.setVisibility(View.GONE);
            } else if (i == 13) {
                spModel.setAdapter(volkswagenCarsAdapter);
            //                    vehicleModelLayout.setVisibility(View.VISIBLE);
             //                    otherMakeRow.setVisibility(View.GONE);
                vehicleMake = spMake.getItemAtPosition(position).toString();

           //                    otherModelRow.setVisibility(View.GONE);
            } else {
           //                    vehicleModelLayout.setVisibility(View.GONE);
           //                    otherMakeRow.setVisibility(View.VISIBLE);
                vehicleMake = spMake.getItemAtPosition(position).toString();

          //                    otherModelRow.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
    spUseOfVehicle.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            useOfVehicle= (String) parent.getItemAtPosition(position);

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });



    spModel.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if (spModel.getSelectedItem().toString().contains("Other")) {
                 vehicleModel = spModel.getSelectedItem().toString();


        //                    otherModelRow.setVisibility(View.VISIBLE);
            } else {
        //                    otherModelRow.setVisibility(View.GONE);
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

    spinnerModelYear.setAdapter(yearAdapter);
    spinnerModelYear.setOnItemSelectedListener(new 
      AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, 
      long id) {
            yearOfManf = spinnerModelYear.getSelectedItem().toString();

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
     if (etLimitWindscreen.getText().toString().isEmpty()){
     }
    windscreenValue = etLimitWindscreen.getText().toString();


    if (etLimitDvd.getText().toString().isEmpty()){
    }

    dvd = etLimitDvd.getText().toString();

    if ( etLimitRiot.getText().toString().isEmpty()){
    }


    riot = etLimitRiot.getText().toString();


    if ( etLimitExcessProtect.getText().toString().isEmpty()){
    }
    excessProtector = etLimitExcessProtect.getText().toString();




    if (etLimitTerrorism.getText().toString().isEmpty()){
    }
    terrorism = etLimitTerrorism.getText().toString();


    if (etCourtesyCar.getText().toString().isEmpty()){
    }
    courtesyCar = etCourtesyCar.getText().toString();


    calculateInsurance();



    currentProposer = new ProposalDetails( firstNameProposer
            ,lastNameProposer,surnameProposer, idNumber, pinNo,
            email, mobile, drivingTime, duration, vehicleReg,
            marketValue, typeOfCoverage, useOfVehicle, vehicleMake, vehicleModel,
            yearOfManf, windscreenValue, dvd, riot,
            excessProtector, terrorism, courtesyCar, basicPremium, trainingLevy,
            policyHolders, stampDuty, totalPremium);
    String proposalId = mProposalInformation.push().getKey();
    currentProposer.setInsuranceNo(proposalId);











    mProposalInformation.child(FirebaseAuth.getInstance().getCurrentUser()
    .getUid()).child(proposalId).setValue(currentProposer);








    final AlertDialog waitingDialog = new SpotsDialog(ProposalForm1.this,"Loading",R.style.Custom);
    waitingDialog.show();



    startActivity(new Intent(ProposalForm1.this,Cart.class));

}


private void chooseImage() {

    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture:"), Common.PICK_IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == Common.PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK
            && data != null && data.getData() != null) {
        imagelogbookUri = data.getData();

        if (imagelogbookUri != null){
            final ProgressDialog mDialog = new ProgressDialog(this);
            mDialog.setMessage("Uploading...");
            mDialog.show();

            String imageName = UUID.randomUUID().toString(); //random name image upload
            final StorageReference imageFolder = storageReference.child("images/" + imageName);
            imageFolder.putFile(imagelogbookUri)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            mDialog.dismiss();

                            imageFolder.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                @Override
                                public void onSuccess(Uri uri) {

                                    //update this url to be avatar property of of User
                                    //First you need avatr property on user model

                                    Map<String, Object> avatarUpdate = new HashMap<>();
                                    avatarUpdate.put("LogBook",uri.toString());

                                    DatabaseReference driverInformation = FirebaseDatabase.getInstance().getReference(Common.customer_tbl);
                                    driverInformation.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                                            .updateChildren(avatarUpdate)
                                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                @Override
                                                public void onComplete(@NonNull Task<Void> task) {
                                                    if (task.isSuccessful())
                                                        Toast.makeText(ProposalForm1.this, "Uploaded!", Toast.LENGTH_SHORT).show();
                                                    else
                                                        Toast.makeText(ProposalForm1.this, "Upload error !", Toast.LENGTH_SHORT).show();

                                                }
                                            });
                                }
                            });

                        }
                    }).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                    double progress = (100.0* taskSnapshot.getBytesTransferred()/ taskSnapshot.getTotalByteCount());
                    mDialog.setMessage("Uploaded" + progress + "%");

                }
            });


        }

    }
}


    }

This is my Database class这是我的数据库 class

  public class Database extends SQLiteAssetHelper {

private static final String DB_NAME = "Order.db";
private static final int DB_VER = 1;

public Database(Context context) {
    super(context, DB_NAME, null, DB_VER);
}


public List<Order> getCarts()
{
    SQLiteDatabase db = getReadableDatabase();
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();

    String[] sqlselect = {  " firstNameProposer","surnameProposer","lastNameProposer","phone"
    ,"idNumber","duration","vehicleReg", "totalPremium"};
    String sqlTable = "OrderDetail";

    qb.setTables(sqlTable);

    Cursor c = qb.query(db,sqlselect,null,null,null,null,null,null,null);

    final List<Order> result = new ArrayList<>();
    if (c.moveToFirst())
    {
        do {
            result.add(new Order(
                    c.getString(c.getColumnIndex("firstNameProposer")),
                     c.getString(c.getColumnIndex("surnameProposer")),
                     c.getString(c.getColumnIndex("lastNameProposer")),
                     c.getString(c.getColumnIndex("phone")),
                     c.getString(c.getColumnIndex("idNumber")),
                    c.getString(c.getColumnIndex("duration")),
                    c.getString(c.getColumnIndex("vehicleReg")),
                    c.getString(c.getColumnIndex("totalPremium"))));
        }while (c.moveToNext());
    }return result;

}

public void cleanCart()
{
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("DELETE FROM OrderDetail");

    db.execSQL(query);
}
public void addToCart(Order order)
{
    SQLiteDatabase db = getReadableDatabase();
    String query = String.format("INSERT INTO OrderDetail (  firstNameProposer,surnameProposer,lastNameProposer,phone" +
                    "idNumber,duration,vehicleReg, totalPremium )VALUES('%s','%s','%s','%s','%s','%s','%s','%s');",
            order.getFirstNameProposer(),
            order.getSurnameProposer(),
            order.getLastNameProposer(),
            order.getMobile(),
            order.getIdNumber(),
            order.getDuration(),
            order.getVehicleReg(),
            order.getTotalPremium());

    db.execSQL(query);
}


   }

I have added Order.db database file to my assets directory but am still getting getting this error.我已将 Order.db 数据库文件添加到我的资产目录,但仍然收到此错误。 I am a bit new to programming.我对编程有点陌生。

You need to add the Order.db database file to the assets/ databases directory (after creating the directory), as per:-您需要将Order.db数据库文件添加到 assets/ databases目录(在创建目录之后),如下所示:-

SQLiteAssetHelper relies upon asset file and folder naming conventions . SQLiteAssetHelper依赖于资产文件和文件夹命名约定

Your assets folder will either be under your project root, or under src/main if you are using the default gradle project structure.如果您使用默认的 gradle 项目结构,您的 assets 文件夹将位于您的项目根目录下,或者位于 src/main 下。 At minimum, you must provide the following :至少,您必须提供以下内容

  • A databases folder inside assets资产内的数据库文件夹
  • A SQLite database inside the databases folder whose file name matches the database name you provide in code (including the file extension, if any)数据库文件夹内的 SQLite 数据库,其文件名与您在代码中提供的数据库名称匹配(包括文件扩展名,如果有)

Android SQLiteAssetHelper Android SQLiteAssetHelper

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM