2010-10-19 4 views
4

Если есть нулевое значение, хранящееся в столбце MySQL INT, оно будет возвращать 0 при доступе к технологиям типа JPA. Если значение 0 также сохраняется в столбце, как я могу различать нуль и 0?Как отличить 0 от нуля в столбце INT в MySQL

+1

см http://dev.mysql.com/doc/refman/5.5/en/working-with-null.html также проверить функцию IFNULL() –

+0

Errm, вот где входит тип Java Integer, не так ли? Если класс есть, то он может быть NULL или иметь значение – DataNucleus

ответ

5

Не могу поверить, что это так.
Изменить тип примитива для типа объекта в вашей организации (пример: Int -> Integer)

+2

Почему вы не верите, что 'int' не может содержать' null'? – BalusC

+0

Он также работает на MS SQL Server. Благодаря! –

2

Чтобы различать между 0 и NULL, вы должны использовать ResultSet.wasNull() метод, как здесь:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

public class Main { 
public static void main(String[] args) throws Exception {  
Connection conn = getConnection(); 
Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
    ResultSet.CONCUR_UPDATABLE); 

st.executeUpdate("create table survey (id int,name varchar(30));"); 
st.executeUpdate("insert into survey (id,name) values (1,'nameValue')"); 
st.executeUpdate("insert into survey (id,name) values (2,null)"); 
st.executeUpdate("insert into survey (id,name) values (3,'Tom')"); 
st = conn.createStatement(); 
ResultSet rs = st.executeQuery("SELECT * FROM survey"); 

while (rs.next()) { 
    String name = rs.getString(2); 
    if (rs.wasNull()) { 
    System.out.println("was NULL"); 
    } else { 
    System.out.println("not NULL"); 
    } 
} 

rs.close(); 
st.close(); 
conn.close(); 
} 
+2

OP использует JPA. Тогда нет средств «сырого» JDBC. Простое изменение 'int' в' Integer' является обычным подходом. – BalusC

+0

Я знаю это, но сырой JDBC помогает понять разницу между нулем и 0. – barmaley

1

The как я решил это следующее:

Integer id; 
Object o = rs.getObject("ID_COLUMN"); 
if(o!=null){ 
    id = (Integer) o; 
} else { 
    id = null; 
} 
+0

Эти семь строк могут быть записаны как один без внесения * любой * разницы: «Целое число id = (Целое число) rs.getObject (« ID_COLUMN »); –

Смежные вопросы