简单的登录,注册和显示数据库安卓应用程序.但是登录并显示数据库没有响应.获取 SQLite 异常



这是我尝试创建的一个简单的登录和注册应用程序,其中包含显示数据库历史记录的附加功能。注册页面工作正常。但是,当我尝试登录或打开数据库时,我收到以下错误消息:-

  Process: com.example.princebhura.hopon, PID: 13301
    android.database.sqlite.SQLiteException: no such column: uid (code 1): , while compiling: Select uid pass, fromcontacts
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:919)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:530)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
            at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
            at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1379)
            at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1318)
            at com.example.princebhura.hopon.DatabaseHelper.search(DatabaseHelper.java:58)
            at com.example.princebhura.hopon.Login$1.onClick(Login.java:51)
            at android.view.View.performClick(View.java:4785)
            at android.view.View$PerformClick.run(View.java:19858)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:155)
            at android.app.ActivityThread.main(ActivityThread.java:5696)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

登录.java

  package com.example.princebhura.hopon;
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;``
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    public class Login extends AppCompatActivity {
        private static EditText username;
        private static EditText password;
        private static Button login_button;
        private static Button signup_button;
        private static Button showdatabase_button;
        private static String history;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
            System.out.println("hiii");
            Button();
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_login, menu);
            return true;
        }
        DatabaseHelper helper= new DatabaseHelper(this);
        public void Button(){
            username = (EditText)findViewById(R.id.editText);
            final String uidstr=username.getText().toString();
            password = (EditText)findViewById(R.id.editText2);
            final String passwordstr=password.getText().toString();
            login_button = (Button) findViewById(R.id.button);
            signup_button= (Button) findViewById(R.id.button_signup);
            showdatabase_button=(Button)findViewById(R.id.button3);
            //System.out.println(history);
            login_button.setOnClickListener(
                    new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            String pass= helper.search(uidstr);
                            if ( passwordstr.equals(pass)==true){
                                Toast.makeText(Login.this, "Username and password is correct",
                                        Toast.LENGTH_SHORT).show();
                                Intent intent = new Intent(Login.this, user.class);
                                startActivity(intent);
                            }
                            else{
                                Toast.makeText(Login.this, "Username and password is NOT correct",
                                        Toast.LENGTH_SHORT).show();
                                Button();
                            }
                        }
                    }
            );
            signup_button.setOnClickListener(
                    new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                Intent intent = new Intent(Login.this, SignUp.class);
                                startActivity(intent);
                            }
                            });
            showdatabase_button.setOnClickListener(
                    new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Intent intent = new Intent(Login.this, History.class);
                            history = helper.gethistory();
                            intent.putExtra("Database History:n", history);
                            startActivity(intent);
                        }
                    }
            );
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    }

注册 包 com.example.princebhura.hopon;

    import android.provider.ContactsContract;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    public class SignUp extends AppCompatActivity {
        DatabaseHelper helper = new DatabaseHelper(this);
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_sign_up);
        }
        private static EditText name;
        private static EditText email;
        private static EditText uid;
        private static EditText pass1;
        private static EditText pass2;
        private static Button signup_button1;
        private static String namestr;
        private static String emailstr;
        private static String uidstr;
        private static String pass1str;
        private static String pass2str;

        public void onsignupClick(View v)
        {
            if(v.getId()==R.id.button2) {
                name = (EditText) findViewById(R.id.Name);
                email = (EditText) findViewById(R.id.Email);
                uid = (EditText) findViewById(R.id.Uid);
                pass1 = (EditText) findViewById(R.id.Pass1_text);
                pass2 = (EditText) findViewById(R.id.Pass2_text);
                signup_button1 = (Button) findViewById(R.id.button2);
                namestr = name.getText().toString();
                emailstr = email.getText().toString();
                uidstr = uid.getText().toString();
                pass1str = pass1.getText().toString();
                pass2str = pass2.getText().toString();
               // System.out.println(pass1str + " " + pass2str);
               if (pass1str.equals(pass2str)) {
                    Contact c = new Contact();
                    c.setName(namestr);
                    c.setEmail(emailstr);
                    c.setPassword(pass1str);
                    c.setUid(uidstr);
                    helper.insertContacts(c);
                    Toast temp = Toast.makeText(SignUp.this, "SignUp Complete. Please Login", Toast.LENGTH_SHORT);
                    temp.show();
                }
                else {
                    Toast temp = Toast.makeText(SignUp.this, "Passwords dont match!", Toast.LENGTH_SHORT);
                    temp.show();
                }

            }
        }
            @Override
            public boolean onCreateOptionsMenu (Menu menu){
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_sign_up, menu);
            return true;
        }
            @Override
            public boolean onOptionsItemSelected (MenuItem item){
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
        }

