单击注册按钮时,无法在设备上运行应用

时间:2018-04-12 04:18:34

标签: android sqlite listview android-studio insert

我已经构建了一个可以在listview中插入和检索数据的应用程序。我使用了放在assets文件夹中的数据库。当我通过usb调试在设备(xiaomi redmi note4)上运行我的应用程序但是当我点击注册按钮时我无法注册用户。如果我删除了" /data/data/com.example.ibtb.bmkg/databases /"中的数据库文件,这也会发生在模拟器上。像这样的logcat

    04-12 12:09:27.789 16299-16299/? E/SQLiteLog: (1) no such table: tb_user
04-12 12:09:27.794 16299-16299/? E/SQLiteDatabase: Error inserting email=t password=t nip=t username=t nama=t



                                                   android.database.sqlite.SQLiteException: no such table: tb_user (code 1): , while compiling: INSERT INTO tb_user(email,password,nip,username,nama) VALUES (?,?,?,?,?)
                                                       at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                       at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
                                                       at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
                                                       at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                       at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                                                       at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
                                                       at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1470)
                                                       at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343)
                                                       at com.example.ibtb.bmkg.database.DatabaseHelper.insertUser(DatabaseHelper.java:73)
                                                       at com.example.ibtb.bmkg.SignUp$1.onClick(SignUp.java:68)
                                                       at android.view.View.performClick(View.java:5619)
                                                       at android.view.View$PerformClick.run(View.java:22295)
                                                       at android.os.Handler.handleCallback(Handler.java:754)
                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                       at android.os.Looper.loop(Looper.java:163)
                                                       at android.app.ActivityThread.main(ActivityThread.java:6342)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)
  

这是我的数据库代码

   package com.example.ibtb.bmkg.database;

import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.example.ibtb.bmkg.model.Instrumen;
import com.example.ibtb.bmkg.model.User;
import com.example.ibtb.bmkg.model.Pengecekan;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by IBTB on 08/02/2018.
 */

public class DatabaseHelper extends SQLiteOpenHelper {

    public static String DB_PATH = "/data/data/com.example.ibtb.bmkg/databases/";
    public static String DB_NAME = "bmkgdb.db";
    SQLiteDatabase myDataBase;
    private final Context myContext;


    public DatabaseHelper(Context context) {
        super(context, DB_NAME, null, 1);
        this.myContext = context;

    }

    @Override
    public void onCreate(SQLiteDatabase db) {

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    public void openDataBase()  {
        String dbPath = myContext.getDatabasePath(DB_NAME).getPath();
        if (myDataBase != null && myDataBase.isOpen()) {
            return;
        }
        myDataBase = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE);
    }

    public void closeDatabase() {
        if (myDataBase != null) {
            myDataBase.close();
        }
    }

    public long insertUser(User c){
        myDataBase = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        /*String query = "select * from tb_user";
        Cursor cursor = myDataBase.rawQuery(query,null);
        int count = cursor.getCount();
        values.put("id_user", count); */

        values.put("nama", c.getName());
        values.put("nip", c.getNip());
        values.put("email", c.getEmail());
        values.put("username", c.getUname());
        values.put("password", c.getPass());
        openDataBase();
        long returnValue = myDataBase.insert("tb_user", null, values);
        closeDatabase();
        return returnValue;}

    public String searchPass(String uname) {

        myDataBase = this.getReadableDatabase();
        String query = "select username, password from tb_user";
        Cursor cursor = myDataBase.rawQuery(query, null);
        String a, b;
        b = "not found";
        if (cursor.moveToFirst()) {
            do {
                a = cursor.getString(0);
                //b= cursor.getString(1);

                if (a.equals(uname)) {
                    b = cursor.getString(1);
                    break;
                }

            }
            while (cursor.moveToNext());
        }

        return b;
    }


