Ich versuche zu lernen, wie man mit einer Datenbank in Java mit MySql arbeitet. Ich habe diesen Fehler:com.mysql.jdbc.MysqlDataTruncation: Datenabkürzung: Abgeschnitten inkorrekt DOUBLE-Wert: 'q'
was bedeutet, ich habe Typ Mismatch, aber ich kann nicht herausfinden, warum. Hier ist mein Code. Ich habe ResultSetMetaData eingefügt, um die Datentypen von Spalten anzuzeigen.
import java.sql.*;
public class Prep {
public static void main(String[] args) throws SQLException {
try {
Connection c=DriverManager.getConnection(host, username, password);
PreparedStatement pstmt=c.prepareStatement("update emp2211 set name=? where id=?");
ResultSet rs = pstmt.executeQuery("Select * from emp2211");
ResultSetMetaData rsmd= rs.getMetaData();
System.out.println("Total columns: "+rsmd.getColumnCount());
System.out.println("Column Name of 1st column: "+rsmd.getColumnName(1));
System.out.println("Column Type Name of 1st column: "+rsmd.getColumnTypeName(1));
System.out.println("Column Name of 2nd column: "+rsmd.getColumnName(2));
System.out.println("Column Type Name of 2nd column: "+rsmd.getColumnTypeName(2));
pstmt.setInt(1, 800);
pstmt.setString(2, "q");
pstmt.executeUpdate();
while(rs.next()){
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
}
pstmt.close();
c.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
Das ist mein Ausgang
Total columns: 2
Column Name of 1st column: id
Column Type Name of 1st column: INT
Column Name of 2nd column: name
Column Type Name of 2nd column: VARCHAR
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'q'
Sie sollten * * kein 'PreparedStatement' als reguläres' Statement' wiederverwenden. Erstellen Sie ein separates Statement-Objekt für den Aufruf executeQuery ("..."). – Andreas
'Anweisung s = c.createStatement(); \t ResultSet rs = s.executeQuery ("Wählen * aus emp2211"); ' gefällt das? Muss ich jedes Mal ein Statement-Objekt erstellen, wenn ich 'executeQuery' aufrufen muss? – hrittwik
Nein, aber der Aufruf von 'executeQuery' schließt alle vorherigen 'ResultSet' auf demselben [' Statement'] (https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html) Objekt. Von javadoc: * Standardmäßig kann nur ein ResultSet-Objekt pro Statement-Objekt gleichzeitig geöffnet sein. [...] ** Alle Ausführungsmethoden in der Statement-Schnittstelle schließen implizit das aktuelle ResultSet-Objekt einer Anweisung, wenn eine offene existiert. **. * Ich war überrascht zu sehen, dass 'PreparedStatement.executeUpdate()' das nicht tat. Könnte vom Fahrer abhängig sein. – Andreas