java.sql.SQLException: Fehlender IN- oder OUT-Parameter bei index :: 1
Ich habe einige Java-1.6-Oracle11g-JDBC (mit OJDBC 6) code (unten). Ich bin immer eine Ausnahme - java.sql.SQLException: Missing IN or OUT parameter at index:: 1
Warum ist das passiert und wie kann ich es beheben ?
Meiner Ausgabe-
create CREATE TABLE employee(emp_name varchar(25),emp_address varchar(25))
insert INSERT INTO employee(jim,germany) values(?,?)
Exception: java.sql.SQLException: Missing IN or OUT parameter at index:: 1
Den code-
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
public class Oracle {
public static void main(String[]args)
{
try
{
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe", "newman", "123456");
Statement stmt = con.createStatement();
String create = "CREATE TABLE employee(emp_name varchar(25),emp_address varchar(25))";
System.out.println("create " + create);//
stmt.execute(create);
//insert 1st row
String inserting = "INSERT INTO employee(hans,germany) values(?,?)";
System.out.println("insert " + inserting);//
PreparedStatement ps = con.prepareStatement(inserting);
ps.executeUpdate();
//insert 2nd row
inserting = "INSERT INTO employee(david,austria) values(?,?)";
System.out.println("insert " + inserting);//
ps = con.prepareStatement(inserting);
ps.executeUpdate();
}catch(SQLException ex){System.out.println("Exception: " + ex);}
}
}
BEARBEITEN -
Um den code zu korrigieren, verwenden wir-
//einfügen 1. Reihe
String inserting = "INSERT INTO
employee(emp_name,emp_address) values(?,?)";
PreparedStatement ps = con.prepareStatement(inserting);
System.out.println("insert " + inserting);//
ps.setString(1, "hans");
ps.setString(2, "germany");
ps.executeUpdate();
//einfügen " 2. Reihe
inserting = "INSERT INTO
employee(emp_name,emp_address) values(?,?)";
ps = con.prepareStatement(inserting);
System.out.println("insert " + inserting);//
ps.setString(1, "david");
ps.setString(2, "austria");
ps.executeUpdate();
InformationsquelleAutor der Frage sweet dreams | 2012-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht, wie SQL funktioniert:
Die Werte
(hans,germany)
sollte in der Spalte Namen(emp_name, emp_address)
. Die Werte sind von Ihrem Programm, indem Sie dieStatement.setString(pos,value)
Methoden. Es ist beschwert, weil Sie sagte, es waren zwei Parametern (das Fragezeichen), aber nicht die Werte liefern.Sollten Sie erstellen Sie ein PreparedStatement-und dann die Einstellung von Parameterwerten in:
InformationsquelleAutor der Antwort Jim Garrison
Müssen Sie die Spalte-Namen und legen Sie dann die Werte einfügen (sowohl ? markiert):
InformationsquelleAutor der Antwort Frank Orellana
Das erste problem ist, dass Ihre Abfrage-string ist falsch:
Denke ich:
"INSERT INTO employee(hans,germany) values(?,?)"
sollte wie folgt sein:"INSERT INTO employee(name,country) values(?,?)"
Das andere problem ist, dass Sie einen parametrisierten PreparedStatement und Sie setzen nicht die Parameter, bevor Sie es.
Sollten Sie fügen Sie diese zu Ihrem code:
InformationsquelleAutor der Antwort Razvan
In Ihren INSERT-Anweisungen:
Du hast deine Werte, wo die Feldnamen gehören. Ändern Sie es zu:
Wenn Sie zu laufen waren, die Anweisung von der SQL-Eingabeaufforderung, würde es so Aussehen:
Beachten Sie, dass Sie brauchen, um in einfache Anführungszeichen um den string/varchar-Werte.
Darüber hinaus sind Sie auch nicht hinzufügen alle Parameter, die Ihre vorbereitete Anweisung. Das ist das, was tatsächlich verursacht die Fehler, die Sie sehen. Versuchen Sie dies:
Auch (nach Oracle), können Sie mit "ausführen" für jede SQL-Anweisung. Mit "executeUpdate" wäre auch gültig, in dieser situation, das wäre eine Ganzzahl zurück, um anzuzeigen, die Anzahl der betroffenen Zeilen.
InformationsquelleAutor der Antwort Aaron
Siehe den link unten für Informationen zur Verwendung von PreparedStatement. Ich habe auch zitiert aus dem link.
http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
InformationsquelleAutor der Antwort Aaron Kurtzhals