本篇為《Android Studio:APP 使用 JDBC 連接 MySQL 資料庫並讀取指定資料表中所有資料》的延伸篇,因此關於 APP 使用 JDBC 連接 MySQL 資料庫,還包含示範資料庫的建置 SQL,該篇文章已經有相當完整的介紹,這篇文章則是延伸該篇文章,製作寫入資料的功能。
前一次開啟 APP 後就會將資料表內所有資料列出,現在新增一個文字輸入框與按鈕,輸入文字按下「OK」,資料就會被存入資料庫,然後 APP 就會自動更新目前顯示的資料,新資料將可馬上呈現於畫面中!這次會修改到前次的「📄 activity_main.xml」(新增文字輸入方塊[EditText]與 OK 按鈕[Button])、「📄 MysqlCon.java」(新增資料寫入的方法)與「📄 MainActivity.java」(新增按下「OK」按鈕要處理的動作,會用到執行緒[Thread]的概念),這次還多用了「📄 strings.xml」,用來存放 UI 元件的顯示字串,這樣做的好處是未來可做多國語言,詳細可看我之前的文章說明,我採用 Android Studio 作為開發者工具。
因為這次會讓使用者可輸入資料,所以開始有資安的議題出現,請大家用 SQL 操作資料庫時要注意 SQL Injection 的攻擊手法,避免資料庫被破壞。此篇文章僅為新手入門用,對於資安沒有特別注重,此點也請特別注意!
👋 所有步驟:
👉 第一步:「activity_main.xml」版面配置
👉 第二步:「strings.xml」獨立 UI 用字串
👉 第三步:「MysqlCon.java」建立寫入資料之方法
👉 第四步:「MainActivity.java」執行緒、操作讀取 UI
👉 第五步:模擬器測試、實體手機測試
👉 第一步:「activity_main.xml」版面配置 ⏏️
原本的版面只有一個 TextView 用來顯示資料表內所有資料,但為了要可以輸入資料並寫入資料庫,因此這次又加了 EditText 與 Button,前者作為文字輸入框,後者作為 OK 按鈕,用來提交文字,提交後還會將新的資料重新匯入 TextView 提供查看,因此 TextView 這次還多了捲軸功能,但除了「📄 activity_main.xml」內要新增屬性 android:scrollbars="vertical"
,「📄 MainActivity.java」也要加上以下程式碼在 protected void onCreate(Bundle savedInstanceState)
中:
Button ok_button = (Button) findViewById(R.id.ok_button);
ok_button.setOnClickListener(ok_btn);
▲ 這次主要新增的 UI 元件,截圖為 XML 原始碼。
然後因為 UI 元件變多了,所以這次有用 LinearLayout 排版,這邊直接給上完整 XML 原始碼:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/LinearLayout_v"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:text="@string/loading"
android:scrollbars="vertical"
android:singleLine="false"
android:textSize="36sp" />
<LinearLayout
android:id="@+id/LinearLayout_h"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:orientation="horizontal">
<EditText
android:id="@+id/edit_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:layout_weight="1"
android:hint="@string/input"
android:inputType="text"
android:textSize="30sp" />
<Button
android:id="@+id/ok_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:text="@android:string/ok" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
👉 第二步:「strings.xml」獨立 UI 用字串 ⏏️
我們這次要將「📄 activity_main.xml」內部分的顯示字串獨立到「📄 strings.xml」中,「📄 activity_main.xml」內則用 @string/
引入字串,這裡第一步給的 XML 都有了!這邊只要改「📄 strings.xml」。順帶一提,「OK」字串 Android 就內建了!可使用 @android:string/ok
引入。
▲ 反白起來的就是新加入的獨立字串。
完整 XML 原始碼如下:
<resources>
<string name="app_name">Mysql_Connect</string>
<string name="loading">載入中</string>
<string name="input">請輸入名字</string>
</resources>
👉 第三步:「MysqlCon.java」建立寫入資料之方法 ⏏️
這裡我們要先建立一個 insertData(String data)
方法用來寫入資料至 MySQL 資料庫,String data 將從「📄 MainActivity.java」那端傳入。
▲ 這個方法其實挺簡短的,除了 JAVA,還會用到 SQL 進行寫入資料庫。
寫入資料之方法完整 JAVA 程式碼:
public void insertData(String data) {
try {
Connection con = DriverManager.getConnection(url, db_user, db_password);
String sql = "INSERT INTO `test` (`name`) VALUES ('" + data + "')";
Statement st = con.createStatement();
st.executeUpdate(sql);
st.close();
Log.v("DB", "寫入資料完成:" + data);
} catch (SQLException e) {
e.printStackTrace();
Log.e("DB", "寫入資料失敗");
Log.e("DB", e.toString());
}
}
只要是跟連接資料庫有關,try、catch 是免不了的,例外處理可說是相當重要!
👉 第四步:「MainActivity.java」執行緒、操作讀取 UI ⏏️
「📄 MainActivity.java」是主要程式,這次主要基於上篇文章加入按鈕點擊監聽,以使用執行緒執行「📄 MysqlCon.java」內的 insertData(String data)
方法,接著再運用前次在「📄 MysqlCon.java」寫好的 getData()
方法取得資料,並用之前說過的 View.post(Runnable)
方法來讓 UI 顯示新的資訊。
▲ 這次就是寫按鈕監聽,讓「OK」按鈕按下後可以觸發這些事件:資料存入資料庫後並更新 UI 上的資訊。
按鈕監聽部分的 JAVA 程式碼如下:
private Button.OnClickListener ok_btn = new Button.OnClickListener() {
@Override
public void onClick(View v) {
final TextView text_view = (TextView) findViewById(R.id.text_view);
new Thread(new Runnable() {
@Override
public void run() {
// 取得 EditText 資料
final EditText edit_text = (EditText) findViewById(R.id.edit_text);
String stringdata = edit_text.getText().toString();
// 清空 EditText
edit_text.post(new Runnable() {
public void run() {
edit_text.setText("");
}
});
// 將資料寫入資料庫
MysqlCon con = new MysqlCon();
con.insertData(stringdata);
// 讀取更新後的資料
final String updata = con.getData();
Log.v("OK", updata);
text_view.post(new Runnable() {
public void run() {
text_view.setText(updata);
}
});
}
}).start();
}
};
👉 第五步:模擬器測試、實體手機測試 ⏏️
這邊可以參考這兩篇文章:
📝 Android Studio:建立虛擬設備(模擬器)、運行開發中的 APP 在模擬器上
📝 Android Studio:將開發中的 APP 安裝到手機上教學(USB 偵錯模式)
▲ 模擬器跑剛剛寫好的 APP,一開始會有「載入中」的字樣,接著就會顯示資料,下方文字輸入框可以打要存入資料庫的名字,點「OK」提交。
▲ 不久資料就成功提交 MySQL 資料庫,並更新畫面中的資料,Android Studio 下方 Logcat 也都會出現 Log 資訊。
▲ 實體手機測試也是 OK 的!都可以正常運作。
現在可以讀取與寫入資料到 MySQL 資料庫,APP 能做的事情也就多了!此篇文章希望能幫助到大家。
留言區 / Comments
萌芽論壇