編輯:關於Android編程
Android作為目前主流的移動操作系統,完全符合SQLite占用資源少的優勢,故在Android平台上,集成了一個嵌入式關系型數據庫—SQLite。如果想要開發 Android 應用程序,需要在 Android 上存儲數據,使用SQLite 數據庫是一種非常好的選擇。在一般程序中使用數據庫的過程都可以框架化,套路化,實例如下:
表說明:
1.班級 classes:
class_id 主鍵 class_name
2.學生 students:
student_id 主鍵 student_name score class_id 外鍵
創建表:
CREATE TABLE classes(class_id varchar(10) primary key , class_name varchar(20))
CREATE TABLE students(student_id varchar(10) primary key ,
student_name varchar(20) ,foreign key (class_id) references classes(class_id) on delete cascade on update cascade )
1. 繼承擴展 SQLiteOpenHelper 創建數據庫和對應表
package com.tang.databasedemo;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBHelper extends SQLiteOpenHelper
{
public DBHelper(Context context) {
super(context, "info.db", null, 1);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db)
{
// TODO Auto-generated method stub
String classesSQL = "CREATE TABLE classes(class_id varchar(10) primary key , " +
"class_name varchar(20))";
String studentsSQL = "CREATE TABLE students(student_id varchar(10) primary key , " +
"student_name varchar(20) ,score varchar(4) ,class_id varchar(10), " +
"foreign key (class_id) references classes(class_id) " +
"on delete cascade on update cascade )";
db.execSQL(classesSQL);
Log.d("my", "create table classes:"+classesSQL);
db.execSQL(studentsSQL);
Log.d("my", "create table students:"+studentsSQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
// TODO Auto-generated method stub
}
}
package com.tang.databasedemo;
import android.util.Log;
public class Class
{
private String classId;
private String className;
public String getClassId() {
return classId;
}
public void setClassId(String classId) {
this.classId = classId;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String toString() {
return "Class--->"+"classId:"+classId+" className:"+className;
}
}
package com.tang.databasedemo;
public class Student
{
private String studentId;
private String studentName;
private String score;
private String classId;
public String getStudentId() {
return studentId;
}
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
public String getClassId() {
return classId;
}
public void setClassId(String classId) {
this.classId = classId;
}
public String toString()
{
return "Student--->"+"studentId:"+studentId+" studentName:"+studentName+" score:"+score+" classId:"+classId;
}
}
3. 創建DBServer類,在該類中定義增刪改查等方法來操作數據庫
package com.tang.databasedemo;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DBServer
{
private DBHelper dbhelper;
public DBServer(Context context)
{
this.dbhelper = new DBHelper(context);
}
/**
* 添加班級
* @param entity
*/
public void addClass(Class entity)
{
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
Object[] arrayOfObject = new Object[2];
arrayOfObject[0] = entity.getClassId();
arrayOfObject[1] = entity.getClassName();
localSQLiteDatabase.execSQL("insert into classes(class_id,class_name) values(?,?)", arrayOfObject);
localSQLiteDatabase.close();
}
/**
* 添加學生
* @param entity
*/
public void addStudent(Student entity)
{
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
Object[] arrayOfObject = new Object[4];
arrayOfObject[0] = entity.getStudentId();
arrayOfObject[1] = entity.getStudentName();
arrayOfObject[2] = entity.getScore();
arrayOfObject[3] = entity.getClassId();
localSQLiteDatabase.execSQL("insert into students(student_id,student_name,score,class_id) values(?,?,?,?)", arrayOfObject);
localSQLiteDatabase.close();
}
/**
* 刪除一個班級
* 同時會刪除students中該班級的學生
* @param class_id
*/
public void deleteClass(String class_id)
{
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
//設置了級聯刪除和級聯更新
//在執行有級聯關系的語句的時候必須先設置“PRAGMA foreign_keys=ON”
//否則級聯關系默認失效
localSQLiteDatabase.execSQL("PRAGMA foreign_keys=ON");
Object[] arrayOfObject = new Object[1];
arrayOfObject[0] =class_id;
localSQLiteDatabase.execSQL("delete from classes where class_id=?", arrayOfObject);
localSQLiteDatabase.close();
}
/**
* 刪除一個學生
* @param student_id
*/
public void deleteStudent(String student_id)
{
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
Object[] arrayOfObject = new Object[1];
arrayOfObject[0] =student_id;
localSQLiteDatabase.execSQL("delete from students where student_id=?", arrayOfObject);
localSQLiteDatabase.close();
}
/**
* 修改學生信息
* @param entity
*/
public void updateStudentInfo(Student entity)
{
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
Object[] arrayOfObject = new Object[4];
arrayOfObject[0] = entity.getStudentName();
arrayOfObject[1] = entity.getScore();
arrayOfObject[2] = entity.getClassId();
arrayOfObject[3] = entity.getStudentId();
localSQLiteDatabase.execSQL("update students set student_name=?,score=?,class_id=? where student_id=?", arrayOfObject);
localSQLiteDatabase.close();
}
/**
* 使用班級編號查找該班級所有學生
* @param classId
* @return
*/
public List findStudentsByClassId(String classId)
{
List localArrayList=new ArrayList();
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
Cursor localCursor = localSQLiteDatabase.rawQuery("select student_id, student_name ,score from students " +
"where class_id=? order by score desc", new String[]{classId});
while (localCursor.moveToNext())
{
Student temp=new Student();
temp.setStudentId(localCursor.getString(localCursor.getColumnIndex("student_id")));
temp.setStudentName(localCursor.getString(localCursor.getColumnIndex("student_name")));
temp.setScore(localCursor.getString(localCursor.getColumnIndex("score")));
temp.setClassId(classId);
localArrayList.add(temp);
}
localSQLiteDatabase.close();
return localArrayList;
}
/**
* 使用班級名查找該班級所有學生
* @param className
* @return
*/
public List findStudentsByClassName(String className)
{
List localArrayList=new ArrayList();
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
Cursor localCursor = localSQLiteDatabase.rawQuery("select student_id, student_name,score,classes.class_id from students,classes" +
" where students.class_id=classes.class_id and classes.class_name =? order by score asc" , new String[]{className});
while (localCursor.moveToNext())
{
Student temp=new Student();
temp.setStudentId(localCursor.getString(localCursor.getColumnIndex("student_id")));
temp.setStudentName(localCursor.getString(localCursor.getColumnIndex("student_name")));
temp.setScore(localCursor.getString(localCursor.getColumnIndex("score")));
temp.setClassId(localCursor.getString(3));
localArrayList.add(temp);
}
localSQLiteDatabase.close();
return localArrayList;
}
/**
* 查找所有學生
* @param className
* @return
*/
public List findAllStudents()
{
List localArrayList=new ArrayList();
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
Cursor localCursor = localSQLiteDatabase.rawQuery("select * from students " +
"where 1=1 order by score desc ", null);
while (localCursor.moveToNext())
{
Student temp=new Student();
temp.setStudentId(localCursor.getString(localCursor.getColumnIndex("student_id")));
temp.setStudentName(localCursor.getString(localCursor.getColumnIndex("student_name")));
temp.setScore(localCursor.getString(localCursor.getColumnIndex("score")));
temp.setClassId(localCursor.getString(localCursor.getColumnIndex("class_id")));
localArrayList.add(temp);
}
localSQLiteDatabase.close();
return localArrayList;
}
/**
* 取得所有班級
* @return
*/
public List findAllClasses()
{
List localArrayList=new ArrayList();
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
Cursor localCursor = localSQLiteDatabase.rawQuery("select * from classes " +
"where 1=1", null);
while (localCursor.moveToNext())
{
Class temp=new Class();
temp.setClassId(localCursor.getString(localCursor.getColumnIndex("class_id")));
temp.setClassName(localCursor.getString(localCursor.getColumnIndex("class_name")));
localArrayList.add(temp);
}
localSQLiteDatabase.close();
return localArrayList;
}
/**
* 成績最好
* @return
*/
public Student findMaxScoreStudent()
{
Student temp =new Student();
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
Cursor localCursor = localSQLiteDatabase.rawQuery("select student_id,student_name,class_id,max(score) from students " +
"where 1=1",null );
localCursor.moveToFirst();
temp.setStudentId(localCursor.getString(0));
temp.setStudentName(localCursor.getString(1));
temp.setClassId(localCursor.getString(2));
temp.setScore(localCursor.getString(3));
return temp;
}
/**
* 查找是否有該學生
* @param studentId
* @return
*/
public boolean isStudentsExists(String studentId)
{
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
Cursor localCursor = localSQLiteDatabase.rawQuery("select count(*) from students " +
"where student_id=?", new String[]{studentId});
localCursor.moveToFirst();
if(localCursor.getLong(0)>0)
return true;
else
return false;
}
/**
* 確認該班級是否存在
* @param classId
* @return
*/
public boolean isClassExists(String s)
{
SQLiteDatabase localSQLiteDatabase = this.dbhelper.getWritableDatabase();
Cursor localCursor = localSQLiteDatabase.rawQuery("select count(*) from classes " +
"where class_id=? or class_name=?", new String[]{s,s});
localCursor.moveToFirst();
if(localCursor.getLong(0)>0)
return true;
else
return false;
}
}
4.調用DBServer裡的方法,操作數據
package com.tang.databasedemo;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.text.AlteredCharSequence;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
private List classData =new ArrayList();
private List studentsData =new ArrayList();
private static final String className ="A/B/C/D/E";
private static final String studentName ="彭大/黃二/張三/李四/王五/鄭六/田七/周八/葉九/孔十/蕭十一";
private DBServer db;
private SharedPreferences share;
private SharedPreferences.Editor editor;
private String info ="";
private EditText editText;
private Button b,b1,b2,b3,b4,b5,b6;
private EditText sId,sName,score,cId,cName;
private Handler hander =new Handler()
{
@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
if(msg.what==0)
{
sId.setText("");
sName.setText("");
score.setText("");
cName.setText("");
cId.setText("");
}
else if(msg.what==1)
{
db.deleteClass((String)msg.obj);
info += "刪除一個班級及班級裡面的學生:班級Id:"+(String)msg.obj;
editText.setText(info);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
share = getSharedPreferences("DatabaseDamo", 0);
editor =share.edit();
db=new DBServer(this);
if(share.getInt("times", 0)==0)
{
initDatabase();
editor.putInt("times", 1);
editor.commit();
}
}
private void initView()
{
editText = (EditText) findViewById(R.id.info);
sId = (EditText) findViewById(R.id.studentId);
sName = (EditText) findViewById(R.id.studentName);
score = (EditText) findViewById(R.id.score);
cId = (EditText) findViewById(R.id.classId);
cName = (EditText) findViewById(R.id.className);
b =(Button) findViewById(R.id.button);
b1 =(Button) findViewById(R.id.button1);
b2 =(Button) findViewById(R.id.button2);
b3 =(Button) findViewById(R.id.button3);
b4 =(Button) findViewById(R.id.button4);
b5 =(Button) findViewById(R.id.button5);
b6 =(Button) findViewById(R.id.button6);
b.setOnClickListener(this);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
b3.setOnClickListener(this);
b4.setOnClickListener(this);
b5.setOnClickListener(this);
b6.setOnClickListener(this);
}
private void initDatabase()
{
info="";
editText.setText("");
String []classTemp = className.split("/");
Class c;
for(int i=0;i
附圖一張:

<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHN0cm9uZz7XoqO6PC9zdHJvbmc+PC9wPgo8cD4xIC4gudjT2tPOseqjqEN1cnNvcqOpPC9wPgo8cD4gICAg1Nqy6dGvt7W72LXEysfSu7j2Q3Vyc29ywODQzbXEttTP86Osy/zKx9K7uPbWuNXro6zH0tPA1La2vLK7u+HOqr/Vo6zL+dLUo6y1sbLp0a/Es9PvvuSjrLKixdC2z7e1u9gmIzIwNTQwO8rHt/HOqr/VyrGjrMfQzvDTw2N1cnNvcj09bnVsbLHtyr6ho7b409C49re9t6gsY3Vyc29yLmdldENvdW50KCk9PTC+zcTcxdC2z8bkveG5+yYjMjA1NDA7yse38c6qv9XBy6GjPGJyPgo8L3A+CjxwPmNsb3NlKCkgPGJyPgq52LHV086x6qOsys23xdfK1LQgPGJyPgpjb3B5U3RyaW5nVG9CdWZmZXIoaW50IGNvbHVtbkluZGV4LCBDaGFyQXJyYXlCdWZmZXIgYnVmZmVyKSB5Qjxicj4K1Nq7urPlx/jW0Lzsy/fH68fztcTB0LXEzsSxvqOsvau9q8bktOa0oiA8YnI+CmdldENvbHVtbkNvdW50KCkgPGJyPgq3tbvYy/nT0MHQtcTX3Mr9IDxicj4KZ2V0Q29sdW1uSW5kZXgoU3RyaW5nIGNvbHVtbk5hbWUpIDxicj4Kt7W72Na4tqjB0LXEw/uzxqOsyOe5+7K7tObU2re1u9gtMSA8YnI+CmdldENvbHVtbkluZGV4T3JUaHJvdyhTdHJpbmcgY29sdW1uTmFtZSkgPGJyPgq008Hjv6rKvLe1u9jWuLaowdDD+7PGo6zI57n7sru05tTavavF17P2SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uINLss6OhoyA8YnI+CmdldENvbHVtbk5hbWUoaW50IGNvbHVtbkluZGV4KSA8YnI+CrTTuPi2qLXEy/fS/be1u9jB0MP7IDxicj4KZ2V0Q29sdW1uTmFtZXMoKSA8YnI+Cre1u9jSu7j219a3+7Suyv3X6bXEwdDD+yA8YnI+CmdldENvdW50KCkgPGJyPgq3tbvYQ3Vyc29yINbQtcTQ0Mr9IDxicj4KbW92ZVRvRmlyc3QoKSA8YnI+CtLGtq+54rHqtb212tK70NAgPGJyPgptb3ZlVG9MYXN0KCkgPGJyPgrSxravueKx6rW91+6689K70NAgPGJyPgptb3ZlVG9OZXh0KCkgPGJyPgrSxravueKx6rW9z8LSu9DQIDxicj4KbW92ZVRvUG9zaXRpb24oaW50IHBvc2l0aW9uKSA8YnI+CtLGtq+54rHqtb3Su7j2vvi21LXEzrvWwyA8YnI+Cm1vdmVUb1ByZXZpb3VzKCkgPGJyPgrSxravueKx6rW9yc/Su9DQPGJyPgo8L3A+CjxwPjIuILnY09o8c3Ryb25nPm9uIGRlbGV0ZSBjYXNjYWRlIG9uIHVwZGF0ZSBjYXNjYWRlPC9zdHJvbmc+ILy2waq4/NDCus28tsGqyb6z/TwvcD4KPHA+ICAgU1FMaXRl1NozLjYuMTmw5rG+1tCyxb+qyrzWp7PWzeK8/NS8yvijrLWrysfOqsHLvObI3dLUx7C1xLPM0PKjrMSsyM+yosO709DG9NPDuMO5psTco6zI57n70qrG9NPDuMO5psTcw7+0zra80qrQ6NKqyrnTw8jnz8LT777ko7pQUkFHTUEgZm9yZWlnbl9rZXlzID0gT07AtLTyv6qho9Kyvs3Kx8u1o6zU2ta00NDJvrP90ru49rDgvLa1xNPvvuS1xMqxuvLQ6NKq1rTQ0GRiLmV4ZWNTUUwo"PRAGMA foreign_keys=ON")
可見:http://blog.csdn.net/tangnengwu/article/details/25980263
可執行代碼:
http://download.csdn.net/detail/tangnengwu/7369503
如何利用工具提高你的Android代碼質量(Checkstyle、Findbugs、PMD)
在這篇文章中,我將通過不同的自動化工具如CheckStyle,FindBugs,PMD以及Android Lint來介紹(如何)提高你的安卓代碼質量。通過自動化的方式檢查
Android - ToDoList(定制ArrayAdapter)
ToDoList(定制ArrayAdapter) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/
怎樣防止App在後台運行,點擊應用桌面圖標重新啟動?
在項目中,遇到一個問題百思不得其解,那就是:我在app使用過程中,點擊了home鍵,然後去看看微信之類的其他應用,這個時候再點擊app桌面的圖標,這個時候app是重新啟動
Android開發環境搭建時遇到問題的解決方法
Android開發環境搭建時遇到問題的解決方法 錯誤1: The connection to adb is down, and a severe error ha