Erstellen Login-Seite mit SQLITE
Ich versuche zu erstellen login-Seite mit sqlite mit mehreren Spalten, aber Sie können keine Werte einfügen in :
Hier ist meine Einfügung-Abfrage-code:
package com.example.doctorsmanager;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
public class DataBaseAdapter
{
static final String DATABASE_NAME = "doctordb";
static final int DATABASE_VERSION = 2;
static final String USERNAME_COLUMN = "UserName";
static final String PASSWORD_COLUMN = "Password";
static final String QUALIFICATION_COLUMN = "Qualification";
static final String SPECIALIZATION_COLUMN = "Specialization";
static final String COLUMN_ID = "id";
static final String REGISTRATIONNUMBER_COLUMN = "RegistrationNumber";
static final String CELLNUMBER_COLUMN = "CellNumber";
// TODO: Create public field for each column in your table.
// SQL Statement to create a new database.
static final String DATABASE_CREATE = "create table "+"LOGIN"+
"( " +"ID"+" integer primary key autoincrement,"+ "USERNAME text,PASSWORD String,QUALIFICATION String,SPECIALIZATION text,REGISTRATIONNUMBER String,CELLNUMBER integer,MAIL String); ";
// public void onCreate(SQLiteDatabase db){
// String makeTable = "CREATE TABLE " + TABLE_FOOD + "("
// + NAME_COLUMN + " TEXT," + CALORIE_COLUMN + " INTEGER,"
// + PROTEIN_COLUMN + " INTEGER" + ")";
// Variable to hold the database instance
public SQLiteDatabase db;
// Context of the application using the database.
private final Context context;
// Database open/upgrade helper
private DataBaseHelper dbHelper;
public DataBaseAdapter(Context _context)
{
context = _context;
dbHelper = new DataBaseHelper(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public DataBaseAdapter open() throws SQLException
{
db = dbHelper.getWritableDatabase();
return this;
}
public void close()
{
db.close();
}
public SQLiteDatabase getDatabaseInstance()
{
return db;
}
public void insertEntry(String userName,String password,String qualification,String specialization,String registrationNumber,String cellNumber,String mailId )
{
ContentValues newValues = new ContentValues();
// Assign values for each row.
newValues.put("USERNAME", userName);
newValues.put("PASSWORD",password);
newValues.put("QUALIFICATION",qualification);
newValues.put("SPECIALIZATION",specialization);
newValues.put("REGISTRATIONNUMBER",registrationNumber);
newValues.put("CONTACTNUMBER",cellNumber);
newValues.put("EMAIL",mailId);
// Insert the row into your table
db.insert("LOGIN", null, newValues);
System.out.println("USERNAME");
System.out.println("PASSWORD");
// Toast.makeText(context, "Reminder Is Successfully Saved", Toast.LENGTH_LONG).show();
}
public int deleteEntry(String UserName)
{
//String id=String.valueOf(ID);
String where="USERNAME=?";
int numberOFEntriesDeleted= db.delete("LOGIN", where, new String[]{UserName}) ;
// Toast.makeText(context, "Number fo Entry Deleted Successfully : "+numberOFEntriesDeleted, Toast.LENGTH_LONG).show();
return numberOFEntriesDeleted;
}
public String getSinlgeEntry(String userName)
{
Cursor cursor=db.query("LOGIN", null, " USERNAME=?", new String[]{userName}, null, null, null);
if(cursor.getCount()<1) // UserName Not Exist
{
cursor.close();
return "NOT EXIST";
}
cursor.moveToFirst();
String password= cursor.getString(cursor.getColumnIndex("PASSWORD"));
cursor.close();
return password;
}
public void updateEntry(String userName,String password,String qualification,String specialization,String registrationNumber,String cellNumber,String mailId)
{
// Define the updated row content.
ContentValues updatedValues = new ContentValues();
// Assign values for each row.
updatedValues.put("USERNAME", userName);
updatedValues.put("PASSWORD",password);
updatedValues.put("QUALIFICATION",qualification);
updatedValues.put("SPECIALIZATION",specialization);
updatedValues.put("REGISTRATIONNUMBER",registrationNumber);
updatedValues.put("CONTACTNUMBER",cellNumber);
updatedValues.put("EMAIL",mailId);
String where="USERNAME = ?";
db.update("LOGIN",updatedValues, where, new String[]{userName});
}
}
Und hier ist der code, der auf der signup-Seite, wenn Benutzer drücken Sie die button
an-Konto zu erstellen:
btnCreateAccount.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String userName=editTextUserName.getText().toString();
String password=editTextPassword.getText().toString();
String qualification=editTextQualification.getText().toString();
String specializaion=editTextSpecialization.getText().toString();
String registrationNumber=editTextRegistrationNumber.getText().toString();
String cellNumber=editTextCellNumber.getText().toString();
String mailId=editTextMail.getText().toString();
// check if any of the fields are vaccant
if(userName.equals("")||password.equals(""))
{
Toast.makeText(getApplicationContext(), "Field Vaccant", Toast.LENGTH_LONG).show();
return;
}
// check if both password matches
if(!password.equals(password))
{
Toast.makeText(getApplicationContext(), "Password does not match", Toast.LENGTH_LONG).show();
return;
}
else
{
// Save the Data in Database
DataBaseAdapter.insertEntry(userName,password,qualification,specializaion,registrationNumber,cellNumber,mailId);
Toast.makeText(getApplicationContext(), "Account Successfully Created ", Toast.LENGTH_LONG).show();
... und hier die Abfrage für die Haupt-login-Seite bei erfolgreichem login:
btnLogIn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// get The User name and Password
String userName=editTextUserName.getText().toString();
String password=editTextPassword.getText().toString();
// fetch the Password form database for respective user name
String storedPassword=DataBaseAdapter.getSinlgeEntry(userName);
// check if the Stored password matches with Password entered by user
if(password.equals(storedPassword))
{
Toast.makeText(MainActivity.this, "Congrats: Login Successfull", Toast.LENGTH_LONG).show();
// dialog.dismiss();
}`enter code here`
else
{
Toast.makeText(MainActivity.this, "User Name or Password does not match", Toast.LENGTH_LONG).show();
}
// Intent intentlogin=new Intent(getApplicationContext(),LoginSuccess.class);
// startActivity(intentlogin);
}
});
Dies ist meine Datenbank-helper-Klasse:
package com.example.doctorsmanager;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DataBaseHelper extends SQLiteOpenHelper
{
public DataBaseHelper(Context context, String name,CursorFactory factory, int version)
{
super(context, name, factory, version);
}
// Called when no database exists in disk and the helper class needs
// to create a new one.
@Override
public void onCreate(SQLiteDatabase _db)
{
_db.execSQL(DataBaseAdapter.DATABASE_CREATE);
}
// Called when there is a database version mismatch meaning that the version
// of the database on disk needs to be upgraded to the current version.
@Override
public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion)
{
// Log the version upgrade.
Log.w("TaskDBAdapter", "Upgrading from version " +_oldVersion + " to " +_newVersion + ", which will destroy all old data");
// Upgrade the existing database to conform to the new version. Multiple
// previous versions can be handled by comparing _oldVersion and _newVersion
// values.
// The simplest case is to drop the old table and create a new one.
_db.execSQL("DROP TABLE IF EXISTS " + "TEMPLATE");
// Create a new one.
onCreate(_db);
}
}
Dies ist die log cat:
02-28 02:37:47.838: W/TaskDBAdapter(14302): Upgrading from version 1 to 2, which will destroy all old data
02-28 02:37:47.848: E/SQLiteLog(14302): (1) table LOGIN already exists
02-28 02:37:47.908: D/AndroidRuntime(14302): Shutting down VM
02-28 02:37:47.908: W/dalvikvm(14302): threadid=1: thread exiting with uncaught exception (group=0xb4ab8ba8)
02-28 02:37:48.048: E/AndroidRuntime(14302): FATAL EXCEPTION: main
02-28 02:37:48.048: E/AndroidRuntime(14302): Process: com.example.doctorsmanager, PID: 14302
02-28 02:37:48.048: E/AndroidRuntime(14302): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.doctorsmanager/com.example.doctorsmanager.MainActivity}: android.database.sqlite.SQLiteException: table LOGIN already exists (code 1): , while compiling: create table LOGIN( ID integer primary key autoincrement,USERNAME text,PASSWORD String,QUALIFICATION String,SPECIALIZATION text,REGISTRATIONNUMBER String,CELLNUMBER integer,MAIL String);
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.app.ActivityThread.access$800(ActivityThread.java:135)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.os.Handler.dispatchMessage(Handler.java:102)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.os.Looper.loop(Looper.java:136)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.app.ActivityThread.main(ActivityThread.java:5017)
02-28 02:37:48.048: E/AndroidRuntime(14302): at java.lang.reflect.Method.invokeNative(Native Method)
02-28 02:37:48.048: E/AndroidRuntime(14302): at java.lang.reflect.Method.invoke(Method.java:515)
02-28 02:37:48.048: E/AndroidRuntime(14302): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-28 02:37:48.048: E/AndroidRuntime(14302): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-28 02:37:48.048: E/AndroidRuntime(14302): at dalvik.system.NativeStart.main(Native Method)
02-28 02:37:48.048: E/AndroidRuntime(14302): Caused by: android.database.sqlite.SQLiteException: table LOGIN already exists (code 1): , while compiling: create table LOGIN( ID integer primary key autoincrement,USERNAME text,PASSWORD String,QUALIFICATION String,SPECIALIZATION text,REGISTRATIONNUMBER String,CELLNUMBER integer,MAIL String);
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1672)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1603)
02-28 02:37:48.048: E/AndroidRuntime(14302): at com.example.doctorsmanager.DataBaseHelper.onCreate(DataBaseHelper.java:20)
02-28 02:37:48.048: E/AndroidRuntime(14302): at com.example.doctorsmanager.DataBaseHelper.onUpgrade(DataBaseHelper.java:37)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:257)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
02-28 02:37:48.048: E/AndroidRuntime(14302): at com.example.doctorsmanager.DataBaseAdapter.open(DataBaseAdapter.java:42)
02-28 02:37:48.048: E/AndroidRuntime(14302): at com.example.doctorsmanager.MainActivity.onCreate(MainActivity.java:29)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.app.Activity.performCreate(Activity.java:5231)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-28 02:37:48.048: E/AndroidRuntime(14302): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
02-28 02:37:48.048: E/AndroidRuntime(14302): ... 11 more
- Als kodamirmo sagte, müssen wir schauen, wie die Tabelle erstellt wird. Auch ein logcat (ich.e Fehlermeldung) wäre hilfreich.
- Post die Abfrage, die Sie machen, um Tabellen zu erstellen.
- Fügen Sie einfach
_db.execSQL("DROP TABLE IF EXISTS LOGIN");
inonUpgrade(....)
und versuchen - Ich habe geschrieben das die gesamtsicherung der Datenbank Adapter Klasse zu... und @MD ich möchte Sie Fragen, wo Sie wqant mir diese Zeile.. Danke für die Hilfe
- in
DataBaseHelper
und warum SieDATABASE_VERSION = 2
in IhreDataBaseAdapter
? wollen Sie, um es zu Aktualisieren? - Wenn ich versuche mit der version 1, die anderen Spalten abgesehen von name und Kennwort wurden nicht Hinzugefügt, um die Tabelle, das ist der Grund, ich habe ein Upgrade der version
- ich habe versucht, IHREN Vorschlag, aber es ist immer noch nicht funktioniert. Bitte etwas anderes suggerieren
- und Warum erstellen Sie
Login
Tabelle wieder becoz es bereits vorhanden ist. Sie müssen nur fügen Sie einige neue Spalte hinein. - Ich bin sehr neu in android habe ich nur noch die Spalten und version, weil meine Spalten wurden nicht Hinzugefügt, um die. Nun, ich verstehe nicht, wenn ich nicht über die zum erstellen der Tabelle wieder die Linie zu löschen und welche zu Bearbeiten. Das ist, warum, bitte sagen Sie mir die Lösung mit Erklärung, was zu tun ist, was nicht zu tun, danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie die Datenbank mehrere Male. Bewegen Sie die Erstellung der Datenbank zu SQLiteOpenHelper Klasse und erstellen Sie einfach eine Instanz davon in eine Aktivität, die Sie wollen, es zu benutzen in.
In dieser haben Sie Fehler Gemacht haben, die Sie verändert haben, wird die Spalte der Tabelle, so dass die Datenbank version, die Sie geändert haben, 1 bis 2.Die Sache, die Sie tun müssen, ist in der SQLiteOpenHelper Klasse-Datei, die den code verwenden, die unten gegeben werden, wie das
In tha Alter Table-Abfrage die E-Mail wird die Spalte Neu Hinzugefügt wurde ,Verwenden Sie den sqlite manager, um die Datenbank-Ansicht
//MainActivity.java
}
//Signin.java Klasse
}
//show.java Klasse
}