Я работаю над веб-приложением, в котором данные будут передаваться между клиентом и сервером.
Я уже знаю, что JavaScript int! = Java int. Потому что Java int не может быть нулевым, верно. Теперь это проблема, с которой я сталкиваюсь.
Я изменил свои переменные Java int на Integer.
public void aouEmployee(Employee employee) throws SQLException, ClassNotFoundException
{
Integer tempID = employee.getId();
String tname = employee.getName();
Integer tage = employee.getAge();
String tdept = employee.getDept();
PreparedStatement pstmt;
Class.forName("com.mysql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/general";
java.sql.Connection con = DriverManager.getConnection(url,"root", "1234");
System.out.println("URL: " + url);
System.out.println("Connection: " + con);
pstmt = (PreparedStatement) con.prepareStatement("REPLACE INTO PERSON SET ID=?, NAME=?, AGE=?, DEPT=?");
pstmt.setInt(1, tempID);
pstmt.setString(2, tname);
pstmt.setInt(3, tage);
pstmt.setString(4, tdept);
pstmt.executeUpdate();
}
Моя проблема здесь:
pstmt.setInt(1, tempID);
pstmt.setInt(3, tage);
Я не могу использовать здесь целочисленные переменные. Я пытался с intgerObject.intValue ();
Но это усложняет ситуацию. Есть ли у нас какие-либо другие методы преобразования или методы преобразования?
Любое исправление было бы лучше.
Как уже писалось в другом месте:
Integer.intValue()
для преобразования из Integer в int. НО, как вы написали, Integer
может быть нулевым, поэтому целесообразно проверить это, прежде чем пытаться преобразовать в int
(или рискнуть получить NullPointerException
).
pstmt.setInt(1, (tempID != null ? tempID : 0)); // Java 1.5 or later
или
pstmt.setInt(1, (tempID != null ? tempID.intValue() : 0)); // any version, no autoboxing
* с использованием значения по умолчанию, равного нулю, также может ничего не делать, отображать предупреждение или ...
В основном я предпочитаю не использовать автоупаковку (вторая строка примера), поэтому ясно, что я хочу делать.
Поскольку вы говорите, что используете Java 5, вы можете использовать setInt
с Integer
из-за автоматической распаковки: pstmt .setInt(1, tempID)
должен работать нормально. В более ранних версиях Java вам пришлось бы вызывать .intValue()
самостоятельно.
Обратное также работает... назначение int
на Integer
автоматически приведет к тому, что int
будет автоматически упаковано с использованием Integer.valueOf (целое)
.
Возможно, в настройках компилятора вашей IDE установлен режим Java 1.4, даже если вы используете Java 5 JDK? В остальном я согласен с другими людьми, которые уже упомянули автоупаковку/распаковку.