android的数据库练习,根据资料写下了如下代码,但是却一直不成功:package barry.android.db;import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteCursorDriver;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteQuery;
import android.os.Bundle;public class Demo03Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); /*创建数据库*/
SQLiteDatabase myDB = this.openOrCreateDatabase("db.db",
MODE_PRIVATE, new CursorFactory() {
@Override
public Cursor newCursor(SQLiteDatabase db,
SQLiteCursorDriver masterQuery, String editTable,
SQLiteQuery query) {
return null;
}
});

/*创建表*/
String createTableSql = "CREATE TABLE test(_idd INTEGER primary key autoincrement, number text)";
myDB.execSQL(createTableSql);

/*插入数据*/
String insertDataSql = "INSERT INTO test(_idd,number) VALUES(1,678)";
myDB.execSQL(insertDataSql);

/*查询*/
Cursor cursor = myDB.rawQuery("SELECT * FROM test", null);
if(cursor==null){
System.out.println("NULLLLLLLLLLLLLLLLLL");
}else{
if(cursor.moveToFirst()){
System.out.println(cursor.toString());
System.out.println(cursor.getInt(0));
}
}

/*删除数据库*/
this.deleteDatabase("db.db"); }
    
}
主要是查询的问题~      创建数据库、创建表、插入数据应该是成功了的,但是查询却一直查不到结果~~
或许是我查询的方法不对?
望大牛指点…… 不胜感激!

解决方案 »

  1.   

    number是关键字,数据库字段尽量用两个单词。
      

  2.   

    改成其他字段依然如此,比如改成someNumber,最后程序的运行结果依然是打印“NULLLLLLLLLLLLLLLLLLLLLLLL”……
    而且我把最后删除数据库的语句去掉时,再运行程序,会提示我“表已存在”或者“该字段主键已存在~”,说明插入是成功的,只是查询出了问题……
      

  3.   

    android规定数据库中的表必须有一个字段叫做_id,而且必须作为主键。你检查一遍你的建表语句是不是有问题。另外,这样创建的数据库太不专业了,android提供了SQLiteOpenHelper类,很好的管理了android数据库的增删查改操作,建议用此类管理你的数据库~
      

  4.   

    这是我做CRUD的例子,你参考下import android.app.Activity;
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;public class AndroidsqlitedbActivity extends Activity {
        /** Called when the activity is first created. */
    private Button create;
    private Button insert;
    private Button update;
    private Button query;
    private Button delete;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            create = (Button)findViewById(R.id.create);
            insert = (Button)findViewById(R.id.insert);
            update = (Button)findViewById(R.id.update);
            query = (Button)findViewById(R.id.query);
            delete = (Button)findViewById(R.id.delete);
            
            create.setOnClickListener(new CreateListener());
            insert.setOnClickListener(new InsertListener());
            update.setOnClickListener(new UpdateListener());
            query.setOnClickListener(new QueryListener());
            delete.setOnClickListener(new DeleteListener());
        }
        
            
        @Override
    protected void onDestroy() {
    super.onDestroy();
    //释放和数据库的连接
          //  db.close(); }
    /**
         * 创建数据库
         * @author Owner
         *
         */
        class CreateListener implements OnClickListener { @Override
    public void onClick(View v) {
    DatabaseHelper dbHelper = new DatabaseHelper(AndroidsqlitedbActivity.this, "test_sqlite_db");
    dbHelper.getReadableDatabase();
    }
        
        }
        
        /**
         * 插入一条记录
         * @author Owner
         *
         */
        class InsertListener implements OnClickListener { @Override
    public void onClick(View v) {
    DatabaseHelper dbHelper = new DatabaseHelper(AndroidsqlitedbActivity.this, "test_sqlite_db");
    ContentValues values = new ContentValues();
    values.put("id", 1);
    values.put("name", "LiXiaoLong");
    values.put("password", "12345");
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    db.insert("user", null, values);
    }
        }
        
        /**
         * 更新一条记录
         * @author Owner
         *
         */
        class UpdateListener implements OnClickListener { @Override
    public void onClick(View v) {
    ContentValues values = new ContentValues();
    values.put("name", "ZhangXiaoLong");
    DatabaseHelper dbHelper = new DatabaseHelper(AndroidsqlitedbActivity.this, "test_sqlite_db");
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    db.update("user", values, "id=?", new String[]{"1"});
    }
        
        }
        
        /**
         * 查询记录
         * @author Owner
         *
         */
        class QueryListener implements OnClickListener { @Override
    public void onClick(View v) {
    DatabaseHelper dbHelper = new DatabaseHelper(AndroidsqlitedbActivity.this, "test_sqlite_db");
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    Cursor cursor = db.query("user", new String[]{"id","name","password"}, "id=?", new String[]{"1"}, null,null,null);

    while(cursor.moveToNext()) {
    String name = cursor.getString(cursor.getColumnIndex("name"));
    String password = cursor.getString(cursor.getColumnIndex("password"));
    System.out.println(" name: " + name + "password: " + password);
    }

    }
        
        }
        
        /**
         * 查询一条记录
         * @author Owner
         *
         */
        class DeleteListener implements OnClickListener { @Override
    public void onClick(View v) {
    DatabaseHelper dbHelper = new DatabaseHelper(AndroidsqlitedbActivity.this, "test_sqlite_db");
    SQLiteDatabase db = dbHelper.getWritableDatabase();
    db.delete("user", "id=?", new String[]{"1"});
    }
        
        }
    }
      

  5.   


    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;public class DatabaseHelper extends SQLiteOpenHelper {
    public static final int VERSION = 1; public DatabaseHelper(Context context, String name, CursorFactory factory,int version) {
    super(context, name, factory, version);
    } public DatabaseHelper(Context context,String name,int version) {
    this(context,name,null,version);
    }

    public DatabaseHelper(Context context,String name) {
    this(context,name,VERSION);
    }

    /**
     * 在调用下面方法时 getWritableDatabase(),
     * getReadableDatabase() 调用该方法
     */
    @Override
    public void onCreate(SQLiteDatabase sqlitedb) {
    System.out.println("create database");
    sqlitedb.execSQL("create table user(id int,name varchar(20),password varchar(20))");
    } @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    System.out.println("update database");
    }}
      

  6.   

    谢谢,用SQLiteOpenHelper成功了~
    但是我的表中没用_id字段,你去顶必须有这个主键么? 或者是如果没有显示指定的话它会默认自动生成一个_id?
      

  7.   

    不好意思,下面的说法不准确,可以没有_id,但是Android  SDK 推荐的方法是:为了统一,在提供数据表字段中包含一个_id。
      

  8.   

    _id不是必须的。
    但是用adaper等进行数据库操作的时候,是必须的。否则有些功能方法无法使用