android数据库的查询问题android的数据库练习,根据资料写下了如下代码,但是却一直不成功:Java codepackage
android数据库的查询问题
android的数据库练习,根据资料写下了如下代码,但是却一直不成功:
- Java code
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"); } }主要是查询的问题~ 创建数据库、创建表、插入数据应该是成功了的,但是查询却一直查不到结果~~
或许是我查询的方法不对?
望大牛指点…… 不胜感激!
[解决办法]
number是关键字,数据库字段尽量用两个单词。
[解决办法]
android规定数据库中的表必须有一个字段叫做_id,而且必须作为主键。你检查一遍你的建表语句是不是有问题。另外,这样创建的数据库太不专业了,android提供了SQLiteOpenHelper类,很好的管理了android数据库的增删查改操作,建议用此类管理你的数据库~
[解决办法]
这是我做CRUD的例子,你参考下
- Java code
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"}); } }}
[解决办法]
不好意思,下面的说法不准确,可以没有_id,但是Android SDK 推荐的方法是:为了统一,在提供数据表字段中包含一个_id。
[解决办法]
_id不是必须的。
但是用adaper等进行数据库操作的时候,是必须的。否则有些功能方法无法使用
