2016-04-11 41 views
0

我是新來的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 
} 


} 
+0

請顯示錯誤stacktrace – Opiatefuchs

+0

首先總是檢查你的數據庫或表是否創建或沒有..ok.keep記住親愛的下一次,所以你得到確切的問題 –

+0

首先刪除try-catch塊,忽略異常。然後卸載您的應用程序。然後你會得到logcat特定的堆棧跟蹤,告訴什麼是錯的。 – laalto

回答

0

你已經做了CREATE_TABLECONTACT.DATABASE_TABLE之間沒有空格,該字符串應該是:

CREATE TABLE IF NOT EXISTSlogin 

,這將defenitely引入錯誤。它必須是例如:

CREATE_TABLE + " " +CONTACT.DATABASE_TABLE 

建立一個適當的字符串,添加這兩個之間的空間,那麼這將是:

CREATE TABLE IF NOT EXISTS login 

但沒有看到一個堆棧跟蹤,我們不容給你一個具體的答案

+0

拜託,如果有人編輯我的答案,請先看看意思。我指出了錯誤的CREATE_TABLE字符串,並只顯示了提問者將如何進行。在......之間沒有空間。 – Opiatefuchs