幸运的是,JDBC 程序员通常并不需要自己去关心目标数据库所用的实际 SQL 类型的名称。大多数时候,JDBC 程序员将根据一些现有的数据库表来进行编程。他们无须关心用于创建这些表的确切 SQL 类型的名称。
JDBC 在 java.sql.Types 类中定义了一系列的常规 SQL 类型标识符。这些类型可用于表示那些最为常用的 SQL 类型。在用 JDBC API 编程时,程序员通常可以使用这些 JDBC 类型来引用一般的 SQL 类型,而无须关心目标数据库所用的确切 SQL 类型的名称。在下一节中将对这些 JDBC 类型进行仔细说明。
程序员用到 SQL 类型名称的主要地方是在用 SQL 的 CREATE TABLE 语句创建新的数据库表时。这种情况下,程序员必须注意应该使用目标数据库所支持的 SQL 类型名称。如果需要知道各种 SQL 类型在某个特定的数据库中的行为的确切定义,我们建议查阅一下数据库文档。
如果想要编写一种可在各种数据库上创建表的可移植 JDBC 程序,用户主要有两个选择。第一个选择是:限制自己只使用那些被广为接受的 SQL 类型名称(例如 INTEGER、NUMERIC 或VARCHAR)。这些类型有可能能适应所有的数据库。第二个选择是:用 java.sql.DatabaseMetaData.getTypeInfo 方法来找出给定的数据库实际上支持哪些 SQL 类型,然后选择与给定 JDBC 类型相匹配的特定于数据库的 SQL 类型名。
JDBC 定义了一个从 JDBC 数据库类型到 Java 类型的标准映射。例如,JDBC 的 INTEGER 类型通常映射为 Java 的 int 类型。这可支持简单的接口,将 JDBC 值读写为简单的 Java 类型。
Java 类型不必与 JDBC 类型完全形同;它们只须能够用足够的类型信息来代表 JDBC 类型,从而能正确地存储和取出参数和从 SQL 语句恢复结果就可以了。例如,Java String 对象可能并不能精确地与任何 JDBC CHAR 类型匹配,但它却可给出足够的类型信息来成功地表示 CHAR、 VARCHAR 或 LONGVARCHAR 类型。
你好:SQL Server timestamp 数据类型与时间和日期无关。SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序。实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法。每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1。这样做足以帮助恢复过程确定页修改的相对次序,但是 timestamp 值与时间没有任何关系。
我们知道数字类型有个“标识”属性,设置好“标识种子”、“标识递增量”,每增加一条记录时,这个字段的值就会在最近的一个标识值基础上自动增加,这样我们可以知道哪些记录是先添加的,哪些记录是后添加的,但是我们无法知道哪些记录修改过。timestamp这个类型的字段呢,每增加一条记录时,它会在最近的一个时间戳基础上自动增加,当修改某条记录时,它也会在最近的一个时间戳基础上自动增加,所以我们就知道哪些记录修改过了。
如何向SQLServer中的datatime类型字段插入日期数据2008年03月28日 星期五 17:23最近总是因日期类型而困惑,今天发现了其中的原因,拿出来总结一下:
在JAVA中如果通过JDBC访问MSSQL数据库,其实你可以这样向datatime类型字段插入日期数据:
...........................
........//连接数据库就不用写了
String sql="insert into datetest values(?,?)"//第一个参数name字段,第二个是datetime类型birthday字段
PreparedStatement ps=con.prepareStatement(sql)
//Timestamp st = new Timestamp(new Date().getTime())//创建Timestamp对象
//---------------------这句很重要
Timestamp st = new java.sql.Timestamp(new java.util.Date().getTime())//创建Timestamp对象
//--------------------------
ps.setString(1, "xiaoxu")
ps.setTimestamp(2, st)//向数据库插入数据
ps.executeUpdate()
我以前总是用ps.setDate(2,date)方式,结果就是插入不进去。可能是JAVA中date类型与MSSQL数据库中datetime不兼容吧!
你也可以用另种方法向datatime类型字段插入日期数据:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm")
String date=sdf.format(new Date())
连接数据库
ps.setString(2, date)//也能向datatime类型字段插入日期数据ps.executeUpdate()
在JAVA中如果用Hibernate如何映射datetime类型呢?
在写javabean时用的是java.sql.Timestamp类型,但数据库里用的是Datetime类型(因为要保存时间),但我不想在数据库中用timestamp(很多数据,难改),
请问能直接把Timestamp映射成datetime类型么?
在Hibernate的映射配制文件中你可以直接类型指定成timestamp就行了!
使用 CREATE DISTINCT TYPE 语句创建新的 distinct 数据类型。该语句是 SQL ANSI/ISO 标准的扩展;
用法
Distinct 类型是基于内置数据类型或现有不透明数据类型,指定的 ROW 数据类型或者其它
Distinct 数据类型的数据类型。Distinct 数据类型是强归类的。虽然 Distinct 类型与其源类型对数
具有相同的物理表示法,但两种类型的值在没有从一种类型到另一种类型的显式强制转型的情况下
无法进行比较。
要创建 Distinct 数据类型,您必须拥有数据库上的 Resource 权限。任何拥有 Resource 权限的
用户均可从内置数据类型之一创建 Distinct 类型,而该用户是用户 gbasedbt 所拥有的。
重要: 不能在 SERIAL 、BIGSERIAL 或 SERIAL8 数据类型上创建 Distinct 类型。
要从不透明类型、指定的 ROW 类型或另一 Distinct 类型创建 Distinct 类型,您必须是该数据类
型的所有者或在该数据类型上拥有 Usage 权限。
缺省情况下,一旦定义了 Distinct 类型,之一该 Distinct 类型的所有者和 DBA 可以使用它。然
而,Distinct 类型的所有者可向其他用户授权对该 Distinct 类型的 Usage 权限。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)