0

我正在研究 java JDK7 和 Microsoft Access 2007。基本上我想从 row1 的所有列中获取最小值。但是下面的代码不起作用。

import java.io.*;
import java.util.*;
import java.net.*;
import java.sql.*;

public class server 
{
public void check() 
{
    int min = 100, row = 0, index, i = 2;
    try {
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection cn = DriverManager.getConnection("jdbc:odbc:DSN2");
            Statement st = cn.createStatement();
            ResultSet rs = st.executeQuery("select *from Table1");
            rs.next();
            System.out.println(rs.getInt(1) + "\t" + rs.getInt(2) + "\t" + rs.getInt(3) + "\t" + rs.getInt(4) + "\t" + rs.getInt(5) + "\t" + rs.getInt(6));
            for (i = 2; i < 7; i++)
             {
                System.out.println("hello");
                if (rs.getInt(i) < min) {
                    index = i;
                    min = rs.getInt(i);
                                        }
            }
        } catch (Exception e) {
            e.getMessage();
                              }
        switch (i) {
            case 2:
                ioConnect();
                break;
            case 3:
                break;
            case 4:
                ioConnect();
                break;
            case 5:
                ioConnect();
                break;
            case 6:
                ioConnect();
                break;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void ioConnect() {
    try {
        ServerSocket ss = new ServerSocket(2000);

        Socket so = ss.accept();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("enter the message");

        String str = br.readLine();
        PrintStream ps = new PrintStream(so.getOutputStream());
        ps.println(str);

    } catch (Exception e) {
        e.getMessage();
    }
}
}

class serverm {

public static void main(String s[]) {
    servern obj = new servern();
    obj.check();

}
}

所以在这里我得到输出的第一行每列的值很好,但是当控件进入for循环时,println语句只打印一次hello并且光标闪烁。这表明程序没有正确结束。

4

2 回答 2

0

这是你犯的一个小错误。无论结果是否有记录,您都在调用 rs.getInt(1)... 。使用经典的 JDBC 方式测试结果集是否有记录。

while(rs.next()){
   rs.getInt(1);
}
于 2013-09-19T12:21:17.300 回答
0

你的第一个问题是你不知道你的问题是什么......

解决这个问题,并解决真正的问题,而不是这个

catch(Exception e)
{
    e.getMessage();
}

利用

catch(Exception e)
{
    e.printStackTrace();
}

请粘贴这产生的完整堆栈跟踪...

编辑 正如 OP 在评论中所述:

没有找到数据抛出异常

这意味着没有要读取的数据。这是MS Access 的一个已知案例

当您尝试多次读取列的值时,通常会发生这种情况。

所以你应该只读取每个值一次!要解决即时问题,请在此处注释 System.out.println() 行

...
rs.next();
// comment this: 
// System.out.println(rs.getInt(1) + "\t" + rs.getInt(2) + "\t" + rs.getInt(3) + "\t" + rs.getInt(4) + "\t" + rs.getInt(5) + "\t" + rs.getInt(6));
for (i = 2; i < 7; i++)
...

并且要小心,因为您在循环中两次为同一索引调用 getInt() ,因此必须更正:

for (i = 2; i < 7; i++)
{
    System.out.println("hello");
    if (rs.getInt(i) < min) { // getInt()
        index = i;
        min = rs.getInt(i); // second getInt() call for same index --- throws exception
    }
}

正确的:

for (i = 2; i < 7; i++)
{
    System.out.println("hello");
    int value=rs.getInt(i); // getInt() call, put into local variable
    if (value < min) {
        index = i;
        min = value; //just use local variable - OK
    }
}
于 2013-09-19T11:21:33.053 回答