IO Erreur: j'Ai moins l'un d'un appel read
Je suis en cours d'exécution hors du temps et des idées. J'ai besoin de faire cette simulation de la réservation, la totalité d'un plan à l'aide de Java et une Base de données Oracle.
Nous avons quelques instructions sur la façon de faire et ce qui est prévu, mais notre code continuera à avoir ce vraiment étrange et inattendue comportement.
La base de données ressemble à ceci:
Nous avons besoin de disposer d'un pool de threads en cours d'exécution en permanence pour simuler 10 utilisateurs simultanés, j'essaie de réserver un avion. Lorsqu'un thread se termine, un autre prend sa place. Certains d'entre les fils ont à faire instantanément (hasard) à la fois de réserve et de livre. D'autres seront de la réserve, puis de décider d'une seconde s'ils veulent réserver ou pas. S'ils décident d'attendre et livre un autre thread de réserve, dans l'intervalle, ce qui signifie que le thread de la perdre de réservation et prendra fin. Il peut aussi attendre une longue période de temps, dans lequel il sera considéré comme un délai d'attente.
Maintenant, voici l'étrange parties:
- Il me dit alors l'erreur du titre.
- Montre alors moi pour l'HelperClass.java ligne sur la façon de vérifier si tout est réservé à l' (inclus ci-dessous).
De Master.java
public static void main(String[] args) throws InterruptedException, ExecutionException {
long start = System.nanoTime();
Random r = new Random(start);
ExecutorService pool = Executors.newFixedThreadPool(10);
int threadsStarted = 0;
List<Future<Integer>> results = new ArrayList<>();
do {
//TODO: Check for available seats left
long id = r.nextLong();
Future<Integer> submit = pool.submit(new UserThread(id));
results.add(submit);
threadsStarted++;
id++;
} while (!HelperClass.isAllBooked("CR9"));
pool.shutdown();
De HelperClass.java
public static boolean isAllBooked(String plane_no) {
String sql = "SELECT * FROM SEAT WHERE plane_no=?";
try(Connection conn = getConnection("db_010", "db2014");
PreparedStatement st = conn.prepareStatement(sql)) {
st.setString(1, plane_no);
ResultSet rs = st.executeQuery();
while (rs.next()) {
int i = rs.getInt("BOOKED");
if (rs.wasNull()) {
return false;
}
}
} catch (SQLException ex) {
System.out.println("[HELPER CLASS] SQL ERROR: " + ex.getMessage());
}
return true;
}
De ne pas remplir ce poste avec le code étape par étape, j'ai juste arrêter ici et vous fournir si vous avez besoin de plus de voir les problèmes dans le présent code. Veuillez noter que ceci est de prototypage code et n'est pas censé être étonnamment sûr de le suivre ou de chaque code d'éthique sur la terre.
De la pile:
[HELPER CLASS] SQL ERROR: IO Error: Got minus one from a read call
Exception in thread "main" java.lang.NullPointerException
at dbassignment4.HelperClass.isAllBooked(HelperClass.java:50)
at dbassignment4.Master.main(Master.java:36)
apr 28, 2014 8:02:59 PM dbassignment4.UserThread getConnection
SEVERE: null
java.sql.SQLRecoverableException: IO Error: Got minus one from a read call
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:673)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:221)
at dbassignment4.UserThread.getConnection(UserThread.java:76)
at dbassignment4.UserThread.reserve(UserThread.java:63)
at dbassignment4.UserThread.call(UserThread.java:35)
at dbassignment4.UserThread.call(UserThread.java:21)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: oracle.net.ns.NetException: Got minus one from a read call
at oracle.net.ns.Packet.receive(Packet.java:314)
at oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:153)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:263)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
... 15 more
BUILD STOPPED (total time: 36 seconds)
Aussi, c'est probablement mieux si vous mettez de la classe thread en arrière dans la question
J'ai fait le replacer, et il dit: "Exception in thread "main" java.lang.NullPointerException". Je suis à la recherche à la méthode d'assistance fournis également dans la question et rien ne semble être null.
la ligne en disant que les NPE est sur?
J'ai inclus l'ensemble de la pile maintenant.
OriginalL'auteur OmniOwl | 2014-04-28
Vous devez vous connecter pour publier un commentaire.
Vous obtenez IO Exception. Les raisons possibles pour cette . Votre serveur ne répond pas. si son travail de vérification de la connexion par le biais de certains outils ( sqlplus/crapaud/tns) , si tout fonctionne, vous pouvez recommencer ( si la source de données impliqués re-créer ou actualiser l'état)
Semble que vous êtes l'obtention d'une connexion dans votre classe d'assistance à l'aide de la méthode getconnection (). Dans lequel vous pouvez à l'exception de la connexion et de faire une opération. Vous obtenez l'exception de Pointeur Null à la méthode getConnection. Vous avez pour nous montrer à donner ce qui est une cause de Nullpointer.
Enfin, vous pouvez simplement écrire une requête pour renvoyer la valeur true/false si une seule de le siège n'est pas réservé au lieu d'itération tous les résultats et de s'arrêter quand son trouve pas réservé.
OriginalL'auteur Mani
Je pense que cela pourrait être le problème
Si rs est NULLE, alors vous appelez getInt sur une valeur null, provoquant un NPE
Ouais, pour une raison quelconque, la connexion est nulle. Je ne peux pas comprendre pourquoi, depuis qu'il a fonctionné jusqu'à maintenant.
pastebin.com/n2AhPA6S
'rs' jamais null.
OriginalL'auteur Marshall Tigerus