这周的学习内容为移动端连接ySql数据库。
一、实现方法:
1.导入连接数据库所使用的jar包
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没关系,但是我好像就是因为这个原因,不晓得为什么)
对于最后一种的解决方法: