dotws86260 2012-08-15 15:42
浏览 72
已采纳

解释数据字符串并将其插入Java中正确列位置的JTable中

I'm concerned about my Java client directly connecting to the MySQL server due to all of the issues that could occur, and the security risks I believe it could pose. Such as someone being able to decompile the file and get the login details for the database. As beautiful as it would be, I'm too scared to take that risk. I've written a PHP script to echo data that the client can interpret. The PHP script is what connects to the MySQL.

It's rather simple: Java->PHP->MySQL

I'm going to provide screenshots of the MySQL structure, so you may better understand when trying to visualize this. enter image description herehttp://i.imgur.com/5EViC.pngenter image description hereenter image description here

id: possibly tid/sid

tid: teacher id, used to link to the teacher

sid: student id, used to link to the student

gid: grade id

aid: assignment id

gp: gained points

pp: possible points

Grading rows are for each assignment per student. So for example if a teacher had 30 students assigned to one assignment, there would be 30 rows in the grading tab and one in the assignments. Duplicate assignment names are NOT allowed.

When the client is requesting the data, I just use a buffered reader & URL to download the string. This is the example output of when the client receives the assignment names.

Test Assignment;Secondary Test Assignment;

This is what it looks like to the client once the column names are downloaded: enter image description here

As you can see the first two columns are there by default, the last two are assignment names.

I want each row in the table to be a student. However, here is where my trouble comes in. I'm trying to receive the proper data from grading. I don't know how I'm going to do this. I have about 3 months experience with Java, so you could definitely call me a newbie.

Here is my idea, but I didn't think it was so great of an idea: Search through all of the column names and insert the value into the proper column in that row where assignment name matches.

I didn't know how difficult that would be. I'm guessing the nice people who developed swing built something in for that, but I can't find any resources.

Does anyone have any recommendations on what to do in this situation? I feel lost.

  • 写回答

2条回答 默认 最新

  • duancenxie2233 2012-08-20 19:45
    关注

    Let's start with the Java client. Here is some code that reads from a php page and that creates a JTable out of it. (actually it's reading from a String for simplicity but you can easily change the code to match your real case, see the comment in the code).

    public static void main(String[] args) throws Exception {
        String receivedFromPHP = "Student ID;Student Name;Test Assignment;Secondary Test Assignment;
    "
                + "1;Luc;Test assignment 1;Secondary Test assignment 1;
    "
                + "2;Vador;Test assignment 2;Secondary Test assignment 2;";
    
        BufferedReader br = new BufferedReader(new StringReader(receivedFromPHP));
        // For real: br = new BufferedReader(new InputStreamReader(new URL("http://localhost/yourPhpPage.php").openStream()));
    
        DefaultTableModel dtm = new DefaultTableModel();
    
        String line;
        boolean headersReceived = false;
        while ((line = br.readLine()) != null) {
            String[] columns = line.split(";");
            if (!headersReceived) {
    
                dtm.setColumnIdentifiers(columns);
                headersReceived = true;
            } else {
                dtm.addRow(columns);
            }
        }
    
        JTable table = new JTable(dtm);
        JFrame f = new JFrame();
        f.add(new JScrollPane(table));
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    

    Nothing really difficult until now. The real thing is to write the php page with the proper query. Obviously, you know better what you want your page to output but I guess your are going for something like this:

    <?php
    
    $mysqli = new mysqli("localhost", "my_user", "my_password", "pinkfluf_dvonx");
    
    /* check connection */
    if ($mysqli->connect_errno) {
        printf("Connect failed: %s
    ", $mysqli->connect_error);
        exit();
    }
    
    
    /* Select queries return a resultset */
    if ($result = $mysqli->query("SELECT Name FROM City LIMIT 10")) {
        printf("Select returned %d rows.
    ", $result->num_rows);
    
        /* free result set */
        $result->close();
    }
    
    /* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT */
    if ($result = $mysqli->query('SELECT u.id AS "Student ID", u.username AS "Student Name", ... FROM members u, grading g, assignments a WHERE ...')) {
    
        while($row = $result->fetch_array(MYSQLI_NUM)) {
            for ($i=0; $i<sizeof($row); $i++) {
                echo $row[$i] . ";";
            }
            echo "
    ";
        }
    
        $result->close();
    }
    
    $mysqli->close();
    ?>
    

    Of course, the code I give here is very approximative (given the information I could extract from your question) so it's certain that you'll need to adapt the code to make it work as you'd like to but I hope it can help you getting started (keep going :)).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!