我是新來的Android,並且在訪問數據庫時遇到了一些sqlite數據庫問題。我創建了一個默認值表,我試圖用默認值登錄,所以它給運行時錯誤。Sqlite登錄運行時錯誤
這裏是我的代碼:
MainActivity.java
package com.example.defaultdb;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
Button btn;
EditText ename, epass;
private Logindatabase logindb;
private SQLiteDatabase db;
Context context = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
logindb = new Logindatabase(this);
logindb = logindb.open();
SQLiteDatabase sqLiteDatabase = logindb.getWritableDatabase();
logindb = new Logindatabase(this);
logindb.insertContact("[email protected]", "141");
logindb.insertContact("[email protected]", "120");
logindb.insertContact("[email protected]", "921");
Cursor allContacts = logindb.getAllContacts();
//createDatabase();
btn=(Button) findViewById(R.id.button1);
ename=(EditText) findViewById(R.id.editText1);
epass=(EditText) findViewById(R.id.editText2);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String userName = ename.getText().toString();
String password = epass.getText().toString();
String storedPassword = logindb.getSinlgeEntry(userName);
if (epass.equals(storedPassword)) {
Toast.makeText(MainActivity.this,
"Congrats: Login Successfull", Toast.LENGTH_LONG)
.show();
Intent main = new Intent(MainActivity.this, Next.class);
startActivity(main);
} else {
Toast.makeText(MainActivity.this,
"User Name or Password does not match",
Toast.LENGTH_LONG).show();
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
logindb.close();
}
}
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginTop="35dp"
android:ems="10"
android:hint="email"
android:inputType="textEmailAddress" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editText1"
android:layout_alignRight="@+id/editText1"
android:layout_below="@+id/editText1"
android:layout_marginTop="48dp"
android:ems="10"
android:hint="password"
android:inputType="textPassword" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="Login" />
</RelativeLayout>
DBHelper.java
package com.example.defaultdb;
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 DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase _db) {
_db.execSQL(Logindatabase.CREATE_TABLE_CONTACT);
}
@Override
public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) {
Log.w("TaskDBAdapter", "Upgrading from version " + _oldVersion + " to "
+ _newVersion + ", which will destroy all old data");
_db.execSQL("DROP TABLE IF EXISTS " + "TEMPLATE");
onCreate(_db);
}
}
Logindatabase.java
package com.example.defaultdb;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;
public class Logindatabase extends SQLiteOpenHelper{
public static interface CONTACT extends BaseColumns{
static final String DATABASE_TABLE= "login";
static final String KEY_EMAIL="email";
static final String KEY_PASS="pass";
}
static final String CREATE_TABLE="CREATE TABLE IF NOT EXISTS";
static final String KEY_ROWID="_id";
static final String TAG="DBAdapter";
static final String DATABASE_NAME= "MyDB";
static final int DATABASE_VERSION=3;
static final String CREATE_TABLE_CONTACT= CREATE_TABLE + CONTACT.DATABASE_TABLE +" ("+ CONTACT._ID + "INTEGER PRIMARY KEY," +
CONTACT.KEY_EMAIL + "TEXT," + CONTACT.KEY_PASS + "TEXT DEFAULT 'TTEESSTT');";
// static final String DROP_TABLE="DROP TABLE "+DATABASE_TABLE+" IF EXITS";
SQLiteDatabase db;
private DBHelper dbHelper;
public Logindatabase(Context context)
{
super(context, DATABASE_NAME,null, DATABASE_VERSION);
//this.context=context;
// DBHelper=new DatabaseHelper(context);
//Message.message(context,"constructor called");
}
//open the database
public Logindatabase open() throws SQLException{
db =dbHelper.getWritableDatabase();
return this;
}
@Override
public void onCreate(SQLiteDatabase db){
try{
db.execSQL(CREATE_TABLE_CONTACT);
}catch(SQLException e){
//e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try{
Log.w(TAG, "Upgrading database from version" + oldVersion + " to " + newVersion + ",which will destroy all odl data");
db.execSQL("DROP TABLE IF EXISTS" + CONTACT.DATABASE_TABLE);
onCreate(db);
}catch(SQLException e) {
// TODO Auto-generated method stub
}
}
//closes the database
public void close()
{
//DBHelper.close();
close();
}
public SQLiteDatabase getDatabaseInstance() {
return db;
}
public Cursor getAllContacts(){
return getReadableDatabase().query(CONTACT.DATABASE_TABLE, null, null, null, null, null,null);
}
//insert values
public void insertContact(String email, String pass){
ContentValues values = new ContentValues();
values.put(CONTACT.KEY_EMAIL, email);
if(pass!=null) {
values.put(CONTACT.KEY_PASS, pass);
}
getWritableDatabase().insert(CONTACT.DATABASE_TABLE,null,values);
//return logindb.insert(DATABASE_TABLE, null, initialValues);
}
public String getSinlgeEntry(String userName) {
Cursor cursor = db.query("LOGIN", null, " KEY_EMAIL=?",
new String[] { userName }, null, null, null);
if (cursor.getCount() < 1) {
cursor.close();
return "NOT EXIST";
}
cursor.moveToFirst();
String password = cursor.getString(cursor.getColumnIndex("KEY_PASS"));
cursor.close();
return password
}
}
請顯示錯誤stacktrace – Opiatefuchs
首先總是檢查你的數據庫或表是否創建或沒有..ok.keep記住親愛的下一次,所以你得到確切的問題 –
首先刪除try-catch塊,忽略異常。然後卸載您的應用程序。然後你會得到logcat特定的堆棧跟蹤,告訴什麼是錯的。 – laalto