manifest.xml:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.iwanghang.sqlitedemo"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 插入对话框 --> <activity android:name="com.iwanghang.sqlitedemo.dialog.InsertDialog" android:theme="@android:style/Theme.Dialog" > </activity> <!-- 删除对话框 --> <activity android:name="com.iwanghang.sqlitedemo.dialog.DeleteDialog" android:theme="@android:style/Theme.Dialog" > </activity> <!-- 更新对话框 --> <activity android:name="com.iwanghang.sqlitedemo.dialog.UpdateDialog" android:theme="@android:style/Theme.Dialog" > </activity> </application> </manifest>MainActivity.java:
package com.iwanghang.sqlitedemo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ListView; import android.widget.Toast; import com.iwanghang.sqlitedemo.dialog.DeleteDialog; import com.iwanghang.sqlitedemo.dialog.InsertDialog; import com.iwanghang.sqlitedemo.dialog.UpdateDialog; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity implements View.OnClickListener { private SQLiteHelper db; private ListAdapter listAdapter; /** * 插入请求代码 */ private static final int INSERT_REQUESTCODE = 1; /** * 插入结果代码 */ private static final int INSERT_RESULTCODE = 1; /** * 删除请求代码 */ private static final int DELETE_REQUESTCODE = 2; /** * 删除结果代码 */ private static final int DELETE_RESULTCODE = 2; /** * 修改请求代码 */ private static final int UPDATE_REQUESTCODE = 3; /** * 修改结果代码 */ private static final int UPDATE_RESULTCODE = 3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); db = new SQLiteHelper(this, "mileage.db", null, 1); init(); } private void init() { findViewById(R.id.btn_insert).setOnClickListener(this); findViewById(R.id.btn_delete).setOnClickListener(this); findViewById(R.id.btn_update).setOnClickListener(this); findViewById(R.id.btn_query).setOnClickListener(this); listAdapter = new ListAdapter(new ArrayList<Mileage>(), this); findViewById(R.id.list_data, ListView.class).setAdapter(listAdapter); } private <T> T findViewById(int id, Class<T> c) { return (T) findViewById(id); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_insert: // 插入 insert(); break; case R.id.btn_delete: // 删除 delete(); break; case R.id.btn_update: // 修改 update(); break; case R.id.btn_query: // 查询 query(); break; } } /** * 添加 */ private void insert() { Intent intent = new Intent(this, InsertDialog.class); startActivityForResult(intent, INSERT_REQUESTCODE); } /** * 删除 */ private void delete() { Intent intent = new Intent(this, DeleteDialog.class); startActivityForResult(intent, DELETE_REQUESTCODE); } /** * 更新 */ private void update() { Intent intent = new Intent(this, UpdateDialog.class); startActivityForResult(intent, UPDATE_REQUESTCODE); } /** * 查询 */ private void query() { List<Mileage> list = db.queryAllMileage(); // 查询所有的Mileage loadData(list); // 加载数据到ListView上面 } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case INSERT_REQUESTCODE: if (resultCode == INSERT_RESULTCODE) { // 插入请求 if (data != null) { db.addMileage((Mileage) data.getSerializableExtra("mileage")); showMessage("插入成功!"); query(); } else { showMessage("取消插入!"); } } break; case DELETE_REQUESTCODE: if (resultCode == DELETE_RESULTCODE) { // 删除请求 if (data != null) { int _id = data.getIntExtra("_id", -1); if (_id != -1) { if (db.queryMileageById(_id) != null) { db.deleteMileage(_id); showMessage("删除成功!"); query(); } else { showMessage("删除失败\t_id:" + _id + "不存在!"); } } else { showMessage("删除失败!"); } } else { showMessage("取消删除!"); } } break; case UPDATE_REQUESTCODE: if (resultCode == UPDATE_RESULTCODE) { // 修改请求 if (data != null) { Mileage mileage = (Mileage) data .getSerializableExtra("mileage"); int _id = mileage.get_id(); if (db.queryMileageById(mileage.get_id()) != null) { db.updateMileage(mileage); showMessage("修改成功!"); query(); } else { showMessage("修改失败\t_id:" + _id + "不存在!"); } } else { showMessage("取消修改!"); } } break; } } /** * 显示消息 * * @param msg * 消息 */ private void showMessage(String msg) { Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); } /** * 加载数据到ListView * * @param list * Person集合 */ private void loadData(List<Mileage> list) { listAdapter.setList(list); listAdapter.notifyDataSetChanged(); // 刷新数据 } }Mileage.java:
package com.iwanghang.sqlitedemo; import java.io.Serializable; /** * 里程 Mileage */ public class Mileage implements Serializable { /** * 序列化的版本号 */ private static final long serialVersionUID = 1L; /** * 组件 */ private int _id; /** * 出发值 mileageSetOut */ private String mileageSetOut; /** * 开始值 mileageStart */ private String mileageStart; /** * 结束值 mileageEnd */ private String mileageEnd; /** * set方法 * get方法 */ public int get_id() { return _id; } public void set_id(int _id) { this._id = _id; } public String getMileageSetOut() { return mileageSetOut; } public void setMileageSetOut(String mileageSetOut) { this.mileageSetOut = mileageSetOut; } public String getMileageStart() { return mileageStart; } public void setMileageStart(String mileageStart) { this.mileageStart = mileageStart; } public String getMileageEnd() { return mileageEnd; } public void setMileageEnd(String mileageEnd) { this.mileageEnd = mileageEnd; } }SQLiteHelper.java:
package com.iwanghang.sqlitedemo; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import java.util.ArrayList; import java.util.List; /** * 数据库创建、更新 */ public class SQLiteHelper extends SQLiteOpenHelper { /** * @param context * 上下文 * @param name * 数据库名称 * @param factory * 游标工厂 * @param version * 数据库版本 */ public SQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } // 创建数据库 @Override public void onCreate(SQLiteDatabase db) { Log.e("SqliteHelper", "数据库创建"); String sql = "create table mileage(_id integer Primary Key autoincrement,mileageSetOut varchar(20)" + ", mileageStart varchar(20),mileageEnd varchar(20))"; db.execSQL(sql); } // 数据库更新 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.e("SqliteHelper", "数据库更新"); } /** * 添加Mileage到数据库 * * @param mileage * Mileage */ public void addMileage(Mileage mileage) { Log.e("SqliteHelper", "插入"); SQLiteDatabase db = getWritableDatabase(); // 以读写的形式打开数据库 // 插入数据库 db.execSQL( "insert into mileage(mileageSetOut,mileageStart,mileageEnd) values(" + String.format("'%s'", mileage.getMileageSetOut()) + "," + String.format("'%s'", mileage.getMileageStart()) + "," + String.format("'%s'", mileage.getMileageEnd()) + ");" ); // 插入数据库 db.close(); // 关闭数据库连接 } /** * 更新Mileage * * @param mileage * Mileage */ public void updateMileage(Mileage mileage) { Log.e("SqliteHelper", "更新"); SQLiteDatabase db = getWritableDatabase(); // 以读写的形式打开数据库 String sql = "update mileage set" + " mileageSetOut=" + String.format("'%s'", mileage.getMileageSetOut()) + ",mileageStart=" + String.format("'%s'", mileage.getMileageStart()) + ",mileageEnd=" + String.format("'%s'", mileage.getMileageEnd()) + " where _id=" + mileage.get_id(); Log.e("updateMileage", sql); db.execSQL(sql); // 更新数据库 db.close(); // 关闭数据库连接 } /** * 删除Mileage * * @param _id * Mileage的id */ public void deleteMileage(int _id) { Log.e("SqliteHelper", "删除"); SQLiteDatabase db = getWritableDatabase(); // 以读写的形式打开数据库 String sql = "_id = ?"; String wheres[] = { String.valueOf(_id) }; db.delete("mileage", sql, wheres); // 数据库删除 db.close(); // 关闭数据库 } /** * 查询所有的Mileage * * @return 所有Mileage集合 */ public List<Mileage> queryAllMileage() { List<Mileage> list = new ArrayList<Mileage>(); SQLiteDatabase db = getReadableDatabase(); // 以只读的方式打开数据库 String sql = "select * from mileage;"; Cursor cursor = db.rawQuery(sql, null); while (cursor.moveToNext()) { int _id = cursor.getInt(cursor.getColumnIndex("_id")); String mileageSetOut = cursor.getString(cursor.getColumnIndex("mileageSetOut")); String mileageStart = cursor.getString(cursor.getColumnIndex("mileageStart")); String mileageEnd = cursor.getString(cursor.getColumnIndex("mileageEnd")); Mileage mileage = new Mileage(); mileage.set_id(_id); mileage.setMileageSetOut(mileageSetOut); mileage.setMileageStart(mileageStart); mileage.setMileageEnd(mileageEnd); list.add(mileage); // 添加到数组 } cursor.close(); // 关闭游标 db.close(); // 关闭数据库 return list; } /** * 根据id查询Mileage * * @param _id * id * @return Mileage */ public Mileage queryMileageById(int _id) { Mileage mileage = null; SQLiteDatabase db = getReadableDatabase(); // 以只读方式打开数据库 String[] columns = { "_id", "mileageSetOut", "mileageStart", "mileageEnd" }; String selection = "_id=?"; String[] selectionArgs = { String.valueOf(_id) }; Cursor cursor = db.query("mileage", columns, selection, selectionArgs, null, null, null); if (cursor.moveToNext()) { mileage = new Mileage(); mileage.set_id(cursor.getInt(cursor.getColumnIndex("_id"))); mileage.setMileageSetOut(cursor.getString(cursor.getColumnIndex("mileageSetOut"))); mileage.setMileageSetOut(cursor.getString(cursor.getColumnIndex("mileageStart"))); mileage.setMileageEnd(cursor.getString(cursor.getColumnIndex("mileageEnd"))); } return mileage; } }ListAdapter.java:
package com.iwanghang.sqlitedemo; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; public class ListAdapter extends BaseAdapter { private List<Mileage> list; private LayoutInflater inflater; public ListAdapter(List<Mileage> list, Context context) { this.list = list; this.inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public void setList(List<Mileage> list) { this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) convertView = inflater.inflate(R.layout.activity_main_list1, null); TextView idView = (TextView) convertView.findViewById(R.id.text_id); TextView setOutView = (TextView) convertView.findViewById(R.id.editTextSetOut); TextView startView = (TextView) convertView.findViewById(R.id.editTextStart); TextView endView = (TextView) convertView.findViewById(R.id.editTextEnd); Mileage Mileage = list.get(position); idView.setText(String.valueOf(Mileage.get_id())); setOutView.setText(Mileage.getMileageSetOut()); startView.setText(Mileage.getMileageStart()); endView.setText(Mileage.getMileageEnd()); return convertView; } }InsertDialog.java:
package com.iwanghang.sqlitedemo.dialog; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.EditText; import com.iwanghang.sqlitedemo.Mileage; import com.iwanghang.sqlitedemo.R; /** * 插入对话框 */ public class InsertDialog extends Activity implements View.OnClickListener { /** * 插入请求代码 大于0 */ private static final int INSERT_REQUESTCODE = 1; /** * 出发值控件 */ private EditText setOutView; /** * 开始值控件 */ private EditText startView; /** * 结束值控件 */ private EditText endView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉标题栏 setContentView(R.layout.insert_dialog); init(); } private void init() { findViewById(R.id.insert_confirm).setOnClickListener(this); findViewById(R.id.insert_cancel).setOnClickListener(this); setOutView = (EditText) findViewById(R.id.insert_edit_setOut); startView = (EditText) findViewById(R.id.insert_edit_start); endView = (EditText) findViewById(R.id.insert_edit_end); } @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.insert_confirm: confirm(); // 确认插入 break; case R.id.insert_cancel: cancel(); // 取消插入 break; } } /** * 确认插入 */ private void confirm() { String mileageSetOut = String.valueOf(setOutView.getText()); String mileageStart = String.valueOf(startView.getText()); String mileageEnd = String.valueOf(endView.getText()); Mileage mileage = new Mileage(); mileage.setMileageSetOut(mileageSetOut); mileage.setMileageStart(mileageStart); mileage.setMileageEnd(mileageEnd); Intent intent = new Intent(); intent.putExtra("mileage", mileage); setResult(INSERT_REQUESTCODE, intent); finish(); } /** * 取消插入 */ private void cancel() { setResult(INSERT_REQUESTCODE); finish(); } }UpdateDialog.java:
package com.iwanghang.sqlitedemo.dialog; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.EditText; import com.iwanghang.sqlitedemo.Mileage; import com.iwanghang.sqlitedemo.R; /** * 修改对话框 */ public class UpdateDialog extends Activity implements View.OnClickListener { /** * 修改请求代码 */ private static final int UPDATE_REQUESTCODE = 3; /** * id控件 */ private EditText idView; /** * 出发值控件 */ private EditText setOutView; /** * 开始值控件 */ private EditText startView; /** * 结束值控件 */ private EditText endView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉标题栏 setContentView(R.layout.update_dialog); init(); } private void init() { findViewById(R.id.update_confirm).setOnClickListener(this); findViewById(R.id.update_cancel).setOnClickListener(this); idView = (EditText) findViewById(R.id.update_edit_id); setOutView = (EditText) findViewById(R.id.update_edit_setOut); startView = (EditText) findViewById(R.id.update_edit_start); endView = (EditText) findViewById(R.id.update_edit_end); } @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.update_confirm: confirm(); // 确认修改 break; case R.id.update_cancel: cancel(); // 取消修改 break; } } /** * 确认修改 */ private void confirm() { int _id = Integer.valueOf(String.valueOf(idView.getText())); String mileageSetOut = String.valueOf(setOutView.getText()); String mileageStart = String.valueOf(startView.getText()); String mileageEnd = String.valueOf(endView.getText()); Mileage mileage = new Mileage(); mileage.set_id(_id); mileage.setMileageSetOut(mileageSetOut); mileage.setMileageStart(mileageStart); mileage.setMileageEnd(mileageEnd); Intent intent = new Intent(); intent.putExtra("mileage", mileage); setResult(UPDATE_REQUESTCODE, intent); finish(); } /** * 取消修改 */ private void cancel() { setResult(UPDATE_REQUESTCODE); finish(); } }DeleteDialog.java:
package com.iwanghang.sqlitedemo.dialog; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.EditText; import com.iwanghang.sqlitedemo.R; /** * 删除对话框 */ public class DeleteDialog extends Activity implements View.OnClickListener { /** * 插入请求代码 */ private static final int DELETE_REQUESTCODE = 2; /** * id控件 */ private EditText idView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉标题栏 setContentView(R.layout.delete_dialog); init(); } private void init() { findViewById(R.id.delete_confirm).setOnClickListener(this); findViewById(R.id.delete_cancel).setOnClickListener(this); idView = (EditText) findViewById(R.id.delete_edit_id); } @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.delete_confirm: confirm(); // 确认删除 break; case R.id.delete_cancel: cancel(); // 取消删除 break; } } /** * 确认删除 */ private void confirm() { int _id = Integer.valueOf(String.valueOf(idView.getText())); Intent intent = new Intent(); intent.putExtra("_id", _id); setResult(DELETE_REQUESTCODE, intent); finish(); } /** * 取消删除 */ private void cancel() { setResult(DELETE_REQUESTCODE); finish(); } }