6

mySQL データベースに定義済みのテーブルがあります。 ここに画像の説明を入力

ユーザーから入力されたデータをデータベースに保存する作業を行っていますが、データベースに保存するデータがないようです。次のコードを使用して、データベースの最初の行 (ID: 1 から OTHER 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);

 } 
4

7 に答える 7

9

値の数がテーブルの列の数よりも少ないため、機能しないと思います。あなたがしなければならないことは、値の数と一致するように列の名前を指定することです.

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

そのはず

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

w3School: (挿入)

INSERT INTO ステートメントは 2 つの形式で記述できます。

最初の形式は、データが挿入される列名を指定せず、その値のみを指定します。

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

2 番目の形式は、列名と挿入する値の両方を指定します。

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
于 2012-08-10T15:04:46.417 に答える
3

挿入ステートメントは次のようになります。

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

つまり、ステートメントに列名がありません。

于 2012-08-10T15:03:12.940 に答える
1

初め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')");
于 2012-10-25T12:34:04.107 に答える
1

munyengm のように、rcase のステートメントは次のようになります。

しかし、おそらく値などをループするので、代わりに準備済みステートメントを使用することをお勧めします。これにより、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);
于 2012-08-10T15:15:52.080 に答える
1

ご覧のとおり、この形式は私にとってはうまくいきました。余分なコンマ、スラッシュ、その他は必要ありませんでした。

statement.executeUpdate("INSERT INTO incomeCalc (value1, value2, value99) VALUES (3, 75, 6)");
于 2013-02-19T19:18:21.703 に答える
1

たとえば、列名を指定する必要があります。

"INSERT INTO incomeCalc (ID, TIPS, HOURS, GAS, HOURLY_EARNINGS) VALUES (3, 75, 6, 25, 18.50)"
于 2012-08-10T15:06:14.017 に答える
1

A. _ テーブルのすべての列の値を、MYSQL DB で定義されている順序で渡します。ここでは、テーブルに 7 つの列が表示されていますが、5 つの値しか指定していません...

また

B. _ この構文を利用する

INSERT INTO TABLE_NAME (COLUMN_NAMES_SEPARATED_BY_COMMA) VALUES (VALUES_SEPARATED_BY_COMMA)
于 2012-08-10T15:06:59.143 に答える