DBHelper:
package com.ruru.sqlitedemo;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by 27c1 on 2017/1/24. */public class DBHelper extends SQLiteOpenHelper { PRivate static final String DB_NAME = "TJ_DDLX.DB"; private static final int DB_VERSION = 3; public DBHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } /** * 建表(手机号和姓名) */ @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL("create table if not exists UserInfo(phone integer,name varchar(20))"); } /** * 版本更新 * * @param sqLiteDatabase * @param i-旧版本 * @param i1-新版本 */ @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { if (i < 3) { sqLiteDatabase.execSQL("drop table UserInfo"); } onCreate(sqLiteDatabase); }}Android多线程下安全访问数据库--安全的数据库并发操作:DatabaseManager:
package com.ruru.sqlitedemo;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import java.util.concurrent.atomic.AtomicInteger;/** * Created by 27c1 on 2017/2/3. * * Android多线程下安全访问数据库--安全的数据库并发操作 */public class DatabaseManager { private AtomicInteger mOpenCounter = new AtomicInteger(); private static DatabaseManager instance; private static SQLiteOpenHelper mDatabaseHelper; private static SQLiteDatabase mDatabase; public static synchronized void initializeInstance(SQLiteOpenHelper helper) { if (instance == null) { instance = new DatabaseManager(); mDatabaseHelper = helper; } } public static synchronized DatabaseManager getInstance() { if (instance == null) { throw new IllegalStateException(DatabaseManager.class.getSimpleName() + " is not initialized, call initializeInstance(..) method first."); } return instance; } public synchronized SQLiteDatabase openDatabase() { if (mOpenCounter.incrementAndGet() == 1) { // Opening new database mDatabase = mDatabaseHelper.getWritableDatabase(); } return mDatabase; } public synchronized void closeDatabase() { if (mOpenCounter.decrementAndGet() == 0) { // Closing database mDatabase.close(); } }}UserInfoDao:package com.ruru.sqlitedemo;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.util.Log;/** * Created by 27c1 on 2017/2/3. */public class UserInfoDao { private static final String TAG = "info"; private final DBHelper helper; private String tableName = "UserInfo"; /** * 初始化数据库 */ public UserInfoDao(Context context) { helper = new DBHelper(context.getapplicationContext()); DatabaseManager.initializeInstance(helper); } /** * 查询数据库中的数据 */ public int query() { String sql = "SELECT * FROM" + tableName; //打开数据库 SQLiteDatabase database = DatabaseManager.getInstance().openDatabase(); Cursor result = null; int count = 0; //Ctrl+Alt+t快捷键 try { result = database.rawQuery(sql, null); count = result.getCount();//数据库中的数据 } catch (Exception e) { e.printStackTrace(); } finally { if (result != null) { result.close(); } DatabaseManager.getInstance().closeDatabase(); } return count; } /** * 数据库中插入数据 */ public int insert(UserBean userBean) { //公共的 SQLiteDatabase database = DatabaseManager.getInstance().openDatabase(); int checks = 0; Cursor result = null; //第一种方法// ContentValues values = new ContentValues();// //key为表的属性,value为属性的值// values.put("phone", userBean.getPhone());// values.put("name", userBean.getName());// try {// database.insert(tableName, null, values);// //下面的这三行还不能去掉,否则数据没有添加成功// result = database.rawQuery("select last_insert_rowid()", null);// checks = result.getCount();// Log.i(TAG, "insert: checks===++++++++++" + checks);// } catch (Exception e) {// e.printStackTrace();// } finally {// DatabaseManager.getInstance().closeDatabase();// } //第二种方法 try { Log.i(TAG, "insert: "+"开始AAA"); String sql = "insert into " + tableName + " (phone,name) Values(?,?)"; Object args[] = new Object[]{userBean.getPhone(),userBean.getName()}; database.execSQL(sql, args); //下面的这三行还不能去掉,否则数据没有添加成功 result = database.rawQuery("select last_insert_rowid()", null); checks = result.getCount(); Log.i(TAG, "insert: checks==="+checks); } catch (Exception ex) { Log.v("exception", ex.getMessage()); } finally { if (result != null) { result.close(); } DatabaseManager.getInstance().closeDatabase(); } //公共的 return checks; }}UserBean:package com.ruru.sqlitedemo;/** * Created by 27c1 on 2017/2/3. */public class UserBean { private int phone; private String name; public UserBean() { } public int getPhone() { return phone; } public void setPhone(int phone) { this.phone = phone; } public UserBean(int phone, String name) { this.phone = phone; this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "UserBean{" + "phone=" + phone + ", name='" + name + '/'' + '}'; }}MainActiivty:package com.ruru.sqlitedemo;/** * Created by 27c1 on 2017/2/3. */public class UserBean { private int phone; private String name; public UserBean() { } public int getPhone() { return phone; } public void setPhone(int phone) { this.phone = phone; } public UserBean(int phone, String name) { this.phone = phone; this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "UserBean{" + "phone=" + phone + ", name='" + name + '/'' + '}'; }}相关网址:
Android Database 并行访问
Android中给数据库表中添加数据
Android开发之利用SQLite进行数据存储
Android studio中调出快捷键,快速try catch包括代码块
数据库int类型字段长度的含义
新闻热点
疑难解答