我正在尝试开发一个模型对象来保存一个Sql Server行,我完全理解除了T-Sql/SqlServer时间戳之外如何做到这一点.该表定义为:
CREATE TABLE activity (
activity_id int
, ip_address varchar(39)
, user_id varchar(255)
, message_text
, dt timestamp
)
Run Code Online (Sandbox Code Playgroud)
当我将表行解析为我的对象时,对于int或字符串,我希望做类似的事情:
ActivityID = (int)dataReader["activity_id"];
IPAddress = (string)dataReader["ip_address"];
Run Code Online (Sandbox Code Playgroud)
但是我该如何处理时间戳列?我可以在任何地方找到没有"timestamp"数据类型.我知道Sql Server将时间戳存储为8字节的二进制文件,但这通常与.NET中的相同?
编辑添加:一些额外的信息......这是从我们的大型机上的DB2表通过Sql Server视图返回的行."Rowversion"不是一个选项,DB2正在将列作为时间戳处理.如果timestamp和rowversion相同,也许我可以将它视为一个,但否则我会遇到时间戳.
再次编辑补充说:这个项目将让我疯狂.它至少会是一次短途旅行.无论如何,是的@JoelC这是一个Sql Server视图,进入大型机上的DB2数据库.我终于能够找到我们的一位DBA,他们轻蔑地解释说"当然"DB2 TIMESTAMP遇到了一个Sql Server视图作为日期时间.根据他的语调,我猜只有新手不知道这一点.这就是为什么他在实际视图中将其命名为"datetime",Duh!(我在我的示例中给它一个不同的名称,以便不触发对命名约定的评论 - 实际的数据模型图表示它是TIMESTAMP并将其命名为时间戳).所以,在这种情况下,显然必须将其转换为DateTime.我想我可能会开始考虑成为一名DBA,这样我也可以让程序员疯狂.对不起,如果我误导了这个问题的任何响应者 - 这是无意的,因为我实际上期待时间戳是一个时间戳.傻我.特别感谢Microsoft将字节数组数据类型命名为"时间戳",因为它与日期和时间无关.我没有最简单的想法,哪个回应标记为答案.叹.
如何使DB2 JDBC驱动程序抛出的SQLExceptions更具描述性?
目前我得到了这种例外.使用这些神秘的SQLCODE和SQLSTATE数值非常麻烦.有没有办法让SQL异常包含代码描述.
Caused by: com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -302,
SQLSTATE: 22001, SQLERRMC: null
at com.ibm.db2.jcc.b.hh.c(hh.java:1662)
at com.ibm.db2.jcc.b.hh.a(hh.java:1238)
at com.ibm.db2.jcc.c.db.n(db.java:737)
....
Run Code Online (Sandbox Code Playgroud)
例如,SQLSTATE 22001有这样的描述:
字符数据,右截断发生; 例如,更新或插入值是对于列太长的字符串,或者无法将日期时间值分配给主变量,因为它太小.
编辑:我也使用Spring和Hibernate框架.
我需要将DB2与Java连接.请帮助我在ECLIPSE中将DB2与java 连接起来 .如果你可以一步一步地指导我,那将是非常有帮助请让我知道如何在eclipse代码片段中添加classpath:
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
public class connection {
public static void main(String[] argv) {
try {
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
}
catch (ClassNotFoundException e) {
System.out.println("Please include Classpath Where your DB2 Driver is located");
e.printStackTrace();
return;
}
System.out.println("DB2 driver is loaded successfully");
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rset=null;
boolean found=false;
try {
conn = DriverManager.getConnection("jdbc:db2:sabarish","db2admin","Murugasaranam");
if (conn != null)
{
System.out.println("DB2 Database Connected");
}
else
{ …Run Code Online (Sandbox Code Playgroud) 我只想将当前日期格式化为yyyymmddDB2.
我看到可用的日期格式,但我该如何使用它们?
SELECT CURDATE() FROM SYSIBM.SYSDUMMY1;
Run Code Online (Sandbox Code Playgroud)
我没有看到使用上面列出的格式的任何简单方法.
有什么建议吗?
可能重复:
显式vs隐式SQL连接
我想知道性能的差异
select * from A,B,C where A.x = B.y and B.y = C.z
Run Code Online (Sandbox Code Playgroud)
和
select * from A INNER JOIN B on A.x = B.y INNER JOIN C on B.y = C.z
Run Code Online (Sandbox Code Playgroud)
基本上我想知道内部连接是否比笛卡尔积更好?另外,内部连接是在内部进行的笛卡尔积?
我在DB2中知道(使用版本9.7)我可以使用此查询选择表的前10行:
SELECT *
FROM myTable
ORDER BY id
FETCH FIRST 10 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能获得11到20行呢?我无法使用主键或ID来帮助我......
提前致谢!
尝试在数据库中插入对象时,我收到以下错误消息:
com.ibm.db2.jcc.am.SqlIntegrityConstraintViolationException:
DB2 SQL Error: SQLCODE=-407, SQLSTATE=23502, SQLERRMC=TBSPACEID=2,
TABLEID=19, COLNO=0, DRIVER=4.15.134
Run Code Online (Sandbox Code Playgroud)
如何检索引发错误的表/列名称?
db2 ×10
sql ×4
java ×2
c# ×1
database ×1
date ×1
date-format ×1
fetch ×1
jdbc ×1
join ×1
spring ×1
sql-server ×1
t-sql ×1
tablespace ×1