Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android中使用SQlite数据库登录时出现问题_Android_Sqlite - Fatal编程技术网

android中使用SQlite数据库登录时出现问题

android中使用SQlite数据库登录时出现问题,android,sqlite,Android,Sqlite,使用SQLite数据库登录时出现问题,我正在创建注册屏幕,使用SQLite数据库从注册屏幕插入的登录屏幕正在工作,数据插入成功,但当我尝试使用with data从数据库登录获取数据时,没有任何响应 SQlite数据库助手模型类 public class SQLiteDBHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "info.db"; private static fi

使用SQLite数据库登录时出现问题,我正在创建注册屏幕,使用SQLite数据库从注册屏幕插入的登录屏幕正在工作,数据插入成功,但当我尝试使用with data从数据库登录获取数据时,没有任何响应

SQlite数据库助手模型类

public class SQLiteDBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "info.db";
    private static final int DATABASE_VERSION = 1;

    public static final String TABLE_NAME = "login";
    public static final String COLUMN_ID =  "userid";
    public static final String COLUMN_NAME =  "name";
    public static final String COLUMN_SUR_NAME =  "sur_name";

    private static final String CREATE_TABLE_QUERY =
            "CREATE TABLE " + TABLE_NAME + " (" +
                    COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    COLUMN_NAME+ " TEXT, " +
                    COLUMN_SUR_NAME + " TEXT " + ")";

    //modified constructor
    public SQLiteDBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_TABLE_QUERY);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(sqLiteDatabase);
    }
}
public class MainActivity extends Activity {
    SQLiteDatabase db;
    TextView tv;
    EditText et1,et2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = findViewById(R.id.button3);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent launch = new Intent(MainActivity.this,Login_page.class);
                startActivity(launch);
            }
        });

        tv=(TextView)findViewById(R.id.textView1);
        et1=(EditText)findViewById(R.id.editText1);
        et2=(EditText)findViewById(R.id.editText2);
        //create database if not already exist
        db= openOrCreateDatabase("DATABASE_NAME", MODE_PRIVATE, null);
        db.execSQL("create table if not exists TABLE_NAME(name varchar, sur_name varchar)");
    }

    private void startActivities(Intent intent) {
    }
    public void insert(View v)
    {
        String name=et1.getText().toString();
        String sur_name=et2.getText().toString();
        et1.setText("");
        et2.setText("");
        db.execSQL("insert into TABLE_NAME values('"+name+"','"+sur_name+"')");

        Toast.makeText(this, "values inserted successfully.", Toast.LENGTH_LONG).show();

    }

    public void display(View v)
    {

        Cursor c=db.rawQuery("select * from TABLE_NAME", null);
        tv.setText("");

        c.moveToFirst();

        do
        {
            String name=c.getString(c.getColumnIndex("name"));
            String surname=c.getString(1);
            tv.append("Name:"+name+" and SurName:"+surname+"\n");
        }while(c.moveToNext());
    }
}
注册XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">



    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#abc" >
        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:maxLines="1"
            android:hint="Name"
            android:layout_marginTop="28dp"
            android:ems="10" >
            <requestFocus />
        </EditText>
        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/editText1"
            android:layout_below="@+id/editText1"
            android:hint="Sur Name"
            android:maxLines="1"
            android:ems="10" />
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/editText2"
            android:layout_alignRight="@+id/editText2"
            android:layout_below="@+id/editText2"
            android:text="Insert Values"
            android:onClick="insert"/>
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/button1"
            android:layout_alignRight="@+id/button1"
            android:layout_below="@+id/button1"
            android:onClick="display"
            android:text="Display all Values" />

        <Button
            android:id="@+id/button3"
            android:layout_below="@id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="Login"
            />


        <ScrollView
            android:id="@+id/scrollView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/button2" >
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >
                <TextView android:id="@+id/textView1"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:textSize="20sp"/>
            </LinearLayout>
        </ScrollView>
    </RelativeLayout>



</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Login_page">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center">
    <EditText
        android:id="@+id/ed1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Enter Name"/>

    <EditText
        android:id="@+id/ed2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Enter Surname"/>

    <Button
        android:id="@+id/btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Login"/>

    </LinearLayout>

