0
我目前正在学习JavaFX和Sqlite。JavaFX Sqlite插入外键
我有我与MySQL的经理建立了一个SQLite数据库,已经有外键的规则等
例如用户和地址:
CREATE TABLE "Benutzer" ("Benutzername" TEXT PRIMARY KEY NOT NULL , "Vorname" VARCHAR, "Nachname" VARCHAR, "Email" TEXT UNIQUE , "Passwort" TEXT, "AdresseID" INTEGER, FOREIGN KEY(AdresseID) REFERENCES Adresse(AdresseID))
CREATE TABLE "Adresse" ("AdresseID" INTEGER PRIMARY KEY NOT NULL , "Land" VARCHAR, "Stadt" VARCHAR, "Straße" TEXT, "Hausnr." INTEGER)
我连接数据库,以我的JavaFX应用程序,现在我正在尝试创建注册功能,因此新用户可以在fxml模板中填写“Benutzername”,“Vorname”等,以及他的地址“Land”,“Stadt”等。
Here形式如下:
添加这些值到数据库的作品,但我没有一个想法如何告诉JavaFX的是其插入该当前用户必须采取其插入当前ADRESS(其AdressID)为外键。
我是指导员研究和发现事物一样
mysql_insert_id返回由当前正在使用的数据库连接生成的最后一个自动递增值。
但我不知道如何访问它。
这就是我的模型,我用它来填补数据到我的数据库:
public class RegisterModel {
Connection conection;
// Konstruktor
public RegisterModel() {
conection = SqliteConnection.Connector();
// Wenn die Verbindung nicht erfolgreich ist, dann App schließen
if (conection == null) {
System.out.println("connection not successful");
System.exit(1);
}
}
public boolean isDbConnected() {
try {
return !conection.isClosed();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
public boolean RegisterUser(String user_benutzername, String user_vorname, String user_nachname, String user_email,
String user_passwort, String adress_land, String adress_stadt, String adress_strasse,
String adress_hausnummer) throws SQLException {
PreparedStatement preparedStatement = null;
PreparedStatement preparedStatement_for_adress = null;
// or ignore besprechen
String query = "insert or ignore into Benutzer (Benutzername, Vorname, Nachname, Email, Passwort) values(?,?,?,?,?)";
String query_adress = "insert into Adresse (Land, Stadt, Straße, 'Hausnr.') values(?,?,?,?)";
try {
preparedStatement = conection.prepareStatement(query);
preparedStatement.setString(1, user_benutzername);
preparedStatement.setString(2, user_vorname);
preparedStatement.setString(3, user_nachname);
preparedStatement.setString(4, user_email);
preparedStatement.setString(5, user_passwort);
System.out.println("Benutzer wurde eingefuegt");
preparedStatement_for_adress = conection.prepareStatement(query_adress);
preparedStatement_for_adress.setString(1, adress_land);
preparedStatement_for_adress.setString(2, adress_stadt);
preparedStatement_for_adress.setString(3, adress_strasse);
preparedStatement_for_adress.setString(4, adress_hausnummer);
System.out.println("Adresse wurde eingefügt");
preparedStatement.executeUpdate();
preparedStatement_for_adress.executeUpdate();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
preparedStatement.close();
preparedStatement_for_adress.close();
}
}
}
我认为必须有一个第三查询这需要当前ADRESS的AdressID并给它分配作为他的地址给当前用户?因此,多数民众赞成在interessting部分:
String query = "insert or ignore into Benutzer (Benutzername, Vorname, Nachname, Email, Passwort) values(?,?,?,?,?)";
String query_adress = "insert into Adresse (Land, Stadt, Straße, 'Hausnr.') values(?,?,?,?)";
的AdressID在用户表已经创建,这就是为什么有一个红色的领域,但您的解决方案可以帮助!我之前用错了顺序,我现在正在吃,但会在20-30分钟内尝试。 – Roman
@Roman是我的不好,我编辑了我的答案:)享受你的用餐! – Swag
谢谢,这工作,现在可以开始工作,如果地址对于新用户来说是相同的,那么它不应该创建新的地址 – Roman