⑴ 如何進行Android資料庫操作
在自己Android資料庫接收或發出一個系統action的時候,要名副其實。比如你響應一個view動作,做的確實edit的勾當,你發送一個pick消息,其實你想讓別人做edit的事,這樣都會造成混亂。
一個好的習慣是創建一個輔助類來簡化你的Android資料庫交互。考慮創建一個資料庫適配器,來添加一個與資料庫交互的包裝層。它應該提供直觀的、強類型的方法,如添加、刪除和更新項目。資料庫適配器還應該處理查詢和對創建、打開和關閉資料庫的包裝。
它還常用靜態的Android資料庫常量來定義表的名字、列的名字和列的索引。下面的代碼片段顯示了一個標准資料庫適配器類的框架。它包括一個sqliteOpenHelper類的擴展類,用於簡化打開、創建和更新資料庫。
import android.content.Context; import android.database.*; import android.database.sqlite.*; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.util.Log; public class MyDBAdapter { // The name and column index of each column in your database. public static final String KEY_NAME=」name」; public static final int NAME_COLUMN = 1; // TODO: Create public field for each column in your table. // SQL Statement to create a new database. private static final String DATABASE_CREATE = 「create table 「 + DATABASE_TABLE + 「 (「 + KEY_ID + 「 integer primary key autoincrement, 「 + KEY_NAME + 「 text not null);」; // Variable to hold the database instance private SQLiteDatabase db; // Context of the application using the database. private final Context context; // Database open/upgrade helper private myDbHelper dbHelper; public MyDBAdapter(Context _context) { context = _context; dbHelper = new myDbHelper(context, DATABASE_NAME, null, DATABASE_VERSION); } public MyDBAdapter open() throws SQLException { db = dbHelper.getWritableDatabase(); return this; } public void close() { db.close(); } public long insertEntry(MyObject _myObject) { ContentValues contentValues = new ContentValues(); // TODO fill in ContentValues to represent the new row return db.insert(DATABASE_TABLE, null, contentValues); } public boolean removeEntry(long _rowIndex) { return db.delete(DATABASE_TABLE, KEY_ID + 「=」 + _rowIndex, null) > 0; } public Cursor getAllEntries () { return db.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_NAME}, null, null, null, null, null); } public MyObject getEntry(long _rowIndex) { MyObject objectInstance = new MyObject(); // TODO Return a cursor to a row from the database and // use the values to populate an instance of MyObject return objectInstance; } public int updateEntry(long _rowIndex, MyObject _myObject) { String where = KEY_ID + 「=」 + _rowIndex; ContentValues contentValues = new ContentValues(); // TODO fill in the ContentValue based on the new object return db.update(DATABASE_TABLE, contentValues, where, null); } private static class myDbHelper extends SQLiteOpenHelper { public myDbHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); } // Called when no database exists in // disk and the helper class needs // to create a new one. @Override public void onCreate(SQLiteDatabase _db) { _db.execSQL(DATABASE_CREATE); }
⑵ Android SQLite3資料庫操作問題
Android中對於SQLite3資料庫的操作如下:
1、建立資料庫
SQLiteDatabasemDatabase;
mDatabase
=
openOrCreateDatabase(
"my_sqlite_database.db」,
SQLiteDatabase.CREATE_IF_NECESSARY,
null
);
2、配置屬性
mDatabase.setVersion(1);
mDatabase.setLocale(Locate.getDefault());
mDatabase.setLockingEnable(true);
3、建表
CREATETABLE
tb_test
(
idINTEGER
PRIMARYKEY
AUTOINCREMENT,
firstnameTEXT,
lastnameTEXT
);
4、資料庫操作
insert(Peoplepeople)用來添加一條數據
queryAllData()用來獲取全部數據
queryOneData(long
id)根據id獲取一條數據
deleteAllData()用來刪除全部數據
deleteOneData(long
id)根據id刪除一條數據
updateOneData(long
id
,
People
people)根據id更新一條數據
⑶ Android 安卓資料庫操作和通知
public class DBHelper extends SQLiteOpenHelper { public static final String TB_NAME = "mydemo_user"; public static final String ID = "_id"; public static final String NAME = "username"; public static final String PASSWORD = "passname"; public static final String ISCHECK = "ischecked"; //當前版本 public static int version = 1; /** * 構造函數 * @param context Context類型,上下文對象。 * @param name String類型,資料庫的名稱 * @param factory CursorFactory類型 * @param version int類型,資料庫版本 */ public DBHelper(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version); this.getWritableDatabase(); } public void Close() { this.getWritableDatabase().close(); } /** * 創建資料庫 */ public void onCreate(SQLiteDatabase db) { db.beginTransaction(); try{ db.execSQL("CREATE TABLE IF NOT EXISTS " + TB_NAME + " (" + ID + " INTEGER PRIMARY KEY," + NAME + " VARCHAR," + PASSWORD + " VARCHAR," + ISCHECK + " VARCHAR)"); db.setTransactionSuccessful(); }catch (Exception e) { } finally { db.endTransaction();//此時不能關閉資料庫,不然創建資料庫完成後,資料庫不能使用 } } /** * 刪除資料庫 */ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TB_NAME); onCreate(db); } /** * 添加新用戶 * @param name * @param number */ public void addUser(String username, String password,String isChecked) { ContentValues values = new ContentValues(); values.put(DBHelper.NAME, username); values.put(DBHelper.PASSWORD, password); values.put(DBHelper.ISCHECK, isChecked); this.getWritableDatabase().insert(DBHelper.TB_NAME, DBHelper.ID, values); } /** * 刪除單個用戶 * @param id */ public void delUser(int id) { this.getWritableDatabase().delete(DBHelper.TB_NAME, DBHelper.ID + " = " + id, null); } /** * 修改單個用戶 * @param id */ public void updateUser(int id,String username, String password,String isChecked) { ContentValues values = new ContentValues(); values.put(DBHelper.NAME, username); values.put(DBHelper.PASSWORD, password); values.put(DBHelper.ISCHECK, isChecked); String where = DBHelper.ID+"=?";//設置條件 String[] whereValue = {Integer.toString(id)};//設置條件中的參數 this.getWritableDatabase().update(DBHelper.TB_NAME, values, where, whereValue); } /** * 刪除多個用戶 */ public void delAllUser() { this.getWritableDatabase().delete(DBHelper.TB_NAME, null, null); } /** * 查詢 * @param username * @return */ public List<Users> queryUser(String username){ List<Users> data = new ArrayList<Users>(); String[] columns = { DBHelper.ID, DBHelper.NAME, DBHelper.PASSWORD,DBHelper.ISCHECK }; String[] parms = { username }; String where = DBHelper.NAME + "=?";// 設置條件 Cursor result=null; if(username!=null){ result = this.getWritableDatabase().query(DBHelper.TB_NAME,columns, where, parms, null, null, null); }else{ result = this.getWritableDatabase().query(DBHelper.TB_NAME,columns, null, null, null, null, null); } result.moveToFirst();//移動到第一行 while (!result.isAfterLast()) {//遍歷數據 Users user = new Users(result.getInt(0), result.getString(1),result.getString(2), result.getString(3)); data.add(user); result.moveToNext(); } result.close(); return data; } }
⑷ android程序中如何直接操作遠程伺服器上的資料庫
直接操作是辦不到的,而且這樣很不安全。
有方法達到你想要的效果,具體如下。
建議:在客戶端和服務端之間寫一個自己的通信協議。
比如:客戶端要更改、刪除服務端的數據,就給服務端發送一個報文:「刪除」+表名+條件。
服務端這么接到後,就調用服務端的程序,將接到的報文轉化為sql語句執行即可。
簡單的一個流程就是上面那樣子啦,有點像QQ和QQ伺服器的一個交互過程。
補充:如果樓主對TCP/IP協議比較了解的話,上面的過程可以輕松實現。現實中的應用例子也是這樣,誰也不會讓Client直接操作資料庫的,那無異於自殺。
⑸ android怎麼操作sqlite資料庫
SQLite 一個非常流行的嵌入式資料庫,它支持 SQL 語言,並且只利用很少的內存就有很好的性能。此外它還是開源的,任何人都可以使用它。許多開源項目((Mozilla, PHP, Python)都使用了 SQLite.
Android 開發中使用 SQLite 資料庫
Activites 可以通過 Content Provider 或者 Service 訪問一個資料庫。下面會詳細講解如果創建資料庫,添加數據和查詢資料庫。
創建資料庫
Android 不自動提供資料庫。在 Android 應用程序中使用 SQLite,必須自己創建資料庫,然後創建表、索引,填充數據。Android 提供了 SQLiteOpenHelper 幫助你創建一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕松的創建資料庫。SQLiteOpenHelper 類根據開發應用程序的需要,封裝了創建和更新資料庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實現三個方法:
構造函數,調用父類 SQLiteOpenHelper 的構造函數。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的游標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化數據。
onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一個舊的版本號和一個新的版本號,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。
⑹ 請簡單描述 android中資料庫操作的一般步驟
先寫一個類繼承SQLiteOpenHelper,然後在onCreate用db.execSQL創建資料庫,要調用資料庫的時候先new一個DataBaseHelper,並用SQLiteDatabase去獲取DataBaseHelper的寫或者讀操作就行了
⑺ Android資料庫操作表的兩種方法,通過sql 語句法和谷歌提供的api 方法進行比較情況如何
DirverManager類:是JDBC的管理層,作用於用戶和驅動之間。該類負責注冊和載入JDBC驅動。
Connection介面:代表與資料庫的鏈接,並擁有創建SQL語句的方法,以完成基本的SQL操作,同時為資料庫事務提供提交和回滾方法。如:上面的例子就是鏈接到了TestData資料庫。
Statement介面:用於執行不帶參數的簡單SQL語句。創建Statement實例對象後可以調用JDBC提供的3種執行SQL語句的方法:
(1)executeUpdate()方法,一般用於執行SQL的INSERT,DELETE,UPDATE語句
(2)executeQuery()方法,一般用於執行SQL的SELECT語句,因為 它的返回值是執行SQL語句後產生的一個ResultSet介面的實例(結果集)
(3)execute()方法,即一般它執行的SQL語句既有查詢又有更新值,約等於executeUpdate()和executeQuery()兩個方法的合輯。
PreparedStatement介面:它與Statement 的主要區別
(1)它包含的SQL語句是預編譯的,所以當多次執行一條SQL語句時用它會更快
(2)在設置參數是可以用「?」代替。如:
PreparedStatement pstmt=conn.preparedStatement(insert into test values(?,?));
pstmt.setString(1,'gg');
pstmt.setString(2,'123');
ResultSet介面:包含了Statement和PreparedStatement的executeQuery方法中SELECT的結果集。相當於用它來讀取資料庫里每列的值。
DatabaseMetaData介面:主要是用來得到資料庫的相關信息的。如:資料庫版本啊
ResultSetMetaData介面:主要是用來獲取資料庫中表的相關信息的。如:表的行數啊。,謝謝
⑻ 如何進行Android資料庫操作
Android資料庫操作類實例
實體類:UserInfo.java
package my.db;
import java.io.Serializable;
import android.graphics.drawable.Drawable;
public class UserInfo implements Serializable {
public static final String ID = "_id";
public static final String USERID = "userId";
public static final String TOKEN = "token";
public static final String TOKENSECRET = "tokenSecret";
public static final String USERNAME = "userName";
public static final String USERICON = "userIcon";
private String id;
private String userId; // 用戶id
private String token;
private String tokenSecret;
private String userName;
private Drawable userIcon;
//getter and setter省略
}
SqliteHelper類:
package my.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class SqliteHelper extends SQLiteOpenHelper{
//用來保存UserID、Access Token、Access Secret的表名
public static final String TB_NAME= "users";
public SqliteHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
//創建表
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL( "CREATE TABLE IF NOT EXISTS "+
TB_NAME+ "("+
UserInfo. ID+ " integer primary key,"+
UserInfo. USERID+ " varchar,"+
UserInfo. TOKEN+ " varchar,"+
UserInfo. TOKENSECRET+ " varchar,"+
UserInfo. USERNAME+ " varchar,"+
UserInfo. USERICON+ " blob"+
")"
);
Log. e("Database" ,"onCreate" );
}
//更新表
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL( "DROP TABLE IF EXISTS " + TB_NAME );
onCreate(db);
Log. e("Database" ,"onUpgrade" );
}
//更新列
public void updateColumn(SQLiteDatabase db, String oldColumn, String newColumn, String typeColumn){
try{
db.execSQL( "ALTER TABLE " +
TB_NAME + " CHANGE " +
oldColumn + " "+ newColumn +
" " + typeColumn
);
} catch(Exception e){
e.printStackTrace();
}
}
}
CRUD類DataHelper:
package my.db;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
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.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.util.Log;
public class DataHelper {
// 資料庫名稱
private static String DB_NAME = "weibo.db";
// 資料庫版本
private static int DB_VERSION = 2;
private SQLiteDatabase db;
private SqliteHelper dbHelper;
public DataHelper(Context context) {
dbHelper = new SqliteHelper(context, DB_NAME, null, DB_VERSION );
db = dbHelper.getWritableDatabase();
}
public void Close() {
db.close();
dbHelper.close();
}
// 獲取users表中的UserID、Access Token、Access Secret的記錄
public List<UserInfo> GetUserList(Boolean isSimple) {
List<UserInfo> userList = new ArrayList<UserInfo>();
Cursor cursor = db.query(SqliteHelper. TB_NAME, null, null , null, null,
null, UserInfo. ID + " DESC");
cursor.moveToFirst();
while (!cursor.isAfterLast() && (cursor.getString(1) != null )) {
UserInfo user = new UserInfo();
user.setId(cursor.getString(0));
user.setUserId(cursor.getString(1));
user.setToken(cursor.getString(2));
user.setTokenSecret(cursor.getString(3));
if (!isSimple) {
user.setUserName(cursor.getString(4));
ByteArrayInputStream stream = new ByteArrayInputStream(cursor.getBlob(5));
Drawable icon = Drawable.createFromStream(stream, "image");
user.setUserIcon(icon);
}
userList.add(user);
cursor.moveToNext();
}
cursor.close();
return userList;
}
// 判斷users表中的是否包含某個UserID的記錄
public Boolean HaveUserInfo(String UserId) {
Boolean b = false;
Cursor cursor = db.query(SqliteHelper. TB_NAME, null, UserInfo.USERID
+ "=?", new String[]{UserId}, null, null, null );
b = cursor.moveToFirst();
Log. e("HaveUserInfo", b.toString());
cursor.close();
return b;
}
// 更新users表的記錄,根據UserId更新用戶昵稱和用戶圖標
public int UpdateUserInfo(String userName, Bitmap userIcon, String UserId) {
ContentValues values = new ContentValues();
values.put(UserInfo. USERNAME, userName);
// BLOB類型
final ByteArrayOutputStream os = new ByteArrayOutputStream();
// 將Bitmap壓縮成PNG編碼,質量為100%存儲
userIcon.compress(Bitmap.CompressFormat. PNG, 100, os);
// 構造SQLite的Content對象,這里也可以使用raw
values.put(UserInfo. USERICON, os.toByteArray());
int id = db.update(SqliteHelper. TB_NAME, values, UserInfo.USERID + "=?" , new String[]{UserId});
Log. e("UpdateUserInfo2", id + "");
return id;
}
// 更新users表的記錄
public int UpdateUserInfo(UserInfo user) {
ContentValues values = new ContentValues();
values.put(UserInfo. USERID, user.getUserId());
values.put(UserInfo. TOKEN, user.getToken());
values.put(UserInfo. TOKENSECRET, user.getTokenSecret());
int id = db.update(SqliteHelper. TB_NAME, values, UserInfo.USERID + "="
+ user.getUserId(), null);
Log. e("UpdateUserInfo", id + "");
return id;
}
// 添加users表的記錄
public Long SaveUserInfo(UserInfo user) {
ContentValues values = new ContentValues();
values.put(UserInfo. USERID, user.getUserId());
values.put(UserInfo. TOKEN, user.getToken());
values.put(UserInfo. TOKENSECRET, user.getTokenSecret());
Long uid = db.insert(SqliteHelper. TB_NAME, UserInfo.ID, values);
Log. e("SaveUserInfo", uid + "");
return uid;
}
// 添加users表的記錄
public Long SaveUserInfo(UserInfo user, byte[] icon) {
ContentValues values = new ContentValues();
values.put(UserInfo. USERID, user.getUserId());
values.put(UserInfo. USERNAME, user.getUserName());
values.put(UserInfo. TOKEN, user.getToken());
values.put(UserInfo. TOKENSECRET, user.getTokenSecret());
if(icon!= null){
values.put(UserInfo. USERICON, icon);
}
Long uid = db.insert(SqliteHelper. TB_NAME, UserInfo.ID, values);
Log. e("SaveUserInfo", uid + "");
return uid;
}
// 刪除users表的記錄
public int DelUserInfo(String UserId) {
int id = db.delete(SqliteHelper. TB_NAME,
UserInfo. USERID + "=?", new String[]{UserId});
Log. e("DelUserInfo", id + "");
return id;
}
public static UserInfo getUserByName(String userName,List<UserInfo> userList){
UserInfo userInfo = null;
int size = userList.size();
for( int i=0;i<size;i++){
if(userName.equals(userList.get(i).getUserName())){
userInfo = userList.get(i);
break;
}
}
return userInfo;
}
}
⑼ android 怎麼往資料庫裡面添加數據
一、引入
資料庫創建的問題解決了,接下來就該使用資料庫實現應用程序功能的時候了。基
本的操作包括創建、讀取、更新、刪除,即我們通常說的 CRUD(Create, Read, Update, Delete)。
在實現這些操作的時候,我們會使用到兩個比較重要的類 SQLiteDatabase 類和 Cursor 類。
二、創建表
1,execSQL(String sql):執行一條 sql 語句,且執行操作不能為 SELECT
因為它的返回值為 void,所以推薦使用 insert、update 方法等
2.,execSQL (String sql,Object[] bindArgs)
sql:執行一條 sql 語句
bindArgs:為 sql 語句中的?賦值
三、添加數據
1、execSQL(String sql)
2、使用對象的 insert 方法
ContentValues values = new ContentValues();
values.put(USERNAME, user.getUsername());
values.put(PASSWORD, user.getPassword());
db.insert(TABLE_NAME, null, values);
參數:
table:資料庫中的表名
nullColumnHack:指定默認插入欄位,為 null 時能插入數據
values:表示插入欄位所對應的值,使用 put 方法。
四、刪除數據
1、execSQL(String sql)
2、使用對象的 delete 方法
String whereClaues="_id=?";
String [] whereArgs={String.valueOf(id)};
//db.delete(TABLE_NAME, "_id="+id, null);
db.delete(TABLE_NAME, whereClaues, whereArgs);
參數
table:資料庫的表名
whereClause:where 子句,比如:_id=?
whereArgs:where 子句中?的值
五、修改數據
1、execSQL(String sql)
2、使用對象的 delete 方法
ContentValues values = new ContentValues();
values.put(USERNAME, user.getUsername());
values.put(PASSWORD, user.getPassword());
String whereClaues="_id=?";
String [] whereArgs={String.valueOf(user.getId())};
db.update(TABLE_NAME, values, whereClaues, whereArgs);
參數
table:資料庫的表名
values:代表要修改的值,修改方法還是 put(key,values)
whereClause:條件子句,比如 id=?,name=?
whereArgs:為 whereClause 中的?賦值,比如:new String[]{"1","張三"}
圖:
參考代碼:
程序內使用SQLite資料庫是通過SQLiteOpenHelper進行操作
1.自己寫個類繼承SQLiteOpenHelper,重寫以下3個方法
publicvoidonCreate(SQLiteDatabasedb)
{//創建資料庫時的操作,如建表}
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)
{
//版本更新的操作
}
2.通過SQLiteOpenHelper的getWritableDatabase()獲得一個SQLiteDatabase資料庫,以後的操作都是對SQLiteDatabase進行操作。
3.對得到的SQLiteDatabase對象進行增,改,刪,查等操作。
代碼
packagecx.myNote;
importandroid.content.ContentValues;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.database.Cursor;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteOpenHelper;
//DBOptionsforlogin
publicclassDBOptions{
privatestaticfinalStringDB_NAME="notes.db";
privatestaticfinalStringDB_CREATE="createtablelogininf(nametext,pwdtext)";
{
publicDBHelper(Contextcontext){
super(context,DB_NAME,null,1);
}
@Override
publicvoidonCreate(SQLiteDatabasedb){
//TODOAuto-generatedmethodstub
//建表
db.execSQL(DB_CREATE);
}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
//TODOAuto-generatedmethodstub
db.execSQL("droptableifexistslogininf");
onCreate(db);
}
}
privateContextcontext;
privateSQLiteDatabasedb;
privateDBHelperdbHelper;
publicDBOptions(Contextcontext)
{
this.context=context;
dbHelper=newDBHelper(context);
db=dbHelper.getReadableDatabase();
}
//自己寫的方法,對資料庫進行操作
publicStringgetName()
{
Cursorcursor=db.rawQuery("selectnamefromlogininf",null);
cursor.moveToFirst();
returncursor.getString(0);
}
publicintchangePWD(StringoldP,Stringpwd)
{
ContentValuesvalues=newContentValues();
values.put("pwd",pwd);
returndb.update("logininf",values,"pwd="+oldP,null);
}
}
insert方法插入的一行記錄使用ContentValus存放,ContentValues類似於Map,它提供了put(String key, Xxx value)(其中key為數據列的列名)方法用於存入數據、getAsXxxx(String key)方法用於取出數據
⑽ 如何在android中使用sqlite資料庫
android 中SQliteDatabase資料庫使用SQLiteOpenHelper輔助類來創建SQLite資料庫視圖,如下代碼:
create view 表名 as 定義
SQLiteOpenHelper類是一個輔助類,用於創建或打開資料庫。
該類的使用方法一般是自定義一個子類,繼承自SQLiteOpenHelper,並覆寫其中最關鍵的兩個方法:onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。當新建一個資料庫時會調用前者,一般在裡面做一些創建表或視圖的操作。資料庫版本升級時則會調用後者。
定義好子類後(假如叫SqlHelper),只要調用SqlHelper對象的getReadableDatabase()方法或getWritableDatabase()方法即可返回一個SQLiteDatabase對象。如果是第一次調用,則會創建資料庫。隨後可使用SQLiteDatabase對象的方法進行數據操作,如:execSQL(), insert(), update(), query(), rawQuery(), delete()等。