数据库助手

    package com.example.princebhura.hopon;
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    /**
     * Created by princebhura on 11/02/16.
     */
    public class DatabaseHelper extends SQLiteOpenHelper {
        String TAG= "DatabaseHelper";
        private static final int DATABASE_VERSION = 1;
        private static final String DATABASE_NAME = "contacts.db";
        private static final String TABLE_NAME = "contacts";
        private static final String COLUMN_ID = "id";
        private static final String COLUMN_NAME = "name";
        private static final String COLUMN_EMAIL = "email";
        private static final String COLUMN_UID = "uid";
        private static final String COLUMN_PASS = "pass";
        SQLiteDatabase db;
        private static final String TABLE_CREATE = "create table contacts(id integer primary key not null , " +
                "name text not null, email text not null, uid text not null , pass text not null)";
        public DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }
        public void insertContacts(Contact c) {
            db = this.getWritableDatabase();
            ContentValues values = new ContentValues();
            String query="Select * from contacts";
            Cursor cursor=db.rawQuery(query, null);
            int count=cursor.getCount();
            values.put(COLUMN_ID, count);
            values.put(COLUMN_NAME, c.getName());
            values.put(COLUMN_EMAIL, c.getEmail());
            values.put(COLUMN_UID, c.getUid());
            values.put(COLUMN_PASS, c.getPass());
            db.insert(TABLE_NAME, null, values);
            db.close();
        }
        public String gethistory() {
           String hist= getTableAsString(db, TABLE_NAME);
            return hist;
        }
        public String search(String userid) {
            db = this.getReadableDatabase();
            String query = "Select uid pass, from" + TABLE_NAME;
            Cursor cursor=  db.rawQuery(query,null);
            String a, b="Not found#!2334";
            if(cursor.moveToFirst())
            {
                do
                {
                     a=cursor.getString(0);
                    if(a.equals(userid)) {
                        b = cursor.getString(1);
                        break;
                    }
                }
                while (cursor.moveToNext());
            }
            return b;
        }
        public String getTableAsString(SQLiteDatabase db, String tableName) {
            Log.d(TAG, "getTableAsString called");
            String tableString = String.format("Table %s:n", tableName);
            Cursor allRows  = db.rawQuery("SELECT * FROM " + tableName, null);
            if (allRows.moveToFirst() ){
                String[] columnNames = allRows.getColumnNames();
                do {
                    for (String name: columnNames) {
                        tableString += String.format("%s: %sn", name,
                                allRows.getString(allRows.getColumnIndex(name)));
                    }
                    tableString += "n";
                } while (allRows.moveToNext());
            }
            return tableString;
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(TABLE_CREATE);
            this.db = db;
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            String query = "Drop Table if exists" + TABLE_NAME;
            db.execSQL(query);
            this.onCreate(db);
        }
    }

