2012-08-10 24 views
6

Ho una tabella predefinita in un database MySQL: enter image description hereinserire i dati nella tabella di MySQL con Java

Sto lavorando sul salvataggio dei dati immessi dall'utente al database ma i cant sembrano tutti i dati da salvare nel Banca dati. Con il seguente codice sto provando ad aggiornare la prima riga del database (ID: da 1 a OTHER 2: 0). Che cosa sto facendo di sbagliato?

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

Se il tuo non ottenere un errore, modificare lo SqlException ad eccezione ed vedi quale errore ottieni –

+0

perché usare sql dritto per fare il tuo inserto e non un ORM come ibernato o Ibatis invece? – Chris

+0

Sì, è meglio usare ORM come Hibernate o iBatis –

risposta

9

Penso che non funzionerà perché il numero di valori è inferiore al numero di colonne nella tabella. Quello che devi fare è specificare il nome delle colonne in modo che corrisponda al numero dei tuoi valori.

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 

dovrebbe essere

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

w3School: (INSERT)

E 'possibile scrivere INSERT INTO in due forme.

La prima forma non specifica i nomi delle colonne in cui verranno inseriti i dati, solo i loro valori:

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

La seconda forma specifica sia i nomi di colonna ei valori da inserire:

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

La sua dichiarazione inserto dovrebbe essere:

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

In altre parole la sua dichiarazione manca nomi delle colonne.

+0

I nomi delle colonne in un'istruzione 'INSERT' sono facoltativi, anche se non è saggio non specificarli, vedere http://dev.mysql.com/doc/refman/ 5.5/it/insert.html –

+0

I nomi di colonna NON sono facoltativi se nella tabella è presente un'istruzione di inserimento con meno colonne del numero di colonna reale. – AlenBer

1

è necessario specificare i nomi delle colonne, ad esempio:

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

A. Passare i valori per tutte le colonne della tabella nell'ordine in cui sono definiti nel DB MYSQL. Qui possiamo vedere 7 colonne della tabella e si sta fornendo solo i 5 valori ...

o

B. Sfruttate questa sintassi

INSERT INTO TABLE_NAME (COLUMN_NAMES_SEPARATED_BY_COMMA) VALUES (VALUES_SEPARATED_BY_COMMA) 
1

come munyengm la dichiarazione in voi rcase sarebbe: "INSERT INTO incomeCalc (ID, TIPS, ORE, GAS, HOURLY_EARNINGS)" + "VALORI (3, 75, 6, 25, 18.50) "

ma probabilmente si andrà al valore del ciclo e cose quindi consiglierei di utilizzare una dichiarazione preparata, in questo modo si evita l'iniezione sql.

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

poi

 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

Prima READONLY = false;

ci sono alcune restrictions.You bisogno di mettere [Name_table$] e \ prima e dopo la COLUMN_NAMES. in questo modo:

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

Questo formato ha funzionato per me, come si vede, non le virgole in più, le barre o qualsiasi altra cosa era necessario:

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