1.运行效果图
2.代码
MainActivity.java
package cn.edu.bzu.sqlite;
import android.os.Bundle;
import android.util.Log;
import android.app.Activity;
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;
public class MainActivity extends Activity {
private MyDatabaseHelper dbHelper;
// @SuppressWarnings("unused")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 4);
Button createDatabase = (Button) findViewById(R.id.create_database);
Button addData = (Button) findViewById(R.id.add_data);
Button updateData = (Button) findViewById(R.id.update_data);
Button deleteData = (Button) findViewById(R.id.delete_data);
Button queryData = (Button) findViewById(R.id.query_data);
createDatabase.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dbHelper.getWritableDatabase();
}
});
addData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
// start to fix the first data
values.put("name", "The Da Vinci Code");
values.put("author", "Dan Brown");
values.put("pages", 454);
values.put("price", 16.96);
db.insert("Book", null, values);// insert the first data
values.clear();
// start to fix the second data
values.put("name", "The Blue Ocean");
values.put("author", "Yuki son");
values.put("pages", 123);
values.put("price", 7.8);
db.insert("Book", null, values);// insert the second data
values.clear();
}
});
updateData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price", 9.99);
db.update("Book", values, "name=?", new String[] { "The Da Vinci Code" });
}
});
deleteData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("Book", " pages > ?", new String[] { "123" });
}
});
queryData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SQLiteDatabase db = dbHelper.getWritableDatabase();
//search all the datas' of this table
Cursor cursor = db.query("Book", null, null, null, null, null, null);
if(cursor.moveToFirst()){do{
//go through "Cursor",get the data and print it
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
Log.d("MainActivity", "book name is"+name);
Log.d("MainActivity","book author is"+author);
Log.d("MainActivity","book pages is"+pages);
Log.d("MainActivity", "book price"+price);
}while(cursor.moveToNext());
}cursor.close();
}
});
}
}
MyDatabaseHelper.java
package cn.edu.bzu.sqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; import android.widget.Toast; public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK = "create table book(id integer primary key autoincrement, " + "author text," + "price real," + "pages integer," + "name text)"; public static final String CREATR_CATEGORY = "create table Category(id integer primary key autoincrement," + "category_name text," + "category_code integer)"; private Context mContext; public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub mContext = context; } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL(CREATE_BOOK); db.execSQL(CREATR_CATEGORY); Toast.makeText(mContext, "Create succeeded", Toast.LENGTH_SHORT).show(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub db.execSQL("drop table if exists book"); db.execSQL("drop table if exists category"); onCreate(db); } }
SQLiteOpenHelperActivity.java
package cn.edu.bzu.sqlite; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class SQLiteOpenHelperActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sqlite_open_helper); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.sqlite_open_helper, menu); return true; } }
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:orientation = "vertical" > <Button android:id="@+id/create_database" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/btn" /> <Button android:id="@+id/add_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/create_database" android:layout_centerHorizontal="true" android:text="@string/btn2" /> <Button android:id="@+id/update_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/add_data" android:layout_centerHorizontal="true" android:text="@string/btn3" /> <Button android:id="@+id/delete_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/update_data" android:layout_centerHorizontal="true" android:text="@string/btn4" /> <Button android:id="@+id/query_data" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/delete_data" android:layout_centerHorizontal="true" android:text="@string/btn5" /> </RelativeLayout>
activity_sqlite_open_helper.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=".SQLiteOpenHelperActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
Strings.xml
3.遇到的问题及心得体会<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">SQLite</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="title_activity_sqlite_open_helper">SQLiteOpenHelperActivity</string> <string name="title_activity_main">MainActivity</string> <string name="btn">Create database</string> <string name="btn2">Add data</string> <string name="btn3">Update data</string> <string name="btn4">Delete data</string> <string name="btn5">Query data</string> </resources>
<1>因为自己手敲的代码,没有用系统自己生成的,所以在写Cursor代码段的时候,把Cursor打成了Cusor,出现了错误,反复检查了好多遍都没有检查出来,浪费了很多时间。所以,以后可以用快捷键生成的尽量不会用手打了,因为人的习惯,自己检查的时候很难检查出来。
<2>另外,因为我修改环境变量的时候把原有的path给全部删掉了,并且没有备份,所以再次启动eclipse的时候,出现了异常,检索不到模拟器的文件的路径,后来又添加了classpath,和homepath,重新修改了path,才算解决了问题。所以以后修改路径时,要么多做一份备份,要么把要添加的路径用%缀在后面,不然会像这次一样遇到很多不必要的麻烦。
<3>还有,今天才遇到,不然很可能会一直不知道。我运行程序的时候,没有选中模拟器,所以logcat和FileExplore都没有记录。