    public List<Pengecekan> getListPengecekan() {

       // String[] whereargs = new String[]{String.valueOf(id)};

        Pengecekan pengecekan = null;
        List<Pengecekan> PengecekanList = new ArrayList<>();
        openDataBase();
        Cursor cursor = myDataBase.rawQuery("SELECT A.id_pengecekan, A.pengecekan, A.normal, B.nama_alat FROM  tb_pengecekan A, tb_alat B, tb_instrumen C  " +
                "WHERE C.id_instrumen = B.id_instrumen AND A.id_alat = B.id_alat AND C.id_instrumen = '9' ",  null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            pengecekan = new Pengecekan(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3));
           PengecekanList.add(pengecekan);

       /* if (cursor.moveToFirst()) {
            pengecekan = new Pengecekan(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3));
            PengecekanList.add(pengecekan);*/

            cursor.moveToNext();}

        cursor.close();
        close();
        return PengecekanList;
    }


    public Pengecekan getPengecekanId(int id) {
        Pengecekan pengecekan = null;
        openDataBase();
        Cursor cursor = myDataBase.rawQuery("SELECT A.id_pengecekan, A.pengecekan, A.normal, B.nama_alat FROM  tb_pengecekan A, tb_alat B, tb_instrumen C  " +
                "WHERE A.id_pengecekan = ?", new String[]{String.valueOf(id)});
        cursor.moveToFirst();
        pengecekan = new Pengecekan(cursor.getInt(0), cursor.getString(1), cursor.getString(2), cursor.getString(3));
        //Only 1 resul
        cursor.close();
        closeDatabase();
        return pengecekan;
    }

    public long updatePengecekan(Pengecekan pengecekan) {
        ContentValues contentValues = new ContentValues();
        contentValues.put("pengecekan", pengecekan.getPengecekan());
        contentValues.put("normal", pengecekan.getNormal());
        contentValues.put("nama_alat", pengecekan.getNama_alat());
        String[] whereArgs = {Integer.toString(pengecekan.getId_pengecekan())};
        openDataBase();
        long returnValue = myDataBase.update("tb_pengecekan",contentValues, "id_pengecekan=?", whereArgs);
        closeDatabase();
        return returnValue;
    }

    public long addPengecekan(Pengecekan pengecekan) {
        ContentValues contentValues = new ContentValues();
        contentValues.put("ID", pengecekan.getId_pengecekan());
        contentValues.put("pengecekan", pengecekan.getPengecekan());
        contentValues.put("normal", pengecekan.getNormal());
        contentValues.put("nama_alat", pengecekan.getNama_alat());
        openDataBase();
        long returnValue = myDataBase.insert("tb_pengecekan", null, contentValues);
        closeDatabase();
        return returnValue;
    }

    public boolean deletePengecekanById(int id) {
        openDataBase();
        int result = myDataBase.delete("tb_pengecekan",  "id_pengecekan =?", new String[]{String.valueOf(id)});
        closeDatabase();
        return result !=0;
    }

    public List<Instrumen> getListInstrumen() {
        Instrumen instrumen = null;
        List<Instrumen> InstrumenList = new ArrayList<>();
        openDataBase();
        Cursor cursor = myDataBase.rawQuery("SELECT * FROM  tb_instrumen  ", null);
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) {
            instrumen = new Instrumen(cursor.getInt(0), cursor.getString(1));
            InstrumenList.add(instrumen);
            cursor.moveToNext();
        }
        cursor.close();
        close();
        return InstrumenList;
    }

    public Instrumen geInstrumenId(int id) {
        Instrumen instrumen = null;
        openDataBase();
        Cursor cursor = myDataBase.rawQuery("SELECT * FROM tb_instrumen WHERE id_instrumen = ?", new String[]{String.valueOf(id)});
        cursor.moveToFirst();
        instrumen = new Instrumen(cursor.getInt(0), cursor.getString(1));
        //Only 1 resul
        cursor.close();
        closeDatabase();
        return instrumen;
    }



}
  

复制数据库

File database = getApplicationContext().getDatabasePath(DatabaseHelper.DB_NAME);
    if(false == database.exists()) {
        myDbHelper.getReadableDatabase();
        //Copy db
        if(copyDatabase(this)) {
            Toast.makeText(this, "Copy database succes", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "Copy data error", Toast.LENGTH_SHORT).show();
            return;
        }
    }
  

