精华内容
下载资源
问答
  • SQLite数据库BigINT类型日期数据查询

    千次阅读 2018-07-04 16:25:54
    则在创建SQLite数据表时,日期类型将自动保存为BIGINT类型: CREATE TABLE [PictureMetadata]( [OperatorType] integer, [Person] varchar, [FromTime] BIGINT, [ToTime] bigint, [Path] varchar, ...

    定义了一个结构,包含一个DateTime类型的属性:

    private DateTime _FromTime = DateTime.Now;

    在创建SQLite数据库连接实例时,如果我们将storeDateTimeAsTicks参数设置为true:

            /// <summary>
            /// 创建SQLite连接
            /// .db文件不存在时创建,存在时读写,日期类型存为ticks
            /// </summary>
            /// <param name="sDbPath">.db文件路径</param>
            /// <returns>数据库的连接</returns>
            public static SDNConn CreateInstance(string sDbPath)
            {
                return new SDNConn() { Connection = new SQLite.SQLiteConnection(sDbPath, SQLite.SQLiteOpenFlags.ReadWrite | SQLite.SQLiteOpenFlags.Create | SQLite.SQLiteOpenFlags.SharedCache, true) };
            }

        /// <summary>
        /// Constructs a new SQLiteConnection and opens a SQLite database specified by databasePath.
        /// </summary>
        /// <param name="databasePath">
        /// Specifies the path to the database file.
        /// </param>
        /// <param name="openFlags">
        /// Flags controlling how the connection should be opened.
        /// </param>
        /// <param name="storeDateTimeAsTicks">
        /// Specifies whether to store DateTime properties as ticks (true) or strings (false). You
        /// absolutely do want to store them as Ticks in all new projects. The value of false is
        /// only here for backwards compatibility. There is a *significant* speed advantage, with no
        /// down sides, when setting storeDateTimeAsTicks = true.
        /// If you use DateTimeOffset properties, it will be always stored as ticks regardingless
        /// the storeDateTimeAsTicks parameter.
        /// </param>
        public SQLiteConnection(string databasePath, SQLiteOpenFlags openFlags, bool storeDateTimeAsTicks = true)
        {
          if (string.IsNullOrEmpty(databasePath))
            throw new ArgumentException("Must be specified", nameof (databasePath));
          this.DatabasePath = databasePath;
          sqlite3 db;
          SQLite3.Result r = SQLite3.Open(databasePath, out db, (int) openFlags, IntPtr.Zero);
          this.Handle = db;
          if (r != SQLite3.Result.OK)
            throw SQLiteException.New(r, string.Format("Could not open database file: {0} ({1})", new object[2]
            {
              (object) this.DatabasePath,
              (object) r
            }));
          this._open = true;
          this.StoreDateTimeAsTicks = storeDateTimeAsTicks;
          this.BusyTimeout = TimeSpan.FromSeconds(0.1);
          this.Tracer = (Action<string>) (line => {});
        }

    则在创建SQLite数据表时,日期类型将自动保存为BIGINT类型:

    CREATE TABLE [PictureMetadata](
      [OperatorType] integer, 
      [Person] varchar, 
      [FromTime] BIGINT, 
      [ToTime] bigint, 
      [Path] varchar, 
      [GlobalID] varchar PRIMARY KEY NOT NULL, 
      [TaskID] varchar, 
      [TaskID2] varchar, 
      [ResourceType] integer, 
      [ResourceGID] varchar, 
      [SourcePath] varchar);

    在进行查询时,我们采用如下如下语句:

    select datetime(FromTime/10000000 - 62135596800, 'unixepoch') mytime from PictureMetadata

    结果中的BIGINT型数据 636652579650855945 将被格式化为 2018-06-22 09:52:45 。

    那么问题来了,我们存入的时间数据 2018-06-22 09:52:45 是怎样被保存 636652579650855945 的呢?

    首先我们需要明白,时间戳 unixepoch 表示返回的是国际协调时间UTC,该时间采用的是格列高利历Gregorian Calendar(标准阳历)基准,并将返回日期解释为UNIX时间,即自1970-01-01以来的秒数。

    我们在查询秒数时,采用如下语句:

    SELECT strftime('%s','2018-06-22 09:52:45')+62135596800 AS ticks;

    与采用如下语句:

    SELECT (((JulianDay('2018-06-22 09:52:45') - 2440587.5)*86400.0) + 62135596800) AS ticks

    将会得到相同的结果,即 63665257965。

    这两种查询方式,得到的都是标准阳历以来的秒数。

    按标准阳历,自公元0001-01-01至1970-01-01之间的1969年中,有477年是闰年,则这期间的时间为:1969*365+477=719162天=62135596800秒。于是,我们要保存的时间 2018-06-22 09:52:45 相较 1970-01-01 是 1529661165 秒,加 62135596800 后为 63665257965 ,即JulianDay的时间。

    这个时间的单位是秒。UTC采用的国际原子时的准确度为每日数纳秒(一秒的十亿分之一),我们将秒转化成100纳秒为单位,则须乘以一千万即10000000,得到 636652579650000000 。

    这是一种精确到纳秒的算法。另外,我们还可以先计算当前时间距离标准阳历 0001-01-01 以来的天数(包含小数),然后转化成以100纳秒为单位的数,得 636652579650855945 。

    展开全文
  • 下表,如何查询time的最大值? hql如何写? create table _MaterialLoad( id int IDENTITY(1,1) primary key not null, mateCode char(12) not null, ... time bigint not null )
  • mysql数据库BigInt数据类型和实体对象中BigInteger,Long类型的冲突   实体Bean public class Broke { /** * brokeid */ BigInteger brokeid; /** * 节点id 与 节点id为多对一的关系 */ ...

    mysql数据库BigInt数据类型和实体对象中BigInteger,Long类型的冲突

     

    实体Bean

    public class Broke {
    	/**
    	 * brokeid 
    	 */
    	BigInteger brokeid;
    	/**
    	 * 节点id 与 节点id为多对一的关系
    	 */
    	String nodeid;
    	/**
    	 * brokeip
    	 */
    	String brokeip;
    	/**
    	 * 删除标记   0--notdelete   1--delete  (0 is default)
    	 */
    	int deleteflag = 0;
    }

     brokeid为BigInteger类型, 在mysql数据库中brokeid同样也为BigInteger类型,看起来如果在数据库中查找相关Broke实体应该没有什么问题,然而在查找出resultSet结果进行反射时,却抛出了argument type mismatch的错误信息。。下面看反射代码。。

    public static <T> List<T> getObjectsList(ResultSet rs, Class<T> k)
    			throws SQLException {
    		List<T> bl = new ArrayList<T>();
    		if (rs != null) {
    			while (rs.next()) {
    				T o = null;
    				try {
    					o = k.newInstance();
    					for (Method m : k.getDeclaredMethods()) {
    						String name = m.getName();
    						if (name.startsWith("set")) {
    //							System.out.println(rs.getObject(name.substring(3)).getClass().getName());
    							m.invoke(o, rs.getObject(name.substring(3)));
    						}
    					}
    					bl.add(o);
    				} catch (InstantiationException e) {
    					e.printStackTrace();
    				} catch (IllegalAccessException e) {
    					e.printStackTrace();
    				} catch (IllegalArgumentException e) {
    					e.printStackTrace();
    				} catch (InvocationTargetException e) {
    					e.printStackTrace();
    				}
    			}
    			return bl;
    		}
    		return null;
    	}

     当程序运行时,将反射执行到Brokeid时,就会在红色程序部分抛出argument type mismatch的异常信息,打印出程序中注释掉的那句输出语句时,便可以判断出,此时,从resultSet对象中取出的object对象为Long类型。之后,将Broke实体中brokeid的数据类型改为Long即可。

      在测试之后,发现改为Long类型之后,并不影响Broke对象的插入和其他一些相关操作。  而原先的BigInteger数据类型在添加实体的时候是可以的,但是在rs.getObject时,就会发生类型不匹配的错误。。

     

    展开全文
  • 数据库bigint提取成实体对象

    千次阅读 2017-10-11 14:20:50
    Mysql里有个数据类型bigint 在java转换成实体对象时,处理不当容易出现以下异常: java.lang.ClassCastException: java.lang.Long cannot be cast to java.math.BigInteger 只需要注意以下情况,就可避免此类异常...

    Mysql里有个数据类型bigint
    在java转换成实体对象时,处理不当容易出现以下异常:
    java.lang.ClassCastException: java.lang.Long cannot be cast to java.math.BigInteger

    只需要注意以下情况,就可避免此类异常:
    当数据库中该属性添加unsigned,则在对象中对应的属性类型应该为BigInteger;
    当数据库中该属性未添加unsigned,则在对象中对应的属性类型应该为Long。

    展开全文
  • @JsonSerialize(using= ToStringSerializer.class) @TableId(value = "id",type = IdType.ID_WORKER) private Long id;
  • 今天在写linq 语句的时候,遇到了这个问题。调试,报错。我一直不知道还有这样的事情。...写这句话的时候,这里的类型注意要写成long ,如果你写成int的话,会出现类型转换异常的。因为字段RequestCancelID在数

    今天在写linq 语句的时候,遇到了这个问题。调试,报错。我一直不知道还有这样的事情。感觉自己太差劲了。哈哈。

    var list = dt.AsEnumerable().Select(c => c.Field<long>("RequestCancelID")).ToList();

    写这句话的时候,这里的类型注意要写成long ,如果你写成int的话,会出现类型转换异常的。因为字段RequestCancelID在数据库中我用的类型是bigint.

    
    展开全文
  • 之前用的uuid都是32位的varchar类型,这次要求插入的uuid为20位bigint类型 之前的uuid生成方式 @SelectKey(keyProperty = "id",resultType = String.class, before = true, statement = "select replace(uuid...
  • mysql数据库时间类型datetime、bigint、timestamp的查询效率比较
  • 项目中的表id以前为String类型,用UUID自增长,现在需要将id改为bigint类型,现在该如何实现自增长啊,实体类中id上面注解怎么写。求大神帮帮忙。
  • select table_name, concat( ' alter table ` ...bigint ' ) and c.extra ' auto_increment ' order by table_name;   转载于:https://www.cnblogs.com/mickey-wang/p/8337056.html
  • 通过程序往数据库插入 50w 数据 数据表: CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time_date` datetime NOT NULL, `time_timestamp` timestamp NOT NULL DEFAULT CURRENT_...
  • mysql数据库字段bigint使用

    千次阅读 2018-11-23 14:21:00
    Mysql里有个数据类型bigint 在java转换成实体对象时,处理不当容易出现以下异常: java.lang.ClassCastException: java.lang.Long cannot be cast to java.math.BigInteger 只需要注意以下情况,就可避免此类异常:...
  • #define OTL_BIGINT long long #define OTL_STR_TO_BIGINT(str,n) \ { \ n=atoll(str); \ } #define OTL_BIGINT_TO_STR(n,str) \ { \ sprintf(str,"%lld", n); \ } #include "otlv4.h"// include the
  • #define OTL_BIGINT long long #define OTL_STR_TO_BIGINT(str,n) \ { \ n=atoll(str); \ } #define OTL_BIGINT_TO_STR(n,str) \ { \ sprintf(str,"%lld", n); \ } #include "otlv4.h"// include...
  • JSP程序 如何定义数据库类型为bigint的字段 为int型 悬赏分:20 - 解决时间:... getObject(i)的这个i的类型为int类型,但程序需要设置i为bigint类型,那如何定义int啊!问题补充:数据库字段cata类型为bigint 如何i
  • Mysql数据库Bigint字段值溢出问题

    千次阅读 2018-12-08 14:33:51
    在java程序中我的值是BigInteger类型的,数据库存放的字段也是bigint类型,这个按道理是可以存放的,百思不得其解,一直在原因。后面发现是数据库字段设置问题,即字段的有无符号问题。 unsigned 既为非负数,用此...
  • 关于使用bigint类型存储时间 项目里遇到了一个场景mysql中存储时间的格式是bigint类型,要将它转为datetime类型显示. 通过网上的一些方法做了尝试,解决了中间遇到的一些问题. 首先在场景实现的过程中,有读和写两种...
  • 最近在使用quartz,在mysql中其数据库表中的时间都是使用bigint类型存储的,要想使其查询结果显示为yyyy-mm-dd hh:MM:ss的格式需要使用from_unixtime()函数,bigint类型不是时间戳类型,所以要除以1000转换为时间戳...
  • 问题:前端页面通过sql语句查询mysql数据库, 表中有个字段为bigint类型, 库里存储的值为609324786968100864,返回的却是609324786968100900 导致拿着这个值609324786968100900去访问其他表的关联数据, 总是返回...
  • 数据库建表类型

    2020-12-14 22:58:13
     使用整数数据的精确数字数据类型。  bigint  从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。  int  从 -2^31 (-2,147,483,648) 到...
  • <br />一、类型比较 <br />bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据,存储大小为 8 个字节。一个字节就是8位,那么bigint就有64位 <br />int:
  • ibatis 映射mysql bigint类型问题

    千次阅读 2014-12-04 18:20:39
    我在java实体中用的Biginteger来对应数据库中的bigint 用ibatis死活取不到值 后面用BigDecimal才取到值 在网上查了一下有说Biginteger不能用反射取值··· 备忘一下
  • mysql数据库中整数类型int、bigint、smallint 和 tinyint的区别详细介绍1.BIT[M]2.TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为43. BOOL,BOOLEAN4.SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为65.MEDIUMINT[(M)] ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,600
精华内容 640
关键字:

数据库bigint类型