MainActivity
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
private TextView tv_data;
private Button btn_get_data; //声明组件
private Button btn_get_all; //声明组件
private final Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what){
case 0x11:
String s = (String) msg.obj;
tv_data.setText(s);
break;
case 0x12:
String ss = (String) msg.obj;
tv_data.setText(ss);
break;
}
return true;
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 控件的初始化
btn_get_data = findViewById(R.id.btn_get_data);
btn_get_all = findViewById(R.id.btn_get_all);
tv_data = findViewById(R.id.tv_data);
setListener();
}
//设置监听
private void setListener() {
// 按钮点击事件
btn_get_data.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.getInfoByName("张三");
Message message = handler.obtainMessage();
if(map != null){
String s = "";
for (String key : map.keySet()){
s += key + ":" + map.get(key) + "\n";
}
message.what = 0x12;
message.obj = s;
}else {
message.what = 0x11;
message.obj = "查询结果为空";
}
// 发消息通知主线程更新UI
handler.sendMessage(message);
}
}).start();
}
});
// 按钮点击事件
btn_get_all.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.getAllInfo();
Message message = handler.obtainMessage();
if(map != null){
String s = "";
for (String key : map.keySet()){
s += key + ":" + map.get(key) + "\n";
}
message.what = 0x12;
message.obj = s;
}else {
message.what = 0x11;
message.obj = "查询结果为空";
}
// 发消息通知主线程更新UI
handler.sendMessage(message);
}
}).start();
}
});
}
}
DBUtils
package com.example.myapplication;
import android.util.Log;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.HashMap;
//数据库工具类:连接数据库用、获取数据库数据用
public class DBUtils {
private static String driver = "com.mysql.jdbc.Driver";// MySql驱动
private static String user = "root";// 用户名
private static String password = "f117xxxd";// 密码
private static Connection getConn(String dbname){
Connection connection = null;
try{
Class.forName(driver);// 动态加载类
String ip = "8.tcp.cpolar.top"; // 写成本机地址,不能写成localhost 8.tcp.cpolar.top:13168
// 尝试建立到给定数据库URL的连接
connection = DriverManager.getConnection("jdbc:mysql://" + ip
+ ":13168/" + dbname, user, password);
}catch (Exception e){
Log.i("DBUtils","Exception");
e.printStackTrace();
}
return connection;
}
public static HashMap<String, Object> getAllInfo(){
HashMap<String, Object> map = new HashMap<>();
// 根据数据库名称,建立连接
Connection connection = getConn("test");
try {
String sql = "select * from users;";
if (connection != null){// connection不为null表示与数据库建立了连接
PreparedStatement ps = connection.prepareStatement(sql);
if (ps != null){
// 执行sql查询语句并返回结果集
ResultSet rs = ps.executeQuery();
if (rs != null){
while (rs.next()){
// String rsm = rs.getMetaData().getColumnName(1);
// Log.i("DBUtils","记录rsm :" + rsm);
// 通过字段检索
String id = rs.getString("nums");
String name = rs.getString("name");
String passw = rs.getString("passw");
int age = rs.getInt("age");
String adress = rs.getString("adress");
Log.i("DBUtils","记录全 :" + id + name + passw + age + adress);
map.put(id,","+name+","+passw+","+age+","+adress);
}
connection.close();
ps.close();
return map;
}else {
Log.i("DBUtils","结果为空");
return null; }
}else {
Log.i("DBUtils","sql");
return null; }
}else {
Log.i("DBUtils","连接失败");
return null; }
}catch (Exception e){
e.printStackTrace();
Log.e("DBUtils","异常:" + e.getMessage());
return null;
}
}
public static HashMap<String, Object> getInfoByName(String names){
HashMap<String, Object> map = new HashMap<>();
// 根据数据库名称,建立连接
Connection connection = getConn("test");
try {
// mysql简单的查询语句。这里是根据users表的name字段来查询某条记录
String sql = "select * from users where name = ? ;";
if (connection != null){ // connection不为null表示与数据库建立了连接
PreparedStatement ps = connection.prepareStatement(sql);
if (ps != null){
// 设置上面的sql语句中的?的值为name
// ps.setString(1, names);
ps.setNString(1,names);
// 执行sql查询语句并返回结果集
ResultSet rs = ps.executeQuery();
// rs.beforeFirst();
if (rs != null && rs.next()){
Log.i("DBUtils","记录 count :" + rs.getMetaData().getColumnCount());
rs.previous();
while (rs.next()){
// 通过字段检索
String id = rs.getString("nums");
String name = rs.getString("name");
String passw = rs.getString("passw");
int age = rs.getInt("age");
String adress = rs.getString("adress");
Log.i("DBUtils","记录全 :" + id + name + passw + age + adress);
map.put(id,","+name+","+passw+","+age+","+adress);
}
connection.close();
ps.close();
return map;
}else {
Log.i("DBUtils","结果为空");
return null; }
}else {
Log.i("DBUtils","sql");
return null; }
}else {
Log.i("DBUtils","连接失败");
return null; }
}catch (Exception e){
e.printStackTrace();
Log.e("DBUtils","异常:" + e.getMessage());
return null;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical">
<Button
android:id="@+id/btn_get_data"
android:layout_margin="2dp"
android:textSize="16sp"
android:text="查询名为张三的数据"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn_get_all"
android:layout_margin="2dp"
android:textSize="16sp"
android:text="查询所有的数据"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv_data"
android:padding="10dp"
android:textSize="16sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>