MySqlを使用してJavaでデータベースを操作する方法を学習しようとしています。私はこのエラーが発生しています:com.mysql.jdbc.MysqlDataTruncation:データ切り捨て:正しくないDOUBLE値の切り捨て: 'q'
これは、タイプの不一致を意味しますが、私は理由を理解できません。ここに私のコードです。 ResultSetMetaDataを使用して列のデータ型を表示しました。
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);
}
}
}
これは、あなたが数値列にString
を設定している私の出力
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'
を試してみてください。 'executeQuery(" ... ")'呼び出し用に別々の 'Statement'オブジェクトを作成してください。 – Andreas
'ステートメントs = c.createStatement(); \t ResultSet rs = s.executeQuery( "Select * from emp2211"); ' のようなものですか? 'executeQuery'を呼び出す必要があるたびに' Statement'オブジェクトを作成しなければなりませんか? – hrittwik
いいえ、しかし 'executeQuery'を呼び出すと、同じ[' Statement'](https://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html)上の以前の 'ResultSet'を閉じることになります。オブジェクト。 javadocから:*デフォルトでは、Statementオブジェクトごとに1つのResultSetオブジェクトしか同時に開くことができません。 [...] ** Statementインターフェース内のすべての実行メソッドは、現在のResultSetオブジェクトが現在のResultSetオブジェクトを暗黙的に閉じる** ** *ので、 'PreparedStatement.executeUpdate()'がそれをしなかったことに驚きました。ドライバに依存する可能性があります。 – Andreas