4.18
APP端连接数据库
public class DBUtils { static List<ESP8266> ESPlist=new ArrayList<>();//存放设备的数组 private static ESP8266 Device=new ESP8266();//初始化数组 private static String driver = "com.mysql.jdbc.Driver";// MySql驱动,需要驱动才能接入MySQL // private static String url = "jdbc:mysql://localhost:3306/map_designer_test_db"; private static String user = "app";// 数据库的用户名 private static String password = "123456";//用户名对应的 密码 //连接数据库的函数 private static Connection getConn(String dbName){ Connection connection = null; try{ Class.forName(driver);// 动态加载类 String ip = "118.31.20.121";// 这是MySQL服务器的地址,因为我买的是云主机,所以这里填的是云主机的公网地址 // 尝试建立到给定数据库URL的连接,连接格式:驱动名称+ip地址+端口号+数据库名称+用户名+密码 connection = DriverManager.getConnection("jdbc:mysql://" + ip + ":3306/" + dbName, user, password); //Log.e("prx","url: "+"jdbc:mysql://" + ip + ":3306/" + dbName);3306为MySQL接入固定端口 }catch (Exception e){ e.printStackTrace(); } return connection; } public static List<ESP8266> getInfoByID(String ID){ // 根据数据库名称,建立连接 Connection connection = getConn("MQTTDATA"); try { // mysql简单的查询语句。可以使用查询,更新,删除等等,?是一个变量,在后面可以对?进行赋值,可以设置多个? String sql = "select * from test2 where app_id=?"; if (connection != null){ // connection不为null表示与数据库建立了连接 //预编译sql 的,例如 preparedStatement("select * from t where id = ?"); //然后传入参数的时候 ? 就会替换成你所需要的参数。 PreparedStatement ps = connection.prepareStatement(sql); if (ps != null){ // 设置上面的sql语句中第一个?的值为ID,如果有两个?,就再写一个ps.setString(2,String), // ?会被替换成ID所代表的值 ps.setString(1, ID); // 执行sql查询语句并返回结果集 resultset 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 ResultSet rs = ps.executeQuery(); //Log.e("prx","结果集:" + rs); if (rs != null){ //如果结果集不为空,先获取列的总数 int count = rs.getMetaData().getColumnCount(); Log.e("prx","列总数:" + count); //int x=0; // ResultSet对象保持一个光标指向其当前的数据行。 最初,光标位于第一行之前。 next方法将光标移动到下一行, // 并且由于在ResultSet对象中没有更多行时返回false ,因此可以在while循环中使用循环来遍历结果集。 while (rs.next()){ // 注意:下标是从1开始的 for (int i = 1;i <= count;i++){ //获取数据表的列的名称 String field = rs.getMetaData().getColumnName(i); //Log.e("esp","键: "+field); Log.e("prx","值: "+rs.getString(field)); //通过键值来赋值给对应的ESP8266的元素 switch (field){ case "id": Device.id=rs.getInt(field); case "app_id": Device.app_id=rs.getString(field); break; case "device_id": Device.device_id=rs.getString(field); break; case "remark": Device.remark=rs.getString(field); break; case "state": Device.state=rs.getString(field); break; case "type": Device.type=rs.getString(field); break; case "time": Device.time=rs.getString(field); break; default:Device.data.put(field,rs.getString(field)); } } //把每个设备的保存到数组中 ESPlist.add(Device); //注意每次都要重新实例化Device!!! Device=new ESP8266(); //Log.e("esp","x="+x+" DEVICE_id"+Device.getDevice_id()); //ESP8266 ESP=ESPlist.get(x); //Log.e("esp",x+" LIST_ID"+ESP.getDevice_id()); //x++; //Log.e("ESP", String.valueOf(ESPlist.size())); //x=x+1; //Log.e("esp","list "+x); } //关闭数据库连接 connection.close(); ps.close(); //ESP8266 ESP=ESPlist.get(3); //Log.e("esp","LIST_ID"+ESP.getDevice_id()); return ESPlist; }else { return null; } }else { return null; } }else { return null; } }catch (Exception e){ e.printStackTrace(); Log.e("prx","异常:" + e.getMessage()); return null; } } }