</LinearLayout>
登录XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">



    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#abc" >
        <EditText
            android:id="@+id/editText1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:maxLines="1"
            android:hint="Name"
            android:layout_marginTop="28dp"
            android:ems="10" >
            <requestFocus />
        </EditText>
        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/editText1"
            android:layout_below="@+id/editText1"
            android:hint="Sur Name"
            android:maxLines="1"
            android:ems="10" />
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/editText2"
            android:layout_alignRight="@+id/editText2"
            android:layout_below="@+id/editText2"
            android:text="Insert Values"
            android:onClick="insert"/>
        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/button1"
            android:layout_alignRight="@+id/button1"
            android:layout_below="@+id/button1"
            android:onClick="display"
            android:text="Display all Values" />

        <Button
            android:id="@+id/button3"
            android:layout_below="@id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="Login"
            />


        <ScrollView
            android:id="@+id/scrollView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/button2" >
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >
                <TextView android:id="@+id/textView1"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:textSize="20sp"/>
            </LinearLayout>
        </ScrollView>
    </RelativeLayout>



</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Login_page">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center">
    <EditText
        android:id="@+id/ed1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Enter Name"/>

    <EditText
        android:id="@+id/ed2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Enter Surname"/>

    <Button
        android:id="@+id/btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="Login"/>

    </LinearLayout>

</LinearLayout>

你在注册课上犯了一个小错误。IE在助手类中声明的表名是login table。注册类时,您正在尝试创建表登录。但是您可以通过代码创建名为“table_NAME”的表。为了避免这种情况,请更改您的注册类别,如下所示。请试试这个

public class MainActivity extends Activity {
    SQLiteDatabase db;
    TextView tv;
    EditText et1,et2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = findViewById(R.id.button3);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent launch = new Intent(MainActivity.this,Login_page.class);
                startActivity(launch);
            }
        });

        tv=(TextView)findViewById(R.id.textView1);
        et1=(EditText)findViewById(R.id.editText1);
        et2=(EditText)findViewById(R.id.editText2);
        //create database if not already exist
        db= openOrCreateDatabase(SQLiteDBHelper.DATABASE_NAME, MODE_PRIVATE, null);
        db.execSQL("create table if not exists "+SQLiteDBHelper.TABLE_NAME+"(name varchar, sur_name varchar)");
    }

    private void startActivities(Intent intent) {
    }
    public void insert(View v)
    {
        String name=et1.getText().toString();
        String sur_name=et2.getText().toString();
        et1.setText("");
        et2.setText("");
        db.execSQL("insert into"+SQLiteDBHelper.TABLE_NAME+" values('"+name+"','"+sur_name+"')");

        Toast.makeText(this, "values inserted successfully.", Toast.LENGTH_LONG).show();

    }

    public void display(View v)
    {

        Cursor c=db.rawQuery("select * from"+SQLiteDBHelper.TABLE_NAME, null);
        tv.setText("");

        c.moveToFirst();

        do
        {
            String name=c.getString(c.getColumnIndex("name"));
            String surname=c.getString(1);
            tv.append("Name:"+name+" and SurName:"+surname+"\n");
        }while(c.moveToNext());
    }
}

请试试这个,如果你不明白这个错误,请问我。好的

在注册课上你犯了一个小错误。IE在助手类中声明的表名是login table。注册类时,您正在尝试创建表登录。但是您可以通过代码创建名为“table_NAME”的表。为了避免这种情况,请更改您的注册类别,如下所示。请试试这个

public class MainActivity extends Activity {
    SQLiteDatabase db;
    TextView tv;
    EditText et1,et2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = findViewById(R.id.button3);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent launch = new Intent(MainActivity.this,Login_page.class);
                startActivity(launch);
            }
        });

        tv=(TextView)findViewById(R.id.textView1);
        et1=(EditText)findViewById(R.id.editText1);
        et2=(EditText)findViewById(R.id.editText2);
        //create database if not already exist
        db= openOrCreateDatabase(SQLiteDBHelper.DATABASE_NAME, MODE_PRIVATE, null);
        db.execSQL("create table if not exists "+SQLiteDBHelper.TABLE_NAME+"(name varchar, sur_name varchar)");
    }

    private void startActivities(Intent intent) {
    }
    public void insert(View v)
    {
        String name=et1.getText().toString();
        String sur_name=et2.getText().toString();
        et1.setText("");
        et2.setText("");
        db.execSQL("insert into"+SQLiteDBHelper.TABLE_NAME+" values('"+name+"','"+sur_name+"')");

        Toast.makeText(this, "values inserted successfully.", Toast.LENGTH_LONG).show();

    }

    public void display(View v)
    {

        Cursor c=db.rawQuery("select * from"+SQLiteDBHelper.TABLE_NAME, null);
        tv.setText("");

        c.moveToFirst();

        do
        {
            String name=c.getString(c.getColumnIndex("name"));
            String surname=c.getString(1);
            tv.append("Name:"+name+" and SurName:"+surname+"\n");
        }while(c.moveToNext());
    }
}