SignUp.Java

    package com.example.ibtb.bmkg;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.example.ibtb.bmkg.database.DatabaseHelper;
import com.example.ibtb.bmkg.model.User;

/**
 * Created by IBTB on 08/02/2018.
 */

public class SignUp extends Activity {
    private Button reg;
    private DatabaseHelper dbHelper;
    private EditText name, nip, email, uname, pass1, pass2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.signup);
        dbHelper = new DatabaseHelper(getApplicationContext());

        reg = (Button)findViewById(R.id.Bsignupbutton);
        reg.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                name = (EditText) findViewById(R.id.Tfname);
                nip = (EditText) findViewById(R.id.Tfnip);
                email = (EditText) findViewById(R.id.Tfemail);
                uname = (EditText) findViewById(R.id.Tfuname);
                pass1 = (EditText) findViewById(R.id.Tfpass1);
                pass2 = (EditText) findViewById(R.id.Tfpass2);
                String namestr = name.getText().toString();
                String nipstr = nip.getText().toString();
                String emailstr = email.getText().toString();
                String unamestr = uname.getText().toString();
                String pass1str = pass1.getText().toString();
                String pass2str = pass2.getText().toString();


                User c = new User(namestr, nipstr, emailstr, unamestr, pass1str);

                if (namestr.isEmpty() || nipstr.isEmpty() || emailstr.isEmpty() || unamestr.isEmpty() || pass1str.isEmpty() || pass2str.isEmpty()) {
                    Toast full = Toast.makeText(SignUp.this, "Please fill all the coloumn", Toast.LENGTH_SHORT);
                    full.show();


                } else if (!pass1str.equals(pass2str)) {
                    Toast pass = Toast.makeText(SignUp.this, "Password dont match", Toast.LENGTH_SHORT);
                    pass.show();
                } else {

                /*c.setName(namestr);
                c.setNip(nipstr);
                c.setEmail(emailstr);
                c.setUname(unamestr);
                c.setPass(pass1str);*/

                    long result = dbHelper.insertUser(c);

                    Intent j = new Intent(SignUp.this, MainActivity.class);
                    startActivity(j);

                    if (result > 0) {
                        Toast.makeText(getApplicationContext(), "Added", Toast.LENGTH_SHORT).show();
                        //back to main activity
                        finish();
                    } else {
                        Toast.makeText(getApplicationContext(), "Add failed", Toast.LENGTH_SHORT).show();
                    }

                }
            }
            });
            }
        }
  

MainActivity.Java

    package com.example.ibtb.bmkg;

import android.content.Intent;
import android.app.Activity;
//import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.ibtb.bmkg.database.DatabaseHelper;

public class MainActivity extends Activity {

    private Session session;
    //private Button button;
    DatabaseHelper myDbHelper = new DatabaseHelper(this);
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        session = new Session(this);
       // button = (Button)findViewById(R.id.button);
        if(session.loggedin()){
            startActivity(new Intent(MainActivity.this,Home.class));
          finish();
        }
    }

    public void onButtonClick(View v)
    {
        if(v.getId()==R.id.Blogin)
        {
            EditText a = (EditText)findViewById(R.id.Tfusername);
            String str = a.getText().toString();

            EditText b = (EditText)findViewById(R.id.Tfpassword);
            String pass = b.getText().toString();



           String password = myDbHelper.searchPass(str);
            if (pass.isEmpty() || str.isEmpty()) {
                Toast full = Toast.makeText(MainActivity.this, "Please enter username and password", Toast.LENGTH_SHORT);
                full.show();
            }
            else if(pass.equals(password))
            {
                session.setLoggedin(true);
                Intent i = new Intent (MainActivity.this, Home.class);
                i.putExtra("Username",str);
                startActivity(i);
                finish();

            }

            else
           {
                Toast temp = Toast.makeText(MainActivity.this, "Username and Password dont match", Toast.LENGTH_SHORT);
                temp.show();
            }


        }

        if (v.getId()==R.id.Bsignup)
        {
            Intent i = new Intent (MainActivity.this, SignUp.class);
            startActivity(i);
        }
    }
