Android访问MySql数据库实例 回帖 Android Studio连接MySQL云端数据库

回帖 Android Studio 连接 MySQL 云端数据库 https://blog.csdn.net/baisedeqingting/article/details/78625078

因为访问网络,所以不要忘了在权限列表AndroidMainfest.xml中添加请求访问网络的权限

<uses-permission android:name="android.permission.INTERNET" />

按照上篇文章添加java连接mysql的驱动程序后,给出一个访问云端数据库的示例项目DBDemo。

  示例中的数据库在我的云服务器上,mysql用户名和密码都写在代码里面,希望学习者不要破坏我的数据库或服务器。

项目文件DBDemo下载=》 传送门我的GitHub 若无法正常打开,可能因为gradle配置问题

下面是几个主要的文件,及配图

1、操作数据库的java文件

package cn.wjsay.dbdemo;

import android.util.Log;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;

public class DBUtils {
    private static final String TAG = "DBUtils";
    private static Connection getConnection(String dbName) {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver"); //加载驱动
            String ip = "139.199.38.177";
            conn = DriverManager.getConnection(
                    "jdbc:mysql://" + ip + ":3306/" + dbName,
                    "learner", "learner_password");
        } catch (SQLException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
        return conn;
    }
    public static HashMap<String, String> getUserInfoByName(String name) {
        HashMap<String, String> map = new HashMap<>();
        Connection conn = getConnection("dblearner");
        try {
            Statement st = conn.createStatement();
            String sql = "select * from user where name = '" + name + "'";
            ResultSet res = st.executeQuery(sql);
            if (res == null) {
                return null;
            } else {
                int cnt = res.getMetaData().getColumnCount();
                //res.last(); int rowCnt = res.getRow(); res.first();
                res.next();
                for (int i = 1; i <= cnt; ++i) {
                    String field = res.getMetaData().getColumnName(i);
                    map.put(field, res.getString(field));
                }
                conn.close();
                st.close();
                res.close();
                return map;
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.d(TAG, " 数据操作异常");
            return null;
        }
    }
}

2、MainActivity.java主活动文件代码清单

package cn.wjsay.dbdemo;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.util.HashMap;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    Handler handler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message message) {
            ((TextView)findViewById(R.id.tv_result)).setText((String)message.obj);
            String str = "查询不存在";
            if(message.what == 1) str = "查询成功";
            Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
            return false;
        }
    });

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText et_name = findViewById(R.id.et_name);
        (findViewById(R.id.btn_01)).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final String name = et_name.getText().toString().trim();
                Log.e(TAG, name);
                if(name == null || name.equals("")) {
                    Toast.makeText(MainActivity.this,"输入不能为空",Toast.LENGTH_SHORT).show();
                }
                else {
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            TextView tv_result = findViewById(R.id.tv_result);
                            HashMap<String, String> mp =
                                    DBUtils.getUserInfoByName(name);
                            Message msg = new Message();
                            if(mp == null) {
                                msg.what = 0;
                                msg.obj =  "查询结果,空空如也";
                                //非UI线程不要试着去操作界面
                            }
                            else {
                                String ss = new String();
                                for (String key : mp.keySet()) {
                                    ss = ss + key + ":" + mp.get(key) + ";";
                                }
                                msg.what = 1;
                                msg.obj = ss;
                            }
                            handler.sendMessage(msg);
                        }
                    }).start();
                }
            }
        });

    }
}

3、MainActivity所用的界面文件

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <TextView
        android:text="请输入待查询的用户名"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <EditText
        android:id="@+id/et_name"
        android:layout_marginLeft="60dp"
        android:hint="请输入alice 或 bob"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:text="查询结果"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/tv_result"
        android:layout_marginLeft="60dp"
        android:text="缺省"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/btn_01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击获取数据"/>

</LinearLayout>
数据库名 dblearner, 包含的表 uaer(id int, name char(30), password char(30))


软件界面





猜你喜欢

转载自blog.csdn.net/baisedeqingting/article/details/80031272