Ik heb een java applicatie die meerdere databaseconnecties gebruikt naar 1 Microsoft SQL server. De driver die ik gebruik is die van inetsoftware [com.inet.tds.Driver](http://www.inetsoftware.de)
nu heb ik 1 databaseconnectie speciaal voor batchinserts, dit zijn gemiddeld 2000 records ineens. Dit doe ik met de volgende code:
Nu voor ik tijdens deze batchinserts met een andere connectie op dezelfde tabel een query uit :
query = "SELECT max(id) FROM tabel";
Echter als deze query wordt uitgevoerd tijdens het uitvoeren van dat batchstatement , dan krijg ik een foutcode 69 geloof ik of 61, weet ik even niet meer.
met als mededeling "I detected a deadlock situation ,
and found this query :... de select ,max(id) as the deadlock victim, try again".
Ik snap wat er fout gaat en wat ik er aan moet doen,
nl. even die "select max(id)" query pas uitvoeren als de batch compleet is. Echter snap ik de foutmelding niet, ik weet wat een deadlock is, ik weet ook sql server meerdere connecties afhandeld, ik snap alleen niet hoe in dit geval een deadlock situatie kan optreden.
Of ligt het aan heel iets anders, bijvoorbeeld ik heb het serialiseerbare transactie voor de connectie, moet dit naar read only, en als die naar read only is , kan ik dan wel meerdere statements uitvoeren over 1 connectie , dus 1 resultset uitlezen , terwijl een andere connectie al weer wordt geopend?
[De oplossing van het niet queryen geeft geen foutmelding]
Hopelijk is het duidelijk wat ik graag zou willen weten...
nu heb ik 1 databaseconnectie speciaal voor batchinserts, dit zijn gemiddeld 2000 records ineens. Dit doe ik met de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| java.sql.ResultSet results = DatabaseManager.performQuery( query , DatabaseManager.DB_SILVER );
DatabaseManager.connection_batch.setAutoCommit(false);
java.sql.Statement stmt = DatabaseManager.connection_batch.createStatement();
while ( results.next() )
{
String destination = results.getString( "GSM" );
// wat code weggelaten, om de insertstring samen te stellen
stmt.addBatch( insert_string );
}
int[] updateCounts = stmt.executeBatch();
stmt.getConnection().commit();
stmt.close();
results.close();
DatabaseManager.connection_batch.setAutoCommit(true); |
Nu voor ik tijdens deze batchinserts met een andere connectie op dezelfde tabel een query uit :
query = "SELECT max(id) FROM tabel";
Echter als deze query wordt uitgevoerd tijdens het uitvoeren van dat batchstatement , dan krijg ik een foutcode 69 geloof ik of 61, weet ik even niet meer.
met als mededeling "I detected a deadlock situation ,
and found this query :... de select ,max(id) as the deadlock victim, try again".
Ik snap wat er fout gaat en wat ik er aan moet doen,
nl. even die "select max(id)" query pas uitvoeren als de batch compleet is. Echter snap ik de foutmelding niet, ik weet wat een deadlock is, ik weet ook sql server meerdere connecties afhandeld, ik snap alleen niet hoe in dit geval een deadlock situatie kan optreden.
Of ligt het aan heel iets anders, bijvoorbeeld ik heb het serialiseerbare transactie voor de connectie, moet dit naar read only, en als die naar read only is , kan ik dan wel meerdere statements uitvoeren over 1 connectie , dus 1 resultset uitlezen , terwijl een andere connectie al weer wordt geopend?
[De oplossing van het niet queryen geeft geen foutmelding]
Hopelijk is het duidelijk wat ik graag zou willen weten...