软工第五周:安卓连接MySql

拜拜、爱过 提交于 2020-03-22 20:36:26

这周的学习内容为移动端连接ySql数据库。

一、实现方法:

1.导入连接数据库所使用的jre包

 

2.在主布局文件中添加 <uses-permission android:name="android.permission.INTERNET"/>获得访问网络的权限

 3.新建一个java文件实现数据库的连接

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.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * 数据库工具类:连接数据库用、获取数据库数据用
 * 相关操作数据库的方法均可写在该类
 */
public class db {

    private static String driver = "com.mysql.jdbc.Driver";
         // MySql驱动

//    private static String url = "jdbc:mysql://localhost:3306/map_designer_test_db";

    private static String user = "root";// 用户名

    private static String password = "zhangziyi1670";// 密码

    private static Connection getConn(String dbName) {

        Connection connection = null;
        try {
            Class.forName(driver);// 动态加载类
            String ip = "192.168.1.7";// 写成本机地址,不能写成localhost,同时手机和电脑连接的网络必须是同一个

            // 尝试建立到给定数据库URL的连接
            connection = DriverManager.getConnection("jdbc:mysql://" + ip + ":3306/" + dbName,
                    user, password + "&useSSL=false&serverTimezone=UTC&useSSL=false&serverTimezone=UTC");

        } catch (Exception e) {
            e.printStackTrace();
        }

        return connection;
    }
    public static List<CostBean> search(String time,String area){
       List<CostBean>list=new ArrayList<CostBean>();
        Connection connection = getConn("pachong");

        try {
            // mysql简单的查询语句。这里是根据MD_CHARGER表的NAME字段来查询某条记录
            String sql = "select * from todaydata_copy1 where updateDate = ? and provinceid = ? ";
//            String sql = "select * from MD_CHARGER";
            if (connection != null){// connection不为null表示与数据库建立了连接
                PreparedStatement ps = connection.prepareStatement(sql);
                if (ps != null){
                    // 设置上面的sql语句中的?的值为name
                    ps.setString(1, time);
                    ps.setString(2,area);
                    // 执行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 time1=rs.getString("updateData");
                               String area1=rs.getString("provinceid");
                               String conformednum=rs.getString("confirmedNum");
                               CostBean costBean=new CostBean(time1,area1,conformednum);
                               list.add(costBean);
                            }
                        }
                        connection.close();
                        ps.close();
                        return  list;
                    }else {

                        return null;
                    }
                }else {
                    return  null;
                }
            }else {
                Log.e("message","con未连接成功");
                return  null;
            }
        }catch (SQLException e){
            e.printStackTrace();
            Log.e("DBUtils","异常:" + e.getMessage());
            return null;
        }
    }
}

二、时间表

阶段 时间 问题 备注
jsoup爬取世界疫情信息,存入mysql 30min   在之前读取全国疫情的知识储备下,这一步相对来说比较容易
android连接mysql 1day 初次使用android连接mysql,并通过ip地址访问,问题是真的多呀 从网络上查找的资料,但是也遇到了Could not create connection to database server的问题
android读取,查询,显示疫情信息 2h 空指针 不晓得哪里出错,一点点尝试利用Log日志和LogCat查找错误原因
三、总结1.在我的as中遇到了一个activity无法直接使用findViewById的方法来获得EditText控件中的内容  在网上查找解决方法有以下几点原因:   控件id没写对   在类中声明控件变量时直接赋值为null:    

         findViewById方法写在了setContentView方法之前

         当前activity无法直接获得另一个activity布局中的控件(但是有大佬跟我说这和activity没关系,但是我好像就是因为这个原因,不晓得为什么)

对于最后一种的解决方法:

 

 

 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!