0

我的 Oracle 数据库的服务器代码包含两个文件(类),即:Main.javaDBManager.java. 分别对查询语句执行和操作的DBManager.java包含SQLPRocessing和方法(函数)。用于转储和获取数据的 SQL 查询是在类中编写的。我的数据库包含两个表和. 我的代码有两个用于插入数据的查询:SQLProcessexecuteUpdateexecuteQueryMain.javaT1T2

public void SQLProcessing(String ID, String X, String Y, String XE, String YE){
    db.SQLProcess("INSERT INTO T1 VALUES("+Double.parseDouble(ID)+ "," +Double.parseDouble(X)+ "," +Double.parseDouble(Y)+")");
    db.SQLProcessing("INSERT INTO T2 VALUES("+Double.parseDouble(ID)+ "," +Double.parseDouble(XE)+ "," +Double.parseDouble(YE)+")");                    
}

同样,为了从数据库中取回数据,我使用单个 SELECT 查询:

public ResultSet SQLProcess(String msg1, String msg2, String msg3, String msg4, String msg5){
    ResultSet rs = db.SQLProcess("SELECT * FROM T1, T2 WHERE T1.ID = T2.ID");
    return rs;
}

执行代码时,出现错误:

Exception in thread "Thread-1" java.lang.NullPointerException at Main.sendTo(Main.java:132) at Main$ServerReceiver.run(Main.java:79)

Main.java 的第 132 行包含while(rs.next()),第 79 行包含sendTo(socket.getInetAddress());. 但是,当我看到数据库时,数据被发送并存储在数据库中。所以,我认为问题出在SELECT查询上。我尝试了来自不同线程的许多可能的 SELECT 查询,但我无法解决问题。我的猜测正确吗?有人可以为我的案例提供真正的 SELECT 查询吗?还是错误是由其他来源触发的?

问题出在光标上。它是空的,我添加了一条if语句:

if(rs!=null) {
        while(rs.next()){//code} 

然后它不会产生任何错误。但是,客户端设备不会从服务器获取任何数据。我该如何解决?

4

2 回答 2

1

您是否检查过 ( T1.ID = T2.ID) 是否存在彼此相等的 ID?否则,您的查询响应为空,因为您的 where 案例拒绝了结果。

有时首先会有一个额外的列。所以也许你的数据没有正确插入?

于 2017-09-26T13:52:15.520 回答
1

我想,将 Double 或 Float 用于 id 目的是一个问题,因为精度始终是个问题。简单地说,当您保存浮点数时,例如 7.2,它可能表示为 7.199999 或 7.199998 或 7.2000001 等,因此 id 将不相等。对于 id,我建议使用整数或 UUID 之类的东西。

于 2017-09-26T14:08:48.990 回答