-1

ワイヤレス センサーのシミュレーション結果のログを格納する mysql テーブルがあります。各センサーノードのノードID、各ノードのエネルギー、および各センサーのステータス、つまり送信状態か受信状態かなどを保存します。次に、各行に次の5つのフィールドを表示するJTableを作成したいと思います:NodeId 、残りのエネルギー、送信パケット数、受信パケット数、破損パケット数。

次のクエリを使用しています。

SELECT COUNT(*) FROM node WHERE nodeid='i' AND stetus='sending'

SELECT COUNT(*) FROM node WHERE nodeid='i' AND stetus='corrupted'

SELECT COUNT(*) FROM node WHERE nodeid='i' AND stetus='recieved'

SELECT MIN(エネルギー) FROM ノード WHERE nodeid='i'

JTable コンテンツのフィールドを取得します。以下は私が書いたコードです:これを解決するのを手伝ってください。

JTable を表示できません。

import java.util.Vector.*;
import java.sql.*;
        JFrame f = new JFrame();
        f.setSize(800,800);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

         Connection Db=null;
         ResultSet Results,res,rest,re;
         String stetus;
         Vector data = new Vector();
         Vector row = new Vector(50);
         JPanel p = new JPanel();
           Vector<String> columnNames = new Vector<String>();
            double energi,nodeid,en;

            String url= "jdbc:mysql://localhost:3306/prowler";
            String username="root";
            String password = "not telling you";


                   try {
                           Class.forName("com.mysql.jdbc.Driver");
                           Db= DriverManager.getConnection(url,username,password); 
                   }
                     catch(ClassNotFoundException cnf) {
                            System.err.println("Unable to load JDBC bridge" + cnf);   
                            System.exit(1);
                       }

                      catch(SQLException se) {
                               System.err.println("Cannot connect to database" + se);
                               System.exit(2);

                      }

                     int num = Integer.parseInt(name.getSelectedText());   


                        for(int i=1;i<=num;i++)  {

                            row.addElement(i);

                             try {
                     Statement st = Db.createStatement();
                      Results = st.executeQuery("SELECT COUNT(*) FROM node WHERE nodeid='i' AND stetus='sending'");

                   row.addElement(Results.getObject(1));

                             }
                     catch(SQLException se) {
                         System.out.println("Query Not Executed" + se);
                      }


                            try {
                     Statement st = Db.createStatement();
                      res = st.executeQuery("SELECT COUNT(*) FROM node WHERE nodeid='i' AND stetus='corrupted'");
                      row.addElement(res.getObject(1));

                      }
                     catch(SQLException se) {
                         System.out.println("Query Not Executed" + se);
                      }

                             try {
                     Statement st = Db.createStatement();
                      rest = st.executeQuery("SELECT COUNT(*) FROM node WHERE nodeid='i' AND stetus='recieved'");


                       row.addElement(rest.getObject(1));
                            }
                     catch(SQLException se) {
                         System.out.println("Query Not Executed" + se);
                      }

                                    try {
                     Statement st = Db.createStatement();
                      re = st.executeQuery("SELECT MIN(energi)  FROM node WHERE nodeid='i'");

                      row.addElement(re.getObject(1));
                            }
                     catch(SQLException se) {
                         System.out.println("Query Not Executed" + se);
                      }


                  data.addElement(row);


                        }                                           

                  columnNames.add("Node Id");
                  columnNames.add("Packets Sent");
                  columnNames.add("Packets Corrupted");
                  columnNames.add("Packets Recieved");
                  columnNames.add("Energy Left");



   JTable table = new JTable(data,columnNames);
JScrollPane jsp = new JScrollPane(table);
p.add(jsp);
f.add(p);

テーブル NODE スキーマ

4

1 に答える 1

0

わかりましたら、それはかなり単純です。

Select nodeid, 
Count(case stetus when 'sending' then 1 else null end) as Sent,
Count(case stetus when 'received' then 1 else null end) as Received,
Count(case stetus when 'corrupted' then 1 else null end) as Corrupted,
Min(energi) as remaining
From Node Group By NodeId

おもう

カウント内のケース操作は卑劣なトリックです。Count(SomeColumnName) は null をスキップしますが、式を数えることができるので、1 つを一緒にバッシュします。カウントに含めたくない場合は null です。

于 2012-04-08T21:14:47.323 に答える