Вставка данных в таблицу mySQL с java

У меня есть предопределенная таблица в базе данных mySQL: enter image description here

Я работаю над сохранением данных, введенных от пользователя в базу данных, но я не могу сохранить какие-либо данные в базе данных. С помощью следующего кода я пытаюсь обновить первую строку базы данных (ID: 1 через другие 2: 0). Что я делаю не так?

private java.sql.Connection con = null;
private PreparedStatement pst = null;
private ResultSet rs = null;
private String url = "jdbc:mysql://localhost:8889/deliveryEarn";
private String user = "root";
private String password = "root";

try {
     con = DriverManager.getConnection(url, user, password);
     Statement st = (Statement) con.createStatement(); 

     st.executeUpdate("INSERT INTO incomeCalc " + "VALUES (3, 75, 6, 25, 18.50)");

     con.close();
}

catch (SQLException ex) {
     Logger lgr = Logger.getLogger(deliveryMain.class.getName());
     lgr.log(Level.SEVERE, ex.getMessage(), ex);

 } 

7 ответов


Я думаю, что это не сработает, потому что количество значений меньше, чем количество столбцов в вашей таблице. Что вам нужно сделать, так это указать имя столбцов в соответствии с количеством ваших значений.

INSERT INTO incomeCalc VALUES (3, 75, 6, 25, 18.50)  // error
// the only way this will work is when you have only 5 columns in 
// your table but in your case you have 7 that is why it will not work

он должен быть!--5-->

INSERT INTO incomeCalc(specify columns here to the values bound to)
VALUES (3, 75, 6, 25, 18.50)

w3School: (вставка)

можно записать инструкцию INSERT INTO в двух формах.

в первой форме не указываются имена столбцов, в которых будут находиться данные вставлено, только их значения:

INSERT INTO table_name
VALUES (value1, value2, value3,...)

во второй форме указываются имена столбцов и значения, которые необходимо вставить:

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

ваш оператор Insert должен быть:

"INSERT INTO incomeCalc(ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) " +
"VALUES (3, 75, 6, 25, 18.50)"

другими словами, в вашем заявлении отсутствуют имена столбцов.


необходимо указать имена столбцов, например:

"INSERT INTO incomeCalc (ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) VALUES (3, 75, 6, 25, 18.50)"

A. Либо передайте значения для всех столбцов таблицы в том порядке, в котором они определены в MySQL DB. Здесь мы видим 7 столбцов в вашей таблице, и вы предоставляете только 5 значений...

или

B. Используйте этот синтаксис

INSERT INTO TABLE_NAME (COLUMN_NAMES_SEPARATED_BY_COMMA) VALUES (VALUES_SEPARATED_BY_COMMA)

как munyengm заявление в вас rcase будет : "Вставить в incomeCalc (ID, советы, часы, газ, HOURLY_EARNINGS)" + "Ценности (3, 75, 6, 25, 18.50)"

но вы, вероятно, собираетесь значение цикла и прочее, поэтому я бы рекомендовал использовать подготовленный оператор вместо этого, это предотвращает SQL-инъекцию.

ps = "INSERT INTO incomeCalc(ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) VALUES (?, ?, ?, ?, ?)"

затем

        ps.setInt(index++, id); //id=3
        ps.setInt(index++, tips); //tips=75
        ps.setInt(index++, hours);//hour=6
        ps.setInt(index++, gas);//gas=25
        ps.setFloat(index++, HOURLY_EARNINGS);

первый READONLY = false;

есть некоторые ограничения.Вам нужно положить [Name_table$] и \ до и после COLUMN_NAMES. вот так:

st.executeUpdate("INSERT INTO [IncomeCalc$] (\"ID\", \"TIPS\", \"HOURS\", \"GAS\",\"HOURLY_EARNINGS\") VALUES ('2012-10-25 01:00:00','16.3')");

этот формат работал для меня, как вы видите, никаких дополнительных запятых, косых черт или чего-либо еще не было необходимо:

statement.executeUpdate("INSERT INTO incomeCalc (value1, value2, value99) VALUES (3, 75, 6)");