/*
    public void press (View v){
        Intent i = new Intent (MainActivity.this, ListPengecekan2.class);
        startActivity(i);
    }*/

}
  

Session.java

    package com.example.ibtb.bmkg;


import android.content.Context;
import android.content.SharedPreferences;

/**
 * Created by IBTB on 06/04/2018.
 */

public class Session {

    SharedPreferences prefs;
    SharedPreferences.Editor editor;
    Context ctx;

    public Session(Context ctx){
        this.ctx = ctx;
        prefs = ctx.getSharedPreferences("myapp", Context.MODE_PRIVATE);
        editor = prefs.edit();
    }

    public void setLoggedin(boolean logggedin){
        editor.putBoolean("loggedInmode",logggedin);
        editor.commit();
    }

    public boolean loggedin(){
        return prefs.getBoolean("loggedInmode", false);
    }
}
  

ListPengecekan.java

    package com.example.ibtb.bmkg;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.example.ibtb.bmkg.adapter.ListPengecekanAdapter;
import com.example.ibtb.bmkg.database.DatabaseHelper;
import com.example.ibtb.bmkg.model.Pengecekan;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

public class ListPengecekan extends AppCompatActivity {
    private ListView lvPengecekan;
    private TextView instrumen;

    private ListPengecekanAdapter adapter;

    private List<Pengecekan> mPengecekanList;
    private Button btnAdd;
    private DatabaseHelper myDbHelper;

    //Cursor c = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pengecekan);
        lvPengecekan = (ListView) findViewById(R.id.listview_pengecekan);

        btnAdd = (Button)findViewById(R.id.Badd);
        myDbHelper = new DatabaseHelper(this);

        String instrumen = getIntent().getStringExtra("ins");
        TextView tv = (TextView) findViewById(R.id.tv_instrumen);
        tv.setText(instrumen);

        File database = getApplicationContext().getDatabasePath(DatabaseHelper.DB_NAME);
        if(false == database.exists()) {
            myDbHelper.getReadableDatabase();
            //Copy db
            if(copyDatabase(this)) {
                Toast.makeText(this, "Copy database succes", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Copy data error", Toast.LENGTH_SHORT).show();
                return;
            }
        }
        //String id = getIntent().getStringExtra("id");
        mPengecekanList = myDbHelper.getListPengecekan();
        adapter = new ListPengecekanAdapter (this, mPengecekanList);
        lvPengecekan.setAdapter(adapter);


            }


    @Override
    protected void onResume() {
        super.onResume();
        mPengecekanList = myDbHelper.getListPengecekan();
        //Init adapter
        adapter.updateList(mPengecekanList);
    }