联系 包 com.example.princebhura.hopon;

    /**
     * Created by princebhura on 11/02/16.
     */
    public class Contact {
        int id;
        String name, email, uid, pass;
        public void setName(String name)
        {
            this.name=name;
        }
        public String getName()
        {
            return this.name;
        }
        public void setEmail(String email)
        {
            this.email=email;
        }
        public String getEmail()
        {
            return this.email;
        }
        public void setUid(String uid)
        {
            this.uid=uid;
        }
        public String getUid()
        {
            return this.uid;
        }
        public void setPassword(String pass)
        {
            this.pass=pass;
        }
        public String getPass()
        {
            return this.pass;
        }
    }

历史

    package com.example.princebhura.hopon;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    public class History extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_history);
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_history, menu);
            return true;
        }
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    }

主节 清单.xml

        <application
            android:allowBackup="true"
            android:icon="@mipmap/hop"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".Login"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity
                android:name=".user"
                android:label="@string/title_activity_user" >
                <intent-filter>
                    <action android:name="com.example.princebhura.hopon.user" />
                    <category android:name="android.intent.category.default" />
                </intent-filter>
            </activity>
            <activity
                android:name=".SignUp"
                android:label="@string/title_activity_sign_up" >
                <intent-filter>
                    <action android:name="com.example.princebhura.hopon.SignUp" />
                    <category android:name="android.intent.category.default" />
                </intent-filter>
            </activity>
            <activity
                android:name=".History"
                android:label="@string/title_activity_history" >
                <intent-filter>
                    <action android:name="com.example.princebhura.hopon.History" />
                    <category android:name="android.intent.category.default" />
                </intent-filter>
            </activity>
        </application>
    </manifest>
    <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:paddingLeft="@dimen/activity_horizontal_margin"
        android:background="@drawable/logo2"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".Login"
        android:id="@+id/login_page">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="40sp"
            android:text="@string/appname"
            android:id="@+id/login"
            android:textColorHighlight="#1a04ff"
            android:textColorHint="#1f08ff"
            android:textColorLink="#120aff"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:textColor="#010101" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="LOGIN"
            android:id="@+id/button"
            android:theme="@android:style/MediaButton"
            android:textSize="25sp"
            android:layout_above="@+id/button_signup"
            android:layout_centerHorizontal="true" />
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:ems="10"
            android:id="@+id/editText"
            android:layout_marginBottom="114dp"
            android:layout_above="@+id/button"
            android:layout_alignLeft="@+id/editText2"
            android:layout_alignStart="@+id/editText2"
            android:layout_marginRight="40dp"
            />
        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textEmailAddress"
            android:ems="10"
            android:layout_marginBottom="20dp"
            android:textColor="@color/abc_search_url_text_normal"
            android:layout_above="@+id/editText"
            android:layout_alignLeft="@+id/login"
            android:layout_alignStart="@+id/login"
            android:layout_marginLeft="27dp"
            android:layout_marginStart="27dp"
            android:layout_marginRight="40dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="User id"
            android:id="@+id/textView"
            android:paddingRight="16dp"
            android:layout_alignBottom="@+id/editText2"
            android:layout_toLeftOf="@+id/editText"
            android:layout_toStartOf="@+id/editText"
            android:textColor="#3288ff" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:text="Password"
            android:id="@+id/textView2"
            android:layout_alignBottom="@+id/editText"
            android:layout_alignLeft="@+id/textView"
            android:layout_alignStart="@+id/textView"
            android:paddingRight="16dp"
            android:textColor="#3288ff" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sign Up"
            android:id="@+id/button_signup"
            android:textSize="19sp"
            android:theme="@android:style/MediaButton"
            android:layout_marginBottom="45dp"
            android:layout_alignParentBottom="true"
            android:layout_alignLeft="@+id/button"
            android:layout_alignStart="@+id/button" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Show Database"
            android:id="@+id/button3"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:textSize="10sp"
    />
        />

您在此行收到错误String query = "Select uid pass, from" + TABLE_NAME;

我认为您想选择 uid 并从表联系人传递,但您的逗号放在了错误的位置。调试器将假定 uid 传递是一列。

应该是String query = "Select uid, pass FROM" + TABLE_NAME;

希望对您有所帮助。

最新更新