使用Java的先验未知列中的MySQL数据库中插入UserInput值的通用解决方案,例如

发布于 2025-02-01 14:58:10 字数 3413 浏览 3 评论 0原文

我想在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 like
resultSet = 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

画尸师 2025-02-08 14:58:10

我发现问题:

  1. 字符串SQL有缺陷 - &gt;双值()。
  2. 没有
  3. Xtremebaumer的循环准备的执行命令,在评论中
  4. for Extern键。
    我希望将来对某人有所帮助:)

I found the problems:

  1. String sql was flawed --> double values().
  2. There wasn't an execute command for preparedStatement
  3. for loop from XtremeBaumer in the comments
  4. ExceptionHandling for Foreign Keys
    I hope this helps somebody in the future :)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文