使用Java的先验未知列中的MySQL数据库中插入UserInput值的通用解决方案,例如
我想在MySQL的表中插入一组值 (例如,
CREATE TABLE Flughafen (
Abkuerzung VARCHAR(3) NOT NULL,
Zeitzone INT,
Standort VARCHAR(255),
Name VARCHAR(255),
Flughafensteuer DOUBLE,
Sicherheitsgebuehren DOUBLE,
PRIMARY KEY (Abkuerzung)
);
INSERT INTO Flughafen VALUES ("AMK", 69, "Germany", "Munich", 30, 50);
这在MySQL Workbench 8.0中起作用,但在我的Java代码中不起作用。 我阅读了有关准备好的语句的Javadoc,但是如果我不知道先验类型,我找不到插入值的任何线索。我的Java代码看起来像这样:
// Laden des JDBC-Treiber für MySQL
String driverClass = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/wwfsaew";
String username = "root";
try {
//Laden des Treibers fuer Java und MySQL
Class.forName(driverClass);
} catch (ClassNotFoundException exc) {
System.out.println("Treiber fehlt");
System.exit(1);
}
try {
// Aufbau der Verbindung
connect = DriverManager.getConnection(url, username, password);
System.out.println("------------ SQL Befehl wird verschickt ---------------");
} catch (SQLException SQLe) {
System.out.println("Verbinden fehlgeschlagen bitte noch einmal probieren!");
SQLe.printStackTrace();
System.exit(5);
}
//Erlaubnis fuer Abfragen an die Datenbank
statement = connect.createStatement();
//Vorabfrage der Tabelle für spätere Eingabe des Benutzers
resultSet = statement.executeQuery("SELECT * FROM " + Tabelle);
System.out.println("--- DatenbankZugriff wird initiiert ---");
String Insertabfrage = resultSet.getMetaData().getColumnName(1);
String Fragezeichen = "?";
for (int i = 2; i<= resultSet.getMetaData().getColumnCount(); i++) {
Insertabfrage += (", " + resultSet.getMetaData().getColumnName(i));
Fragezeichen += ",?";
}
System.out.println(Insertabfrage);
System.out.println("Werte bitte in richtiger Ordnung eingeben und Werte : ");
Scanner sc = new Scanner(System.in);
String SQLInsert = sc.nextLine();
System.out.println(SQLInsert);
----------------------------------------------------------------
Here I want to handle the Statement and insert it into my database.
String sql = "INSERT INTO " + Tabelle + " (" + Insertabfrage + ") VALUES ("
+ " values (" + Fragezeichen + ")";
PreparedStatement preparedStatement = connect.prepareStatement(sql);
----------------------------------------------------------------
resultSet = statement.executeQuery("INSERT INTO " + Tabelle + " (" + Insertabfrage + ") VALUES (" + SQLInsert + " );");
//Ausgaben der Abfrage antworten mit Meta Daten
System.out.println("--- SQL Befehl wurde erfolgreich umgesetzt! ---");
我尝试了很多类似的事情 resultset = statement.executequery(“插入” + tabelle +“(“ + insertabfrage +”)值(“ + sqlinsert +”);“);
> 所以我的问题是,是否有可能获取列的数据类型并将其插入我的数据库WWFSAEW?这样的事情:
preparedStatement.setUniversal(1, InputString(1));
preparedStatement.setUniversal(2, InputString(2));
preparedStatement.setUniversal(3, InputString(3));
I want to insert a whole set of values in my table in MySQL
(e.g.
CREATE TABLE Flughafen (
Abkuerzung VARCHAR(3) NOT NULL,
Zeitzone INT,
Standort VARCHAR(255),
Name VARCHAR(255),
Flughafensteuer DOUBLE,
Sicherheitsgebuehren DOUBLE,
PRIMARY KEY (Abkuerzung)
);
INSERT INTO Flughafen VALUES ("AMK", 69, "Germany", "Munich", 30, 50);
This works in MySQL Workbench 8.0 but not in my Java Code.
I read the JavaDoc about prepared Statements but I didn't find any clues on inserting values if I don't know the type a priori. My Java code looks like this:
// Laden des JDBC-Treiber für MySQL
String driverClass = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://127.0.0.1:3306/wwfsaew";
String username = "root";
try {
//Laden des Treibers fuer Java und MySQL
Class.forName(driverClass);
} catch (ClassNotFoundException exc) {
System.out.println("Treiber fehlt");
System.exit(1);
}
try {
// Aufbau der Verbindung
connect = DriverManager.getConnection(url, username, password);
System.out.println("------------ SQL Befehl wird verschickt ---------------");
} catch (SQLException SQLe) {
System.out.println("Verbinden fehlgeschlagen bitte noch einmal probieren!");
SQLe.printStackTrace();
System.exit(5);
}
//Erlaubnis fuer Abfragen an die Datenbank
statement = connect.createStatement();
//Vorabfrage der Tabelle für spätere Eingabe des Benutzers
resultSet = statement.executeQuery("SELECT * FROM " + Tabelle);
System.out.println("--- DatenbankZugriff wird initiiert ---");
String Insertabfrage = resultSet.getMetaData().getColumnName(1);
String Fragezeichen = "?";
for (int i = 2; i<= resultSet.getMetaData().getColumnCount(); i++) {
Insertabfrage += (", " + resultSet.getMetaData().getColumnName(i));
Fragezeichen += ",?";
}
System.out.println(Insertabfrage);
System.out.println("Werte bitte in richtiger Ordnung eingeben und Werte : ");
Scanner sc = new Scanner(System.in);
String SQLInsert = sc.nextLine();
System.out.println(SQLInsert);
----------------------------------------------------------------
Here I want to handle the Statement and insert it into my database.
String sql = "INSERT INTO " + Tabelle + " (" + Insertabfrage + ") VALUES ("
+ " values (" + Fragezeichen + ")";
PreparedStatement preparedStatement = connect.prepareStatement(sql);
----------------------------------------------------------------
resultSet = statement.executeQuery("INSERT INTO " + Tabelle + " (" + Insertabfrage + ") VALUES (" + SQLInsert + " );");
//Ausgaben der Abfrage antworten mit Meta Daten
System.out.println("--- SQL Befehl wurde erfolgreich umgesetzt! ---");
I tried many things likeresultSet = statement.executeQuery("INSERT INTO " + Tabelle + " (" + Insertabfrage + ") VALUES (" + SQLInsert + " );");
So my Question is, is there a possibility to get the Datatype of the columns and insert it into my database wwfsaew? Something like this:
preparedStatement.setUniversal(1, InputString(1));
preparedStatement.setUniversal(2, InputString(2));
preparedStatement.setUniversal(3, InputString(3));
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我发现问题:
我希望将来对某人有所帮助:)
I found the problems:
I hope this helps somebody in the future :)