1、實體
package mydemo.mycom.demo2.entity; public class UserInfo { private int id; private String username; private String password; public UserInfo() { } public UserInfo(int id, String username, String password) { this.id = id; this.username = username; this.password = password; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
2.UserSQLiteOpenHelper
package mydemo.mycom.demo2.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class UserSQLiteOpenHelper extends SQLiteOpenHelper { /** * 數據庫的構造方法 用來定義數據庫的名稱 數據庫查詢的結果集 數據庫的版本 * **/ public UserSQLiteOpenHelper(Context context) { super(context, "user.db", null, 1); } /** * 數據庫第一次被創建的時候調用的方法 * db被創建的數據庫 * **/ @Override public void onCreate(SQLiteDatabase db) { //初始化數據庫的表結構 d integer primary key autoincrement, db.execSQL("create table user (id integer primary key autoincrement,username varchar(20),password varchar(20))"); } /** * 當數據庫的版本號發生變化的時候(增加的時候) 調用 * */ @Override public void onUpgrade(SQLiteDatabase db, int i, int i2) { db.execSQL("alter table user add account varchar(20)"); } }
3.JDBC的UserDAO
package mydemo.mycom.demo2.dao; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList; import java.util.List; import mydemo.mycom.demo2.db.UserSQLiteOpenHelper; import mydemo.mycom.demo2.entity.UserInfo; public class UserDao { private UserSQLiteOpenHelper helper; public UserDao(Context context) { helper = new UserSQLiteOpenHelper(context); } /** * 添加一條記錄到數據庫 * username 用戶名 * password 密碼 * * */ public void add(String username,String password) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("insert into user(username,password) values(?,?)",new String[]{username,password}); db.close(); } /** * 判斷數據庫是否存在username 的數據 * * username 用戶名 * */ public boolean findByUsername(String username) { SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.rawQuery("select * from user where username=?",new String[]{username}); boolean result = cursor.moveToNext(); db.close(); return result; } /** * 修改一條記錄 * 通過username 修改 password * * username 用戶名 * password 密碼 * * */ public void update(String username,String password) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("update user set password=? where username=?",new String[]{password,username}); db.close(); } /** * 刪除記錄 * 通過username修改一條記錄 * * username 用戶名 * */ public void delete(String username) { SQLiteDatabase db = helper.getWritableDatabase(); db.execSQL("delete from user where username=?",new String[]{username}); db.close(); } /** * 找出所有用戶信息 * */ public List<UserInfo> findAll() { SQLiteDatabase db = helper.getWritableDatabase(); List<UserInfo> list = new ArrayList<UserInfo>(); Cursor cursor = db.rawQuery("select * from user",null); while(cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("id")); String username = cursor.getString(cursor.getColumnIndex("username")); String password = cursor.getString(cursor.getColumnIndex("password")); UserInfo userInfo = new UserInfo(id,username,password); list.add(userInfo); } cursor.close(); db.close(); return list; } /** * 通過id 用戶信息 * id 用戶id * */ public UserInfo findById(int id) { SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor =db.rawQuery("select * from user where id=?",new String[]{id+""}); UserInfo user = new UserInfo(); while(cursor.moveToNext()) { int uid = cursor.getInt(cursor.getColumnIndex("id")); String username = cursor.getString(cursor.getColumnIndex("username")); String password = cursor.getString(cursor.getColumnIndex("password")); user.setId(uid); user.setPassword(password); user.setUsername(username); break; } cursor.close(); db.close(); return user; } }
4.SQLiteOpenHelper的 UserDAO
package mydemo.mycom.demo2.dao; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.util.ArrayList; import java.util.List; import mydemo.mycom.demo2.db.UserSQLiteOpenHelper; import mydemo.mycom.demo2.entity.UserInfo; /** * Created by Administrator on 2015/5/15. */ public class UserDao2 { private UserSQLiteOpenHelper helper; public UserDao2(Context context) { helper = new UserSQLiteOpenHelper(context); } /** * 添加一條記錄到數據庫 * username 用戶名 * password 密碼 * * */ public long add(String username,String password) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("username",username); values.put("password",password); long num = db.insert("user",null,values); db.close(); return num; } /** * 判斷數據庫是否存在username 的數據 * * username 用戶名 * */ public boolean findByUsername(String username) { SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.query("user",null,"username=?",new String[]{username},null,null,null); boolean result = cursor.moveToNext(); db.close(); return result; } /** * 修改一條記錄 * 通過username 修改 password * * username 用戶名 * password 密碼 * * */ public int update(String username,String password) { SQLiteDatabase db = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("password",password); int num = db.update("user",values,"username=?", new String[]{username}); db.close(); return num; } /** * 刪除記錄 * 通過username修改一條記錄 * * username 用戶名 * */ public int delete(String username) { SQLiteDatabase db = helper.getWritableDatabase(); int num = db.delete("user","username=?",new String[]{username}); db.close(); return num; } /** * 找出所有用戶信息 * */ public List<UserInfo> findAll() { SQLiteDatabase db = helper.getWritableDatabase(); List<UserInfo> list = new ArrayList<UserInfo>(); Cursor cursor = db.query("user",null,null,null,null,null,null); while(cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("id")); String username = cursor.getString(cursor.getColumnIndex("username")); String password = cursor.getString(cursor.getColumnIndex("password")); UserInfo userInfo = new UserInfo(id,username,password); list.add(userInfo); } cursor.close(); db.close(); return list; } /** * 通過id 用戶信息 * id 用戶id * */ public UserInfo findById(int id) { SQLiteDatabase db = helper.getWritableDatabase(); Cursor cursor = db.query("user",null,"id=?",new String[]{id+""},null,null,null); UserInfo user = new UserInfo(); while(cursor.moveToNext()) { int uid = cursor.getInt(cursor.getColumnIndex("id")); String username = cursor.getString(cursor.getColumnIndex("username")); String password = cursor.getString(cursor.getColumnIndex("password")); user.setId(uid); user.setPassword(password); user.setUsername(username); break; } cursor.close(); db.close(); return user; } }
5.SQLiteOpenHelper 簡單使用
package mydemo.mycom.demo2; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.text.TextUtils; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import mydemo.mycom.demo2.dao.UserDao; import mydemo.mycom.demo2.dao.UserDao2; public class Register extends ActionBarActivity implements View.OnClickListener { private EditText et_register_username; private EditText et_register_password; private Button btn_register; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); et_register_username = (EditText)findViewById(R.id.et_register_username); et_register_password = (EditText)findViewById(R.id.et_register_password); btn_register = (Button)findViewById(R.id.btn_register); btn_register.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_register, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override public void onClick(View view) { String username = et_register_username.getText().toString().trim(); String password = et_register_password.getText().toString().trim(); if(TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) { Toast.makeText(this,"用戶名和密碼不能為空",Toast.LENGTH_SHORT).show(); return; } UserDao2 userDao = new UserDao2(this); userDao.add(username,password); Toast.makeText(this,"注冊成功",Toast.LENGTH_SHORT).show(); } }
6.SQLiteOpenHelper事務管理
package mydemo.mycom.demo2.testUserDao; import android.database.sqlite.SQLiteDatabase; import android.test.AndroidTestCase; import mydemo.mycom.demo2.db.UserSQLiteOpenHelper; public class TestUserInfo extends AndroidTestCase{ private String s; public void testTransaction() throws Exception { UserSQLiteOpenHelper helper = new UserSQLiteOpenHelper(getContext()); SQLiteDatabase db = helper.getWritableDatabase(); //開始數據庫的事務 db.beginTransaction(); try{ db.execSQL("update user set account=account-1000 where id=1"); //空指針異常 s.equals("123"); db.execSQL("update user set account=account+1000 where id=2"); //提交事務 db.setTransactionSuccessful(); } catch(Exception ex) { } finally { //結束事務 db.endTransaction(); db.close(); } } }
