这是我正在尝试做的事情。我有一个Java程序,它将遥测流解体到各个原始字段中。我将这些原始字段值传递到MySQL表中,其中每列是其中一个字段。在这个数据库中,我还有一个视图,它抓取所有遥测数据并根据原始数据计算一些新的派生列(例如,原始计数到工程单位)。在我的Java程序中,插入后我想从VIEW(raw + derived)中获取相应的行,并将数据传递到其他地方。
最初我以为我可以简单地将原始数据插入到VIEW中,并在Java程序的ResultSet中将行返回给我。不幸的是,数据不会在ResultSet中返回。
我现在尝试做的是将原始数据插入表中(此部分有效),获取主键,然后从VIEW中查找行。我正在努力的部分是从INSERT中检索主键。我正在使用从我的Connection对象生成的PreparedStatement,并为它提供了Statement.RETURN_GENERATED_KEYS。但是,当我在调用executeUpdate()之后在我的语句中调用getGeneratedKeys()时,我的ResultSet始终为空。我可以看到它在行中运行时将行插入到表中......我做错了什么?
如果通过触发器生成主键,是否可以以这种方式检索生成的主键?
更新:我已经尝试将Statement.RETURN_GENERATED_KEYS替换为具有主键列名称的String数组,但这似乎也不起作用。
我为不包括我的代码而道歉,但我很难这样做。我试图尽我所能来描述我正在做的事情。
答案 0 :(得分:0)
我在另一篇文章中看到了这一点。声称工作。这是你的样子吗?
import java.net.URL;
import java.util.ResourceBundle;
import java.util.Timer;
import java.util.TimerTask;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import org.controlsfx.control.Notifications;
public class FXMLDocumentController implements Initializable {
@FXML
private Label label;
@FXML
private void handleButtonAction(ActionEvent event) {
Stage stage = (Stage) label.getScene().getWindow();
stage.hide();
}
public void createNotification() {
Notifications.create()
.text("This is a Notification")
.title("Notifications")
.showInformation();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Platform.runLater(()->createNotification());
}
}, 5000, 10000);
}
}
我使用了SP,这是我所做的一个例子。我用一个进/出的parm来取回它......
Statement stmt = db.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
numero = stmt.executeUpdate();
ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()){
risultato=rs.getInt(1);
}