android中使用SQlite数据库登录时出现问题
使用SQLite数据库登录时出现问题,我正在创建注册屏幕,使用SQLite数据库从注册屏幕插入的登录屏幕正在工作,数据插入成功,但当我尝试使用with data从数据库登录获取数据时,没有任何响应 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
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()应始终从并行线程->此处使用异步任务调用。崩溃消息是什么?崩溃消息是什么?