Android Studio:APP 使用 JDBC 連接 MySQL 資料庫並寫入資料後更新畫面

2019/10/07 14,392 1 軟體應用 , 行動平台 , 程式設計 , 資料庫 , Android , JAVA , APP開發

本篇為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 能做的事情也就多了!此篇文章希望能幫助到大家。

贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