android 移动开发 SQLitedatabase嵌入轻级数据库 解决方案1
2014-05-08 21:14
513 查看
SQLitedatabase
1.调用环境下的openOrCreateDataBase(name,mode,factory)返回SQLitedatabase对象
2.调用对象执行execSQL()执行sql语句。如创建表。此方法不推荐用在CRUD上,具体请看源代码
3.close方法是关闭数据库的方法,对于不同Activity之间不允许有一个库的多个实例,看源代码可知-------线程安全
4.存在于 data/data/packagename/databases目录下
一。vo包
二。service包
四。splite包
1.调用环境下的openOrCreateDataBase(name,mode,factory)返回SQLitedatabase对象
2.调用对象执行execSQL()执行sql语句。如创建表。此方法不推荐用在CRUD上,具体请看源代码
3.close方法是关闭数据库的方法,对于不同Activity之间不允许有一个库的多个实例,看源代码可知-------线程安全
4.存在于 data/data/packagename/databases目录下
一。vo包
package baidu.sqlite.vo; public class User { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public User(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } }
package baidu.sqlite.vo; public class EditTextInput { private String now_name; private int now_age; public String getNow_name() { return now_name; } public void setNow_name(String now_name) { this.now_name = now_name; } public int getNow_age() { return now_age; } public void setNow_age(int now_age) { this.now_age = now_age; } public EditTextInput() { super(); } public EditTextInput(String now_name, int now_age) { super(); this.now_name = now_name; this.now_age = now_age; } }
二。service包
package baidu.sqlite.service; import com.example.sqlite.R; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import baidu.sqlite.DBhandle.StatementHandle; public class ServiceHelp { public static SQLiteDatabase sqliteDB; public static String HelpDBtableName; /** * * @param con * 传入具体的上下文环境。 * @param DBname * 要创建数据库的名称。 * @param mode * context的具体模式。 * @return */ // 开始时加载数据库 public static void BeginLoadingDB(Context con, String DBname, int mode) { Log.e("serviceHelp", "执行了biginloadingDB"); sqliteDB = con.openOrCreateDatabase(DBname, mode, null); Log.e("serviceHelp", "执行了内部openOrcreatedatabase"); } /** * * @param DBtableName * 输入具体的数据库表名 * @throws Exception * 数据实例为空抛出异常 */ // 而后创建或者打开原有表 public static void DBCreateTable(String DBtableName) throws Exception { if (sqliteDB != null) { HelpDBtableName = DBtableName; sqliteDB.execSQL("DROP TABLE IF EXISTS " + DBtableName); sqliteDB.execSQL("CREATE TABLE " + DBtableName + "(_id INTEGER PRIMARY KEY AUTOINCREMENT , name VARCHAR , age INTEGER)"); } else { new Exception("sqliteDB没有实例化,请先保证数据库被加载,参考方法BeginLoadingDB()"); } } // 最后插入,删除等语句的执行 /** * * @param DBhandleName * 输入的动作,输入 如insert,updata,select,delete四种以判断具体想要的动作 * @param sqliteDBname * 输入 被实例化的数据库 而后数据库对象操作具体的动作在statementHandle类中进行 处理 */ public static void ExecSQLstatement(String DBhandleName,Context context) { if (DBhandleName.equals("insert")) { StatementHandle.insertData(sqliteDB, HelpDBtableName); } if (DBhandleName.equals("select")) { StatementHandle.selectData(sqliteDB, HelpDBtableName,context); } if (DBhandleName.equals("update")) { StatementHandle.updateData(sqliteDB, HelpDBtableName); } if (DBhandleName.equals("delete")) { StatementHandle.deleteData(sqliteDB, HelpDBtableName); } } public static void loadDATAeti() { // TODO Auto-generated method stub StatementHandle.loadDATAeti(); } }三。DBhandle包
package baidu.sqlite.DBhandle; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.database.Cursor; import android.view.LayoutInflater; import android.view.View; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import com.example.sqlite.R; public class FloatWindow { public void inflateFacilitate(Context context, Cursor c) { View view = LayoutInflater.from(context).inflate(R.layout.item_dalog, null); ListView list = (ListView) view.findViewById(R.id.item_list); SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(context, R.layout.item_layout, c, new String[] { "_id", "name", "age" }, new int[] { R.id.item_id, R.id.item_name, R.id.item_age }); list.setAdapter(cursorAdapter); DialogHelper(view, context); } public void DialogHelper(View view,Context context){ new AlertDialog.Builder(context) .setIcon(R.drawable.ic_launcher) .setTitle("查询结果!") .setView(view) .setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }).create().show(); } }
package baidu.sqlite.DBhandle; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import baidu.sqlite.SqlitMainActivity; import baidu.sqlite.vo.User; public class StatementHandle { private static String tidyName; private static int tidyage; /** * 此方法是为了每次输入的值是不确定的, * 如果点击按钮每次点击后写入的值是不同的所以, * 点击按钮就要调用此方法 * 以保证数据的及时更新 */ public static void loadDATAeti() { tidyName = SqlitMainActivity.eti.getNow_name(); tidyage = SqlitMainActivity.eti.getNow_age(); } /** * @param sqliteDBname insert方法插入要表明的数据库名 * @param table 要插入数据的表名 */ public static void insertData(SQLiteDatabase sqliteDBname, String table) { ContentValues cv = new ContentValues(); cv.put("name", tidyName); cv.put("age", tidyage); sqliteDBname.insert(table, null, cv); } /** * @param sqliteDBname select方法插入要表明的数据库名 * @param table 要插入数据的表名 */ public static void selectData(SQLiteDatabase sqliteDBname, String table,Context context) { Cursor cursor = sqliteDBname.rawQuery("select * from " + table, null); new FloatWindow().inflateFacilitate(context, cursor); // List<User> list = new ArrayList<User>(); // while (cursor.moveToNext()) { // int id = cursor.getInt(cursor.getColumnIndex("_id")); // String name = cursor.getString(cursor.getColumnIndex("name")); // int age = cursor.getInt(cursor.getColumnIndex("age")); // User user = new User(id, name, age); // list.add(user); // } } /** *@param sqliteDBname delete方法插入要表明的数据库名 * @param table 要插入数据的表名 */ public static void deleteData(SQLiteDatabase sqliteDBname, String table) { sqliteDBname.delete(table, "name = ?", new String[] { tidyName }); } /** *@param sqliteDBname update方法插入要表明的数据库名 * @param table 要插入数据的表名 */ public static void updateData(SQLiteDatabase sqliteDBname, String table) { Log.e("修改", "runing"); ContentValues values = new ContentValues(); values.put("age", tidyage); sqliteDBname.update(table, values, "name = ?",new String[] { tidyName }); } }
四。splite包
package baidu.sqlite; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import baidu.sqlite.DBhandle.StatementHandle; import baidu.sqlite.service.ServiceHelp; import baidu.sqlite.vo.EditTextInput; import com.example.sqlite.R; public class SqlitMainActivity extends Activity { private Button insertData, selectData, updataData, deleteData; private EditText inputName, inputAge; public static EditTextInput eti; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.spick); inputAge = (EditText) findViewById(R.id.age); deleteData = (Button) findViewById(R.id.deleteData); insertData = (Button) findViewById(R.id.insertInto); selectData = (Button) findViewById(R.id.selectData); updataData = (Button) findViewById(R.id.UpdataData); inputName = (EditText) findViewById(R.id.name); try { ServiceHelp.BeginLoadingDB(SqlitMainActivity.this, "son.db", Context.MODE_WORLD_READABLE); ServiceHelp.DBCreateTable("utills"); } catch (Exception e) { e.printStackTrace(); } deleteData.setOnClickListener(ls); insertData.setOnClickListener(ls); selectData.setOnClickListener(ls); updataData.setOnClickListener(ls); } OnClickListener ls = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub int ages=Integer.parseInt(inputAge.getText().toString()); eti = new EditTextInput(inputName.getText().toString(),ages); ServiceHelp.loadDATAeti(); if (v.getId() == R.id.deleteData) { ServiceHelp.ExecSQLstatement("delete",SqlitMainActivity.this); } if (v.getId() == R.id.insertInto) { ServiceHelp.ExecSQLstatement("insert",SqlitMainActivity.this); } if (v.getId() == R.id.selectData) { ServiceHelp.ExecSQLstatement("select",SqlitMainActivity.this); } if (v.getId() == R.id.UpdataData) { ServiceHelp.ExecSQLstatement("update",SqlitMainActivity.this); } } }; }
相关文章推荐
- Android开发:SQLiteDatabaseLockedException异常的解决方案(SQLite单例模式)
- android数据库操作出现的 android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
- Android开发—数据库应用—手动创建(SQLite)数据库--手动创建数据表(table)
- 【android开发记录片】3.数据库SQLite 的对象封装
- Android开发—数据库应用—访问数据表(SQLite OpenHelper) —查询单条记录、修改
- Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作
- Android获取操作数据库的SQLiteDatabase实例
- 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程第14门课程:Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&HTML5架构设计与实战开发
- 【Android游戏开发十三】(保存游戏数据 [下文])详解SQLite存储方式,并把SQLite的数据库文件存储在SD卡中!!!
- android.database.sqlite.databaseobjectnotclosedexception:应用程序没有关闭的光标或数据库对象
- Android开发 SQLite 通过.db文件导入已有数据库
- Android 数据库SQLiteDatabase的使用
- Android开发中使用SQLite 数据库
- Android 开发中使用 SQLite 数据库
- 【android开发记录片】3.数据库SQLite 的对象封装
- Android 开发中 SQLite 数据库的使用
- Objective-C ,ios,iphone开发基础:ios数据库(The SQLite Database),使用终端进行简单的数据库操作
- Android 开发中使用 SQLite 数据库
- Android 开发中使用 SQLite 数据库
- android.database.sqlite.SQLiteException: near "order": syntax error (code 1):数据库报错