Sqlite数据库练习用android无法正常工作

时间:2013-05-09 14:12:28

标签: android database android-sqlite sqliteopenhelper

我在android中做了一个非常简单的Sqlite数据库演示应用程序。一个活动包含一个EditText,一个按钮和一个textxView, 我已经创建了处理程序类,并且还为mainActivity实现了java代码,但是它没有工作......我从下面的链接中创建了它: http://stdioe.blogspot.in/2012/03/how-to-connect-sqlite-database-in.html

但它在myActivity.java文件中显示了“私人数据库名称”中的错误....请帮助我......它是什么?

我的代码如下:

**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"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="68dp"
        android:layout_marginTop="48dp"
        android:ems="10"
        android:inputType="textPersonName" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="43dp"
        android:text="Button" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/button1"
        android:layout_centerVertical="true"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

DBcontroller.java

package com.example.dbbb;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DBcontroller extends SQLiteOpenHelper {
public static final String MY_DATABASE ="name";
public static final int VERSION =1;
    public DBcontroller(Context context) {
        super(context, MY_DATABASE, null, VERSION);
        // TODO Auto-generated constructor stub
    }
    @Override
    public void onCreate(SQLiteDatabase db) {

        // TODO Auto-generated method stub
        db.execSQL("CREATE TABLE mynames(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT);");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS mynames");
        onCreate(db);

    }

}

main.java

package com.example.dbbb;

import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.content.ContentValues;
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.ListView;
import android.widget.TextView;

public class MainActivity extends ListActivity {
EditText et;
Button b;
private DB names;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et=(EditText)findViewById(R.id.editText1);
        b=(Button)findViewById(R.id.button1);
        names = new DB(this);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                 try{
                     AddDATA(name.getText().toString());
                     Cursor cursor = ShowDATA();
                     ShowDATA(cursor);
                     }
                     finally{
                     names.close();
                    }
            }
        });

    }

     private void AddDATA(String ResultName){

            SQLiteDatabase db = names.getWritableDatabase();
            ContentValues datas = new ContentValues();
            datas.put("name", ResultName);
            db.insertOrThrow("ournames", null, datas);
            }

            private String[] SELECT = {"id", "name"};

            private Cursor ShowDATA(){
            SQLiteDatabase db = names.getReadableDatabase();
            Cursor cursor = db.query("ournames", SELECT, null, null, null, null, null);

            startManagingCursor(cursor);
            return cursor;
            }

            private void ShowDATA(Cursor cursor){
                StringBuilder builder = new StringBuilder("RESULTS!:\n");

                while(cursor.moveToNext()){

                String whatthenameis = cursor.getString((cursor.getColumnIndex("name")));
                builder.append(whatthenameis).append("\n");
                }

                TextView text = (TextView)findViewById(R.id.textView1);
                text.setText(builder);
            }

}

3 个答案:

答案 0 :(得分:3)

  

但它在myActivity.java文件中显示了“私人数据库名称”中的错误....请帮助我......它是什么?

你指的是这一行:

private DB names;

您尚未在DB中导入课程MainActivity,并且正在尝试使用它。 Eclipse无法解析对象的类,因此它在该行上显示错误。

您可以尝试Source -> Organize Imports导入正确的类。

修改

观看博客时,看起来他们在使用SQLiteOpenHelper时指的是DB的实现,显然无论谁写过这个都没试过编译它。为您的代码更改DBDBcontroller

下面:

private DBcontroller names;

在这里:

names = new DBcontroller(this);

答案 1 :(得分:0)

根据您向我们展示的代码,您没有名为DB的类。据我所知,目前没有由android提供的名为DB的现有类,因此不存在(除非你将它隐藏起来)。

这基本上只是意味着您应该用DBController替换DB,它不应该再显示该错误。为您提供正确的导入。

修改

有关代码中的解决方案,请参阅Steven Byle的回答。

我只想提供我的2美分,说明DB为什么会出错。

答案 2 :(得分:0)

db 不应该是字符串类型。 db 应该是您扩展的数据库对象 SqliteOpenHelper

Database db=new Database(getApplicationContext());

Database db=new Database(class.this);