    private boolean copyDatabase(Context context) {
        try {
            InputStream inputStream = context.getAssets().open(DatabaseHelper.DB_NAME);
            String outFileName = DatabaseHelper.DB_PATH + DatabaseHelper.DB_NAME;
            OutputStream outputStream = new FileOutputStream(outFileName);
            byte[] buff = new byte[1024];
            int length = 0;
            while ((length = inputStream.read(buff)) > 0) {
                outputStream.write(buff, 0, length);
            }
            outputStream.flush();
            outputStream.close();
            Log.v("ListPengecekan", "DB copied");
            return true;

        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        // });

         }



    public void onRadioButtonClicked(View view) {

        String kondisi="";
        boolean checked = ((RadioButton) view).isChecked();


        switch(view.getId()) {
            case R.id.B:
                if (checked)
                    kondisi = "Baik";

                break;
            case R.id.RR:
                if (checked)
                    kondisi = "Rusak ringan";
                AlertDialog.Builder mBuilder = new AlertDialog.Builder(ListPengecekan.this);
                View mView = getLayoutInflater().inflate(R.layout.dialogrusak, null);
                mBuilder.setTitle("Keterangan kerusakan");
                final Spinner mSpinner = (Spinner) mView.findViewById(R.id.Spenanganan);
                final Spinner mSpinner1 = (Spinner) mView.findViewById(R.id.Shasil);
                final EditText kronologi = (EditText) mView.findViewById(R.id.ekro);
                final EditText lapor = (EditText) mView.findViewById(R.id.elapor);

                ArrayAdapter<String> adapter = new ArrayAdapter<String>(ListPengecekan.this, android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.penaganan));
                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                mSpinner.setAdapter(adapter);

                ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(ListPengecekan.this, android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.hasil));
                adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                mSpinner1.setAdapter(adapter1);

                mBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        String Kronologi = kronologi.getText().toString();
                        Toast.makeText(ListPengecekan.this, Kronologi, Toast.LENGTH_SHORT).show();

                        if (!mSpinner.getSelectedItem().toString().equalsIgnoreCase("Pilih penanganan…")) {
                            Toast.makeText(ListPengecekan.this, mSpinner.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
                            dialogInterface.dismiss();
                        }

                        if (!mSpinner.getSelectedItem().toString().equalsIgnoreCase("Pilih hasil…")) {
                            Toast.makeText(ListPengecekan.this, mSpinner1.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
                            dialogInterface.dismiss();
                        }

                        String Lapor = lapor.getText().toString();
                        Toast.makeText(ListPengecekan.this, Lapor, Toast.LENGTH_SHORT).show();
                    }
                });

                mBuilder.setNegativeButton("Batal", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();

                    }
                });

                mBuilder.setView(mView);
                AlertDialog dialog = mBuilder.create();
                dialog.show();




                    break;
            case R.id.RB:
                if (checked)
                    kondisi = "Rusak berat";

                AlertDialog.Builder mBuilder1 = new AlertDialog.Builder(ListPengecekan.this);
                View mView1 = getLayoutInflater().inflate(R.layout.dialogrusak, null);
                mBuilder1.setTitle("Keterangan kerusakan");
                final Spinner mSpinner2 = (Spinner) mView1.findViewById(R.id.Spenanganan);
                final Spinner mSpinner3 = (Spinner) mView1.findViewById(R.id.Shasil);
                final EditText kronologi1 = (EditText) mView1.findViewById(R.id.ekro);
                final EditText lapor1 = (EditText) mView1.findViewById(R.id.elapor);

                ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(ListPengecekan.this, android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.penaganan));
                adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                mSpinner2.setAdapter(adapter2);

                ArrayAdapter<String> adapter3 = new ArrayAdapter<String>(ListPengecekan.this, android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.hasil));
                adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                mSpinner3.setAdapter(adapter3);

                mBuilder1.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        String Kronologi = kronologi1.getText().toString();
                        Toast.makeText(ListPengecekan.this, Kronologi, Toast.LENGTH_SHORT).show();

                        if (!mSpinner2.getSelectedItem().toString().equalsIgnoreCase("Pilih penanganan…")) {
                            Toast.makeText(ListPengecekan.this, mSpinner2.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
                            dialogInterface.dismiss();
                        }

                        if (!mSpinner3.getSelectedItem().toString().equalsIgnoreCase("Pilih hasil…")) {
                            Toast.makeText(ListPengecekan.this, mSpinner3.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
                            dialogInterface.dismiss();
                        }

                        String Lapor = lapor1.getText().toString();
                        Toast.makeText(ListPengecekan.this, Lapor, Toast.LENGTH_SHORT).show();
                    }
                });

                mBuilder1.setNegativeButton("Batal", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.dismiss();

                    }
                });

                mBuilder1.setView(mView1);
                AlertDialog dialog1 = mBuilder1.create();
                dialog1.show();

                break;
        }

        //myDbHelper.execSQl
    }
}

2 个答案:

答案 0 :(得分:0)

好的,您的问题可能是onCreate方法无效。如果删除现有/可用数据库,则表示没有创建表。

您需要在db.execSql(a_string_with_the_sql_to_create_your_tables);方法中使用onCreate

类似的东西: -

