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;
        }

    }

}

 

posted @ 2024-04-18 22:34  好(justice)……  阅读(6)  评论(0编辑  收藏  举报