2016-10-17 1 views
0

Ich muss mehrere einfügen Abfragen mit JDBC, für die ich versuchen, Batch-Anweisung auszuführen. Alles funktioniert gut in meinem Code, aber wenn ich versuche, Werte in der Tabelle zu sehen, ist die Tabelle leer. Hier ist der Code:JDBC: Batch einfügen nicht Wert in die Datenbank einfügen

SessionImpl sessionImpl = (SessionImpl) getSessionFactory().openSession(); 
    Connection conn = (Connection) sessionImpl.connection(); 

    Statement statement = (Statement) conn.createStatement(); 

    for (String query : queries) { 
     statement.addBatch(query); 
    } 
    statement.executeBatch(); 
    statement.close(); 
    conn.close(); 

Und die

List<String> queries 

enthält Abfragen einfügen wie:

insert into demo values (null,'Sharmzad','10006','http://demo.com','3 Results','some values','$44.00','10006P2','No Ratings','No Reviews','Egypt','Duration: 8 hours','tour','Day Cruises'); 

Und die Tabellenstruktur ist wie:

create table demo (ID INTEGER PRIMARY KEY AUTO_INCREMENT,supplierName varchar(200),supplierId varchar(200),supplierUrl varchar(200),totalActivities varchar(200),activityName varchar(200),activityPrice varchar(200),tourCode varchar(200),starRating varchar(200),totalReviews varchar(200),geography varchar(200),duration varchar(200),category varchar(200),subCategory varchar(200)); 

Keine Ausnahme ich s irgendwo geworfen, aber kein Wert wird eingefügt. Kann jemand das erklären?

+0

Entfernen Sie 'null' von einfügen Abfrage –

+0

Wenn ich Null (das ist für Auto-Inkrement-ID) entfernen, erhalte ich eine Ausnahme von "Nicht genügend Spaltenwerte" –

+0

Ich kann 'conn.commit()' nicht sehen 'Sie haben _" autocommit "_ für Ihre Verbindung konfiguriert –

Antwort

5

meisten JDBC-Treiber verwenden autocommit begehen, aber einige von ihnen nicht . Wenn Sie nicht wissen, sollten Sie entweder .setAutoCommit(true) vor der Transaktion oder .commit() danach verwenden.

1

Könnte ein Transaktionsproblem sein. Vielleicht begehen Sie Ihre Transaktion nicht? Wenn ja, ist es normal, nichts in der Datenbank zu sehen.

Sie können prüfen, ob dies der Fall ist, indem Sie einen Client im Transaktionsmodus READ_UNCOMMITTED direkt nach .executeBatch(); (aber vor close()) ausführen und prüfen, ob Zeilen vorhanden sind.

1

Sie sollten keinen Wert ID zuweisen hinzufügen Versorgung alle anderen Spalten

insert into demo 
(
supplierName 
,supplierId 
,supplierUrl 
,totalActivities 
,activityName 
,activityPrice 
,tourCode 
,starRating 
,totalReviews 
,geography 
,duration 
,category 
,subCategory 
) 
values (
'Sharmzad' 
,'10006' 
,'http://demo.com' 
,'3 Results' 
,'some values' 
,'$44.00' 
,'10006P2' 
,'No Ratings' 
,'No Reviews' 
,'Egypt' 
,'Duration: 8 hours 
','tour' 
,'Day Cruises' 
); 

Namen und fügen Sie den Code

+0

ist es notwendig, hinzuzufügen ( Supplier , SupplierID , supplierUrl , totalActivities , Activity , activityPrice , Tourcode , Typs zu einem höheren , Totalreviews , Geographie , Dauer , Kategorie , Unterkategorie ), bevor Werte Erwähnens ? –

+0

@roger_that Wenn Sie nicht alle Spalten zuweisen .. müssen Sie die Abfrage informieren, welche Spalte mit dem zugehörigen Wert übereinstimmt .. und dies geschieht durch eine explizite Benennung – scaisEdge

+0

Hat das getan. Nichts passiert. Muss ich auch die Verbindung herstellen? –