请试试这个,如果你不明白这个错误,请问我。好的

您的注册和登录不使用同一个数据库。前者直接使用
SQLiteDatabase
TABLE\u NAME
,后者通过
SQLiteOpenHelper
访问不同的数据库
info.db


考虑更改您的注册类以使用helper管理的数据库。

您的注册和登录不使用同一数据库。前者直接使用
SQLiteDatabase
TABLE\u NAME
,后者通过
SQLiteOpenHelper
访问不同的数据库
info.db


考虑将注册类更改为使用helper管理的数据库。

Bro我认为您的登录类查询有一些问题。尝试用此查询替换查询

"SELECT * FROM " + SQLiteDBHelper.TABLE_NAME + " WHERE (" + SQLiteDBHelper.COLUMN_NAME + " = \'" + name + "\' AND "+ SQLiteDBHelper.COLUMN_SUR_NAME + " = \'" + sur_name + "\')"

兄弟,我想你的登录类查询有问题。尝试用此查询替换查询

"SELECT * FROM " + SQLiteDBHelper.TABLE_NAME + " WHERE (" + SQLiteDBHelper.COLUMN_NAME + " = \'" + name + "\' AND "+ SQLiteDBHelper.COLUMN_SUR_NAME + " = \'" + sur_name + "\')"
请尝试此代码

public class DB extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "myDb";
public static final String Reg_TABLE_NAME = "Register";

public Context mContext;

public DB(Context context) {
    super(context, DATABASE_NAME, null, 1);
    mContext = context;
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + Reg_TABLE_NAME + " (id integer primary key, email text, password text)");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + Reg_TABLE_NAME);
    onCreate(db);
}

public User insertUser(String email, String password) {
    java.util.Date date = new java.util.Date();
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("email", email);
    contentValues.put("password", password);
    long insertId = db.insert(Reg_TABLE_NAME, null, contentValues);
    db.close();
}

public void deleteComment(int id) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(Reg_TABLE_NAME, "id =" + id, null);
    db.close();
}


public User getUser(String email, String password) {
    User user = new User();
    SQLiteDatabase db = this.getReadableDatabase();
    String selectQuery = "SELECT  * FROM " + Reg_TABLE_NAME + " WHERE email=" + email + " AND password=" + password;
    Cursor c = db.rawQuery(selectQuery, null);
    if (c != null) {
        c.moveToFirst();
        while (c.isAfterLast() == false) {
            user.email = (c.getInt(c.getColumnIndex("email")));
            user.password = (c.getString(c.getColumnIndex("password")));
            c.moveToNext();
        }
    }
    c.close();
    db.close();
    return user;
}
}
并使用户pojo类并插入和读取数据

请尝试此代码

public class DB extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "myDb";
public static final String Reg_TABLE_NAME = "Register";

public Context mContext;

public DB(Context context) {
    super(context, DATABASE_NAME, null, 1);
    mContext = context;
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + Reg_TABLE_NAME + " (id integer primary key, email text, password text)");

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + Reg_TABLE_NAME);
    onCreate(db);
}

public User insertUser(String email, String password) {
    java.util.Date date = new java.util.Date();
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put("email", email);
    contentValues.put("password", password);
    long insertId = db.insert(Reg_TABLE_NAME, null, contentValues);
    db.close();
}

public void deleteComment(int id) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(Reg_TABLE_NAME, "id =" + id, null);
    db.close();
}


public User getUser(String email, String password) {
    User user = new User();
    SQLiteDatabase db = this.getReadableDatabase();
    String selectQuery = "SELECT  * FROM " + Reg_TABLE_NAME + " WHERE email=" + email + " AND password=" + password;
    Cursor c = db.rawQuery(selectQuery, null);
    if (c != null) {
        c.moveToFirst();
        while (c.isAfterLast() == false) {
            user.email = (c.getInt(c.getColumnIndex("email")));
            user.password = (c.getString(c.getColumnIndex("password")));
            c.moveToNext();
        }
    }
    c.close();
    db.close();
    return user;
}
}
并使用户pojo类并插入和读取数据


问题是什么?正确的答案已经在下面提供了,但是您应该确实考虑将所有SQL查询移入SQLeDeBelHelp类中。应该从一个并行线程>调用一个AcyCtaseHer.H.问题是什么?正确的答案已经在下面提供了,但是您应该明确地考虑将所有SQL查询移入SQLeDeBelHelp类中。和dbhelper.getReadableDatabase()应始终从并行线程->此处使用异步任务调用。崩溃消息是什么?崩溃消息是什么?