点击获取数据按钮连接数据库并获取数据,在textView显示在数据库中获取的数据;
1、导入jar包mysql-connector-java-5.1.47.jar
在libs文件夹下,右键选择 Add As Library 进行导入;
查看build.gradle是否导入成功
2、在清单配置文件中添加网络权限,
在AndroidMnaifest.xml中添加
<uses-permission android:name="android.permission.INTERNET"/>
3、连接数据库代码:
DBUtils.java:
package com.example.xinguan; import android.util.Log; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; 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 = "123456";// 密码 private static Connection getConn(String dbName){ Connection connection = null; try{ Class.forName(driver);// 动态加载类 String ip = "192.168.1.6";// 写成本机地址,不能写成localhost,同时手机和电脑连接的网络必须是同一个 // 尝试建立到给定数据库URL的连接 connection = DriverManager.getConnection("jdbc:mysql://" + ip + ":3306/" + dbName, user, password); }catch (Exception e){ e.printStackTrace(); } return connection; } public static HashMap<String, Object> getInfoByName(String name){ HashMap<String, Object> map = new HashMap<>(); // 根据数据库名称,建立连接 Connection connection = getConn("test"); try { // mysql简单的查询语句 String sql = "select * from ceshi where name = ?"; if (connection != null){// connection不为null表示与数据库建立了连接 PreparedStatement ps = connection.prepareStatement(sql); if (ps != null){ ps.setString(1, name); // 执行sql查询语句并返回结果集 ResultSet rs = ps.executeQuery(); if (rs != null){ int count = rs.getMetaData().getColumnCount(); Log.e("DBUtils","列总数:" + count); while (rs.next()){ for (int i = 1;i <= count;i++){ String field = rs.getMetaData().getColumnName(i); map.put(field, rs.getString(field)); } } connection.close(); ps.close(); return map; }else { return null; } }else { return null; } }else { return null; } }catch (Exception e){ e.printStackTrace(); Log.e("DBUtils","异常:" + e.getMessage()); return null; } } }
4、MainActivity:
package com.example.xinguan; import android.annotation.SuppressLint; import android.app.Activity; 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 Activity { private Button btn_get_data; private TextView tv_data; @SuppressLint("HandlerLeak") private Handler handler = new Handler(){ @Override public void 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; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 控件的初始化 btn_get_data = findViewById(R.id.btn_get_data); 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("haha"); Message message = handler.obtainMessage(); if(map != null){ String s = ""; for (String key : map.keySet()){ s += key + ":" + map.get(key) + " "; } //消息的定位标志 message.what = 0x12; message.obj = s; }else { message.what = 0x11; message.obj = "查询结果为空"; } // 发消息通知主线程更新UI handler.sendMessage(message); } }).start(); } }); } }
布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/btn_get_data" android:layout_margin="15dp" 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:gravity="center" android:text="测试数据" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>