diff --git a/simplest-sqlite.cabal b/simplest-sqlite.cabal
--- a/simplest-sqlite.cabal
+++ b/simplest-sqlite.cabal
@@ -2,7 +2,7 @@
 cabal-version: >= 1.8
 
 name: simplest-sqlite
-version: 0.0.0.8
+version: 0.0.0.9
 stability: Experimental
 author: YoshikuniJujo <PAF01143@nifty.ne.jp>
 maintainer: YoshikuniJujo <PAF01143@nifty.ne.jp>
@@ -23,7 +23,7 @@
 source-repository this
     type: git
     location: git://github.com/YoshikuniJujo/test_haskell
-    tag: simplest-sqlite-0.0.0.8
+    tag: simplest-sqlite-0.0.0.9
 
 library
     hs-source-dirs: src
diff --git a/src/Database/SmplstSQLite3.hs b/src/Database/SmplstSQLite3.hs
--- a/src/Database/SmplstSQLite3.hs
+++ b/src/Database/SmplstSQLite3.hs
@@ -3,9 +3,9 @@
 module Database.SmplstSQLite3 (
 	-- * Functions
 	withSQLite, withPrepared,
-	step, reset, bind, bindN, column, SQLiteData, SQLiteDataList,
+	step, reset, bind, SQLiteData(..), SQLiteDataList(..), columnType,
 	-- * Types
-	SQLite, Stmt, Result(..),
+	SQLite, Stmt, Result(..), Type(..),
 	) where
 
 import Control.Applicative
@@ -118,6 +118,10 @@
 	bindN = bindNList
 	column = columnList
 
+instance SQLiteData () where
+	bindN = sqlite3BindNull
+	column _ _ = return ()
+
 instance SQLiteData Int where
 	bindN = sqlite3BindInt
 	column (Stmt sm) i =
@@ -138,6 +142,8 @@
 	column (Stmt sm) i = T.decodeUtf8 <$>
 		(BS.packCString =<< c_sqlite3_column_text sm (fromIntegral i))
 
+foreign import ccall unsafe "sqlite3.h sqlite3_bind_null" c_sqlite3_bind_null ::
+	Ptr Stmt -> CInt -> IO CInt
 foreign import ccall unsafe "sqlite3.h sqlite3_bind_int" c_sqlite3_bind_int ::
 	Ptr Stmt -> CInt -> CInt -> IO CInt
 foreign import ccall unsafe "sqlite3.h sqlite3_bind_text" c_sqlite3_bind_text ::
@@ -148,6 +154,12 @@
 bind :: SQLiteData a => Stmt -> String -> a -> IO ()
 bind sm ph x = flip (bindN sm) x =<< sqlite3BindParameterIndex sm ph
 
+sqlite3BindNull :: Stmt -> Int -> () -> IO ()
+sqlite3BindNull (Stmt sm) i _ = do
+	ret <- c_sqlite3_bind_null sm (fromIntegral i)
+	when (ret /= sQLITE_OK) . ioError . userError $
+			"Cannot bind null: error code (" ++ show ret ++ ")"
+
 sqlite3BindInt :: Stmt -> Int -> Int -> IO ()
 sqlite3BindInt (Stmt sm) i n = do
 	ret <- c_sqlite3_bind_int sm (fromIntegral i) (fromIntegral n)
@@ -191,3 +203,16 @@
 	ret <- c_sqlite3_reset sm
 	when (ret /= sQLITE_OK) . ioError . userError $
 		"Cannot reset stmt: error code (" ++ show ret ++ ")"
+
+data Type = Integer | Float | Text | Blob | Null deriving Show
+
+foreign import ccall unsafe "sqlite3.h sqlite3_column_type"
+	c_sqlite3_column_type :: Ptr Stmt -> CInt -> IO CInt
+
+columnType :: Stmt -> Int -> IO Type
+columnType (Stmt ps) i = (<$> c_sqlite3_column_type ps (fromIntegral i)) $ \t ->
+	case () of _	| t == sQLITE_INTEGER -> Integer
+			| t == sQLITE_FLOAT -> Float
+			| t == sQLITE_TEXT -> Text
+			| t == sQLITE_BLOB -> Blob
+			| otherwise -> Null
diff --git a/src/Database/SmplstSQLite3/Constants.hsc b/src/Database/SmplstSQLite3/Constants.hsc
--- a/src/Database/SmplstSQLite3/Constants.hsc
+++ b/src/Database/SmplstSQLite3/Constants.hsc
@@ -1,8 +1,8 @@
 #include <sqlite3.h>
 
 module Database.SmplstSQLite3.Constants (
-	sQLITE_OK, sQLITE_ERROR, sQLITE_BUSY,
-	sQLITE_ROW, sQLITE_DONE
+	sQLITE_OK, sQLITE_ERROR, sQLITE_BUSY, sQLITE_ROW, sQLITE_DONE,
+	sQLITE_INTEGER, sQLITE_FLOAT, sQLITE_TEXT, sQLITE_BLOB, sQLITE_NULL
 	) where
 
 import Foreign.C.Types
@@ -13,3 +13,10 @@
 sQLITE_BUSY = #const SQLITE_BUSY
 sQLITE_ROW = #const SQLITE_ROW
 sQLITE_DONE = #const SQLITE_DONE
+
+sQLITE_INTEGER, sQLITE_FLOAT, sQLITE_TEXT, sQLITE_BLOB, sQLITE_NULL :: CInt
+sQLITE_INTEGER = #const SQLITE_INTEGER
+sQLITE_FLOAT = #const SQLITE_FLOAT
+sQLITE_TEXT = #const SQLITE_TEXT
+sQLITE_BLOB = #const SQLITE_BLOB
+sQLITE_NULL = #const SQLITE_NULL
