前言
最近在重構老專案 在原來的基礎上加了mysql資料庫的使用 主要是為了記錄一些重要資料!
第一次使用記得還是三四年前 現在很久沒操作了 先寫個demo練習一下
這里記錄一下流程和使用方法!
效果圖

匯入mysql-connector-java-5.1.30-bin.jar包
mysql-connector-java-5.1.30-bin.jar包 CSDN下載地址
將jar下載后,在新建的demo專案app/src/main 目錄下 創建libs檔案夾,將jar包復制到該檔案夾下,然后右鍵選擇 Add As Library 進行匯入即可

等待gradle同步jar包后,打開gradle檔案依賴內容如下說明匯入成功 如下圖所示
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">
<Button
android:id="@+id/btn_select_for_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:text="根據欄位查詢"
android:textSize="16sp"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn_select_table"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:text="整表查詢"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/btn_select_for_id" />
<Button
android:id="@+id/btn_insert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:text="插入資料"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/btn_select_table" />
<Button
android:id="@+id/btn_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:text="洗掉表資料"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/btn_insert" />
<TextView
android:id="@+id/tv_data_for_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center"
android:padding="10dp"
android:text="顯示單個查詢的資料"
android:textSize="16sp"
app:layout_constraintTop_toBottomOf="@id/btn_delete" />
<TextView
android:id="@+id/tv_data_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:text="顯示整個表的資料"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
MySQL 資料庫
代碼層面 就是 先連接到mysql資料庫 然后對其操作 增刪改查
一起來看下demo的實作吧
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private Button btnSelectForId, btnSelectTable, btnInsert, btnDelete;
private TextView tvShowId, tvShowTable;
@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0x11:
case 0x12:
String s = (String) msg.obj;
tvShowId.setText(s);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initView
btnSelectForId = findViewById(R.id.btn_select_for_id);
btnSelectTable = findViewById(R.id.btn_select_table);
btnInsert = findViewById(R.id.btn_insert);
btnDelete = findViewById(R.id.btn_delete);
tvShowId = findViewById(R.id.tv_data_for_id);
tvShowTable = findViewById(R.id.tv_data_show);
//設定監聽事件
initListener();
}
private void initListener() {
// 查詢單個欄位
btnSelectForId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 創建一個執行緒來連接資料庫并獲取資料庫中對應表的資料
new Thread(new Runnable() {
@Override
public void run() {
// 呼叫資料庫工具類DBUtils的getInfoByName方法獲取資料庫表中資料
HashMap<String, Object> map = DBUtils.getInfoById();
Message message = handler.obtainMessage();
if (map != null) {
StringBuilder s = new StringBuilder();
for (String key : map.keySet()) {
s.append(key).append(":").append(map.get(key)).append("\n");
}
message.what = 0x12;
message.obj = s.toString();
} else {
message.what = 0x11;
message.obj = "查詢結果為空";
}
// 發訊息通知主執行緒更新UI
handler.sendMessage(message);
}
}).start();
}
});
//查詢整個表
btnSelectTable.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
//查詢整表資料
final List<LogBean> logBeanData = DBUtils.getLogBeanData();
runOnUiThread(new Runnable() {
@Override
public void run() {
//展示整個表資料
tvShowTable.setText(logBeanData.toString());
Log.e(TAG, "table data ---" + logBeanData.toString());
}
});
}
}).start();
}
});
//插入
btnInsert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
int status = 0;
try {
status = DBUtils.insertData("身份證識別模塊",
"正常", "0", "{姓名:小明,性別:男,出生日期:20180219}");
} catch (SQLException e) {
e.printStackTrace();
}
Log.e(TAG, "insert data status ------" + status);
if (status == 1) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "插入成功", Toast.LENGTH_SHORT).show();
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "插入失敗", Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
});
//洗掉表資料
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(new Runnable() {
@Override
public void run() {
int code = DBUtils.deleteDataForTable("身份證識別模塊");
Log.e(TAG, "code ---" + code);
if (code == 1) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "洗掉成功", Toast.LENGTH_SHORT).show();
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "洗掉失敗", Toast.LENGTH_SHORT).show();
}
});
}
}
}).start();
}
});
}
}
MySQL封裝工具類 DBUtils
該工具類主要是鏈接mysql資料庫 還有增刪改查的方法 如果要借用
記得改掉表名和ip地址 還有資料庫名字
/**
* Author by Lyu
* Date on 2021/10/27-10:58
* Description: 資料庫的ip地址記得寫本機IPV4地址,然后手機與電腦連接同一個網路,只有這樣條件下,手機才能成功的連接上本機的mysql資料庫,
*/
public class DBUtils {
private static final String DATA_BASE_TABLE_NAME = "xwc_android_log";
private static Connection getConn() {
Connection connection = null;
try {
// MySql驅動
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver);// 動態加載類
String ip = "192.168.31.7";// 寫成本機地址,不能寫成localhost,同時手機和電腦連接的網路必須是同一個
// 嘗試建立到給定資料庫URL的連接
// 用戶名
String LogBean = "root";
// 密碼
String password = "****";
connection = DriverManager.getConnection("jdbc:mysql://" + ip + ":3306/" + "xwc-client",
LogBean, password);
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
static HashMap<String, Object> getInfoById() {
HashMap<String, Object> map = new HashMap<>();
// 根據資料庫名稱,建立連接
Connection connection = getConn();
try {
// mysql簡單的查詢陳述句,這里是根據MD_CHARGER表的NAME欄位來查詢某條記錄
String sql = "select * from " + DATA_BASE_TABLE_NAME + " where content = ?";
// connection不為null表示與資料庫建立了連接
if (connection != null) {
PreparedStatement ps = connection.prepareStatement(sql);
if (ps != null) {
// 設定上面的sql陳述句中的?的值為id
ps.setString(1, "id");
// 執行sql查詢陳述句并回傳結果集
ResultSet rs = ps.executeQuery();
if (rs != null) {
int count = rs.getMetaData().getColumnCount();
Log.e("DBUtils", "列總數:" + count);
while (rs.next()) {
// 注意:下標是從1開始的
for (int i = 1; i <= count; i++) {
String field = rs.getMetaData().getColumnName(i);
map.put(field, rs.getString(field));
}
}
closeAll(connection, ps);
return map;
} else {
return null;
}
} else {
return null;
}
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
Log.e("DBUtils", "例外:" + e.getMessage());
return null;
}
}
public static int insertData(String name, String type, String status, String content) throws SQLException {
// 根據資料庫名稱,建立連接
Connection connection = getConn();
//向course表插入資料,其中id欄位插入的值對應第一個問號,type欄位插入的值對應第二個問號
String sql = "insert into " + DATA_BASE_TABLE_NAME + " (type,name,status,content,create_time) values (?,?,?,?,?);";
PreparedStatement ps = connection.prepareStatement(sql);
//通過setString賦值
ps.setString(1, type);
ps.setString(2, name);
ps.setString(3, status);
ps.setString(4, content);
ps.setTimestamp(5, new Timestamp(System.currentTimeMillis()));
//執行更新資料庫 回傳一個狀態碼 可以根據這個碼 判斷是否插入成功
int insertCode = ps.executeUpdate();
closeAll(connection, ps);//關閉相關操作
return insertCode;
}
/**
* 查整個表的資料
*
* @return
*/
public static List<LogBean> getLogBeanData() {
//結果存放集合
List<LogBean> list = new ArrayList<>();
PreparedStatement ps = null;
ResultSet rs = null;
//MySQL 陳述句
String sql = "select * from " + DATA_BASE_TABLE_NAME;
//獲取鏈接資料庫物件
Connection conn = getConn();
try {
if (conn != null && (!conn.isClosed())) {
ps = conn.prepareStatement(sql);
if (ps != null) {
rs = ps.executeQuery();
if (rs != null) {
while (rs.next()) {
LogBean log = new LogBean();
log.setId(rs.getString("id"));
log.setName(rs.getString("name"));
log.setType(rs.getString("type"));
log.setContent(rs.getString("status"));
log.setStatus(rs.getString("content"));
log.setCreate_time(rs.getTimestamp(6));
list.add(log);
}
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
closeAll(conn, ps, rs);//關閉相關操作
return list;
}
/**
* 修改資料庫中某個物件的狀態 改
*/
public int updateUserData(String name) {
int result = -1;
PreparedStatement ps = null;
//獲取鏈接資料庫物件
Connection conn = getConn();
if (!TextUtils.isEmpty(name)) {
//獲取鏈接資料庫物件
//MySQL 陳述句
String sql = "update " + DATA_BASE_TABLE_NAME + " set status=? where name=?";
try {
boolean closed = conn.isClosed();
if (!closed) {
ps = conn.prepareStatement(sql);
ps.setString(1, "1");//第一個引數status 一定要和上面SQL陳述句欄位順序一致
ps.setString(2, name);//第二個引數name 一定要和上面SQL陳述句欄位順序一致
result = ps.executeUpdate();//回傳1 執行成功
}
} catch (SQLException e) {
e.printStackTrace();
}
}
closeAll(conn, ps);//關閉相關操作
return result;
}
/**
* 根據欄位洗掉
*
* @return
*/
public static int deleteDataForTable(String name) {
int result = -1;
PreparedStatement ps = null;
//獲取鏈接資料庫物件
Connection conn = getConn();
if (!TextUtils.isEmpty(name)) {
//MySQL 陳述句
String sql = "delete from " + DATA_BASE_TABLE_NAME + " where name=?";
try {
boolean closed = conn.isClosed();
if (!closed) {
ps = conn.prepareStatement(sql);
ps.setString(1, name);
result = ps.executeUpdate();//回傳1 執行成功
}
} catch (SQLException e) {
e.printStackTrace();
}
}
closeAll(conn, ps);//關閉相關操作
return result;
}
/**
* 關閉資料庫 三參
*
* @param conn
* @param ps
* @param rs
*/
public static void closeAll(Connection conn, PreparedStatement ps, ResultSet rs) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 關閉資料庫 兩參
*
* @param conn
* @param ps
*/
public static void closeAll(Connection conn, PreparedStatement ps) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
網路權限
mysql資料庫 就是實作客戶端向服務器發送 所以網路權限一定要的

總結
很早以前學習過mysql資料庫的操作方法 那時候還是用jdbc的原始方法
好多年沒用了 今天復習了一下 感覺記憶有加深了不少!
又多了一項技能 哈哈哈 溫故而知新,可以為師矣,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341920.html
標籤:其他

