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使用在介面卡中即可。
最後的操作是把我們搜查後的內容給清空,便於下一次搜查。
如此便完成了我們的簡單例子
簡單易懂!!!
相關文章
- Oracle SQL精妙SQL語句講解OracleSQL
- 用最簡單的例子講解js中解決非同步的方法JS非同步
- lavavel 中運算元據庫查詢別名
- SQL Server-簡單查詢語句SQLServer
- MySQL的簡單查詢語句MySql
- 簡單的SQL語句學習SQL
- android位運算講解與實戰Android
- PostgreSQL 原始碼解讀(42)- 查詢語句#27(等價類)SQL原始碼
- MySQL資料庫詳解(一)SQL查詢語句是如何執行的?MySql資料庫
- 例項講解hadoop中的map/reduce查詢(python語言實現HadoopPython
- MySQL關於根據日期查詢資料的sql語句MySql
- Go語言運算元據庫及其常規操作Go
- Swift 條件語句講解Swift
- 根據emp,dept,salgrade表進行的sql查詢語句(1)SQL
- SpringBoot切面Aop的demo簡單講解Spring Boot
- Android中使用LitePal運算元據庫Android
- mysql查詢效率慢的SQL語句MySql
- SQL單表查詢語句總結SQL
- MySql和簡單的sql語句MySql
- Python學習:運算元據庫Python
- 運算元據庫
- TCP、UDP、HTTP及Socket的簡單講解TCPUDPHTTP
- [20240607]PL/SQL中sql語句的註解.txtSQL
- 多型 簡單講解多型
- 簡單易懂講註解
- Airtest簡單上手講解AI
- 最簡單的sql語句(增刪改查統計)SQL
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- 在mysql查詢效率慢的SQL語句MySql
- Laravel 框架查詢執行的 SQL 語句Laravel框架SQL
- SQL基礎的查詢語句烈鉍SQL
- Android Rxjava :最簡單&全面背壓講解 (Flowable)AndroidRxJava
- SQL Server 查詢歷史執行的SQL語句SQLServer
- sql查詢語句流程SQL
- SQL mother查詢語句SQL
- SQL查詢語句 (Oracle)SQLOracle
- Python:條件分支 if 語句全講解Python
- 簡單的查詢語法