2012-08-10 61 views
6

que tienen una tabla predefinida en una base de datos MySQL: enter image description hereInsertar datos en la tabla de MySQL con Java

estoy trabajando en guardar los datos introducidos desde el usuario a la base de datos pero no puede parecer a cualquier dato de ahorrar en el base de datos. Con el siguiente código, intento actualizar la primera fila de la base de datos (ID: 1 a OTRA 2: 0). ¿Qué estoy haciendo mal?

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); 

} 
+0

Si no está recibiendo un error, cambie el SqlException a excepciones y vea qué error obtiene –

+0

¿por qué usar sql recto para hacer su inserción y no un ORM como hibernar o Ibatis en su lugar? – Chris

+0

Sí, es mejor usar ORM como Hibernate o iBatis –

Respuesta

9

Creo que no funcionará porque el número de valores es menor que el número de columnas en su tabla. Lo que tienes que hacer es especificar el nombre de las columnas para que coincida con el número de tus valores.

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 

debe ser

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

w3School: (INSERT)

Es posible escribir la instrucción INSERT INTO en dos formas.

La primera forma no especifica los nombres de columna en la que se insertan los datos, sólo sus valores:

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

La segunda forma especifica tanto los nombres de columna y los valores de inclusión:

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

Su instrucción de inserción debe ser:

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

En otras palabras, su estado de cuenta falte nombres de columna.

+0

Los nombres de columna en una instrucción 'INSERT' son opcionales, aunque no es aconsejable no especificarlos, consulte http://dev.mysql.com/doc/refman/ 5.5/es/insert.html –

+0

Los nombres de columna NO son opcionales si tiene una instrucción de inserción con menos columnas que el número de columna real en la tabla. – AlenBer

1

es necesario especificar los nombres de las columnas, por ejemplo:

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

A. Pase los valores para todas las columnas de la tabla en el orden en que están definidos en MYSQL DB. Aquí podemos ver 7 columnas en su mesa y le están proporcionando sólo 5 valores ...

o

B. Hacer uso de esta sintaxis

INSERT INTO TABLE_NAME (COLUMN_NAMES_SEPARATED_BY_COMMA) VALUES (VALUES_SEPARATED_BY_COMMA) 
1

como munyengm la declaración en que rcase sería: "INSERT INTO incomeCalc (ID, TIPS, HORAS, GAS, HOURLY_EARNINGS)" + "VALUES (3, 75, 6, 25, 18.50) "

pero probablemente va a hacer un bucle de valor y esas cosas, así que recomendaría usar una declaración preparada en su lugar, esto evitaría la inyección de SQL.

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

continuación

 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); 
1

Primera READONLY = false;

hay algunas restrictions.You necesita poner [Name_table$] y \ antes y después de la COLUMN_NAMES. de esta manera:

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

Este formato trabajó para mí como lo ves, no comas adicionales, barras o era necesaria ninguna otra cosa:

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