@Override
public void onCreate(SQLiteDatabase db) {
    crtsql = "CREATE TABLE IF NOT EXISTS tb_user (id INTEGER PRIMARY KEY,nama TEXT,nip TEXT, email TEXT, password TEXT)";
    db.execSQL(crtsql);
}
  • 请注意,您需要对所有其他表执行相同的操作。注意到每个都需要一个db.execSQL,因为一次只能运行1个SQL语句。

如果您有其他代码从assets文件夹复制数据库,则会出现异常。如果是这样,包括那将是相关的,就像这样,这不起作用可能是问题。

编辑重新评论

已经确定问题很可能是没有调用assets资源文件夹中的数据库副本。

为了简化修复,建议使用以下内容(而不是编辑代码): -

  1. 创建一个名为CopyDBFromAssets的Java类,即文件 CopyDBFromAssets.java ,并将以下内容纳入该类
  2. : -

    public class CopyDBFromAssets {
    
        private static final String TAG = "DBASSETCOPY";
        String mDBPath, mDatabasename;
    
        CopyDBFromAssets(Context context, String databasename) {
            mDatabasename = databasename;
            mDBPath = context.getDatabasePath(mDatabasename).getPath();
            if(!ifDatabaseExists(mDBPath)) {
                Log.d(TAG,
                        "Attempting to copy database " +
                                mDatabasename +
                                " from assets folder."
                );
                if (copyDatabase(context)) {
                    Log.d(TAG,"Database " +
                            mDatabasename + " successfully copied.");
                } else {
                    Log.e(TAG,"Database " + mDatabasename + " NOT COPIED!!!");
                }
            }
        }
    
        private boolean copyDatabase(Context context) {
            try {
                InputStream inputStream = context.getAssets().open(mDatabasename);
                String outFileName = mDBPath;
                OutputStream outputStream = new FileOutputStream(outFileName);
                byte[] buff = new byte[1024];
                int length = 0;
                while ((length = inputStream.read(buff)) > 0) {
                    outputStream.write(buff, 0, length);
                }
                outputStream.flush();
                outputStream.close();
                Log.v(TAG, "DB copied");
                return true;
    
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
        }
    
        private boolean ifDatabaseExists(String dbpath) {
            File db = new File(dbpath);
            if(db.exists()) return true;
            File dir = new File(db.getParent());
            if (!dir.exists()) {
                dir.mkdirs();
            }
            return false;
        }
    }
    
    1. 修改 MainActivity.java 以添加一行以根据
    2. 调用上述内容

      : -

      公共类MainActivity扩展了Activity {

      private Session session;
      //private Button button;
      //DatabaseHelper myDbHelper = new DatabaseHelper(this); //<<<< COMMENTED OUT
      DatabaseHelper myDbHelper; //<<<< ADDED
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          CopyDBFromAssets cdbfa = new CopyDBFromAssets(this,DatabaseHelper.DB_NAME); //<<<< ADDED LINE
          myDbHelper = new DatabaseHelper(this); //<<<< ADDED LINE
          session = new Session(this);
         // button = (Button)findViewById(R.id.button);
          if(session.loggedin()){
              startActivity(new Intent(MainActivity.this,Home.class));
            finish();
          }
      }
      ........ the rest of MainActivity.Java
      

      备注

      • DatabaseHelper myDbHelper = new DatabaseHelper(this);已被注释掉并分为声明和实例化(设置)
      • 使用//&lt;&lt;&lt;&lt;&lt;

        检查所有行
        1. 完成上述更改后,删除应用程序的数据并运行。检查日志,你应该看到
        2. 的内容

      : -

      04-12 12:39:31.672 1568-1568/soanswers.soanswers D/DBASSETCOPY: Attempting to copy database mydb from assets folder.
      04-12 12:39:31.672 1568-1568/soanswers.soanswers V/DBASSETCOPY: DB copied
      04-12 12:39:31.672 1568-1568/soanswers.soanswers D/DBASSETCOPY: Database mydb successfully copied.
      
      • 在上文中,使用的数据库名为 mydb ,而不是 bmkgdb.db

答案 1 :(得分:-1)

您正在将记录插入到不存在的表中。在执行插入操作之前创建表。