Android中運算元據庫SQL語句的講解,簡單的查詢修改等操作學生類的例子講解
先要了解一個SQliteOpenHelper的類
還有一個 SQliteDatabase類
其中的兩個方法為
當我們用到 select*from時 使用的是rawQuery()方法
當我們要建立表的時間,我們用的是execSQL()方法
一.建立頁面
開始建立我們學生類,以簡單的例子來演示安卓中操作SQL語句
建立我們的主頁面為
<EditText
android:id="@+id/name_edt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/name" />
<EditText
android:id="@+id/age_edt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:hint="@string/age" />
<RadioGroup
android:id="@+id/gender_gp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="性別:"
android:layout_marginLeft="5dp"
android:layout_marginStart="5dp" />
<RadioButton
android:id="@+id/male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男"
android:checked="true"
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp" />
<RadioButton
android:id="@+id/female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RadioGroup>
<EditText
android:id="@+id/id_edt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="編號"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/insert_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="新增"
android:onClick="operate"/>
<Button
android:id="@+id/select_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="查詢"
android:onClick="operate"/>
<Button
android:id="@+id/delete_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="刪除"
android:onClick="operate"/>
<Button
android:id="@+id/update_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="修改"
android:onClick="operate"/>
</LinearLayout>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/stu_list">
</ListView>
</LinearLayout>
檢視的效果為
再寫一個listview來使得學生資訊能在下面的空白處顯示出來程式碼為
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/id_item"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/name_item"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/age_item"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/gender_item"/>
</LinearLayout>
二:編寫程式碼
主程式碼為
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.SimpleAdapter;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText nameEdt , ageEdt , idEdt;
private ListView stuList;
private RadioButton malerb;
private String genderStr = "男";
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//新增操作
//資料庫名稱
//如果只有一個資料庫名稱,那麼這個資料庫的位置會是在私有目錄中
//如果帶SD卡路徑,那麼資料庫位置則在指定的路徑下
String path = Environment.getExternalStorageDirectory() + "/stu.db";
SQLiteOpenHelper helper = new SQLiteOpenHelper(this,path,null,2) {
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//建立
Toast.makeText(MainActivity.this,"資料庫建立",Toast.LENGTH_SHORT).show();
//如果資料庫不存在,則會呼叫onCreate方法,那麼我們可以將表的建立工作放在這裡面完成
/*
String sql = "create table test_tb (_id integer primary key autoincrement," +
"name varhcar(20)," +
"age integer)";
sqLiteDatabase.execSQL(sql);*/
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
//升級
Toast.makeText(MainActivity.this,"資料庫升級",Toast.LENGTH_SHORT).show();
}
};
//用於獲取資料庫庫物件
//1.資料庫存在,則直接開啟資料庫
//2.資料庫不存在,則呼叫建立資料庫的方法,再開啟資料庫
//3.資料庫存在,但版本號升高了,則呼叫資料庫升級方法
db = helper.getReadableDatabase();
nameEdt = findViewById(R.id.name_edt);
ageEdt = findViewById(R.id.age_edt);
idEdt = findViewById(R.id.id_edt);
malerb = findViewById(R.id.male);
RadioGroup genderGp = findViewById(R.id.gender_gp);
genderGp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
if(i == R.id.male){
//“男”
genderStr = "男";
}else{
//"女"
genderStr = "女";
}
}
});
stuList = findViewById(R.id.stu_list);
}
// SQLiteOpenHelper
// SQLiteDatabase
public void operate(View v){
String nameStr = nameEdt.getText().toString();
String ageStr = ageEdt.getText().toString();
String idStr = idEdt.getText().toString();
switch (v.getId()){
case R.id.insert_btn:
// db.rawQuery(); 查詢 select * from 表名
// db.execSQL(); 新增、刪除、修改、建立表
//String sql = "insert into info_tb (name,age,gender) values ('"+nameStr+"',"+ageStr+",'"+genderStr+"')";
String sql = "insert into info_tb (name,age,gender) values (?,?,?)";
db.execSQL(sql,new String[]{nameStr,ageStr,genderStr});
Toast.makeText(this,"新增成功",Toast.LENGTH_SHORT).show();
break;
case R.id.select_btn:
//SQLiteOpenHelper
//select * from 表名 where _id = ?
String sql2 = "select * from info_tb";
if(!idStr.equals("")){
sql2 += " where _id=" + idStr;
}
//查詢結果
Cursor c = db.rawQuery(sql2,null);
//SimpleCursorAdapter
//SimpleAdapter a = new SimpleAdapter()
//引數3:資料來源
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
this, R.layout.item,c,
new String[]{"_id","name","age","gender"},
new int[]{R.id.id_item,R.id.name_item,R.id.age_item,R.id.gender_item},
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
stuList.setAdapter(adapter);
break;
case R.id.delete_btn:
//' ' "23" 23
String sql3 = "delete from info_tb where _id=?";
db.execSQL(sql3,new String[]{idStr});
Toast.makeText(this,"刪除成功",Toast.LENGTH_SHORT).show();
break;
case R.id.update_btn:
String sql4 = "update info_tb set name=? , age=? , gender=? where _id=?";
db.execSQL(sql4,new String[]{nameStr,ageStr,genderStr,idStr});
Toast.makeText(this,"修改成功",Toast.LENGTH_SHORT).show();
break;
}
nameEdt.setText("");
ageEdt.setText("");
idEdt.setText("");
malerb.setChecked(true);
}
}
解析:
程式碼中的path路徑是上一篇文章以及建立好的檔案
1:這一部分是建立的SQLiteOpenHelper類,以及裡邊的兩個自帶生成的方法,四個引數為
第一個是環境上下文,第二個是建立檔案的位置,第三個為null,第四個是這個等級,如過不是1的話就是升級。最後一行的程式碼是我們必須寫的作用在上方的主要程式碼中可以看到。
SQLiteOpenHelper helper = new SQLiteOpenHelper(this,path,null,2) {
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//建立
Toast.makeText(MainActivity.this,"資料庫建立",Toast.LENGTH_SHORT).show();
//如果資料庫不存在,則會呼叫onCreate方法,那麼我們可以將表的建立工作放在這裡面完成
/*
String sql = "create table test_tb (_id integer primary key autoincrement," +
"name varhcar(20)," +
"age integer)";
sqLiteDatabase.execSQL(sql);*/
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
//升級
Toast.makeText(MainActivity.this,"資料庫升級",Toast.LENGTH_SHORT).show();
}
};
helper.getReadableDatabase();
2:
這裡是用的是SQLitedatabase裡邊的建立表格的方法,但是在上邊我們用的是已經建立好的路徑path,所以不用這個方法
/*
String sql = "create table test_tb (_id integer primary key autoincrement," +
"name varhcar(20)," +
"age integer)";
sqLiteDatabase.execSQL(sql);*/
3:這個地方我們監視的是獲得性別的控制元件,一旦選擇我們就獲得他們的id
RadioGroup genderGp = findViewById(R.id.gender_gp);
genderGp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
if(i == R.id.male){
//“男”
genderStr = "男";
}else{
//"女"
genderStr = "女";
}
}
});
前邊的
private String genderStr = "男";
是為了防止你什麼也不選,所以就預設為男性。
下面的程式碼是監聽你的姓名,年齡以及學號id的程式碼。
String nameStr = nameEdt.getText().toString();
String ageStr = ageEdt.getText().toString();
String idStr = idEdt.getText().toString();
4:查詢的解釋
case R.id.select_btn:
//SQLiteOpenHelper
//select * from 表名 where _id = ?
String sql2 = "select * from info_tb";
if(!idStr.equals("")){
sql2 += " where _id=" + idStr;
}
//查詢結果
Cursor c = db.rawQuery(sql2,null);
//SimpleCursorAdapter
//SimpleAdapter a = new SimpleAdapter()
//引數3:資料來源
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
this, R.layout.item,c,
new String[]{"_id","name","age","gender"},
new int[]{R.id.id_item,R.id.name_item,R.id.age_item,R.id.gender_item},
CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
stuList.setAdapter(adapter);
break;
因為這裡要用到listview,所以少不了介面卡的使用,用的是SimpleCursorAdapter介面卡,這裡的引數都不能少,記住Cursor使用在介面卡中即可。
最後的操作是把我們搜查後的內容給清空,便於下一次搜查。
如此便完成了我們的簡單例子
簡單易懂!!!
相關文章
- C#運算元據庫進行簡單的增加修改操作C#
- 用最簡單的例子講解js中解決非同步的方法JS非同步
- lavavel 中運算元據庫查詢別名
- Oracle SQL精妙SQL語句講解OracleSQL
- 使用WordPress中的wpdb類運算元據庫
- 一句簡單的SQL查詢語句的背後...SQL
- Oracle SQL精妙SQL語句講解(轉)OracleSQL
- MySQL的簡單查詢語句MySql
- 利用sql語句解決簡單的數學題SQL
- ecshop運算元據庫類
- SQL Server-簡單查詢語句SQLServer
- Go語言運算元據庫及其常規操作Go
- 簡單的SQL語句學習SQL
- Oracle中SQL語句執行效率的查詢與解決 (3)OracleSQL
- Oracle中SQL語句執行效率的查詢與解決 (2)OracleSQL
- Oracle中SQL語句執行效率的查詢與解決 (1)OracleSQL
- PostgreSQL 原始碼解讀(42)- 查詢語句#27(等價類)SQL原始碼
- Go語言運算元據庫Go
- android位運算講解與實戰Android
- 簡單查詢、插入、更新、刪除SQL語句SQL
- Swift 條件語句講解Swift
- Oracle中SQL語句執行效率問題的查詢與解決OracleSQL
- 運算元據庫
- go 語言運算元據庫 CRUDGo
- MySQL關於根據日期查詢資料的sql語句MySql
- MySQL資料庫詳解(一)SQL查詢語句是如何執行的?MySql資料庫
- Java中 使用 Math 類運算元據Java
- 查詢效率低下的sql的語句SQL
- 例項講解hadoop中的map/reduce查詢(python語言實現HadoopPython
- 例項講解hadoop中的hive查詢(python語言實現)薦HadoopHivePython
- Java經典類庫-Guava中的函數語言程式設計講解JavaGuava函數程式設計
- SQL Server-簡單查詢語句,疑惑篇(三)SQLServer
- Airtest簡單上手講解AI
- 多型 簡單講解多型
- 從一個MysqL的例子來學習查詢語句(轉)MySql
- MySQL 語句大全:建立、授權、查詢、修改等MySql
- TCP、UDP、HTTP及Socket的簡單講解TCPUDPHTTP
- Python學習:運算元據庫Python