java 操作数据库时一个属性是DateTime类型的写入数据库时可弄成Varchar么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 操作数据库时一个属性是DateTime类型的写入数据库时可弄成Varchar么相关的知识,希望对你有一定的参考价值。
这样读出再次从数据库读出后可以变为DateTime 么,还是说数据库中有专门的DateTime对应的类型
通常上来说,数据库和实体类间的字段建立联系,尽量让实体的属性类型与数据字段类型一一对应,比如你使用的是oracle数据库,那么表的主键如果为NUMBER,那么实体对应主键属性java类型就定义为Long或Integer(依字段长度决定),如果数据库表字段为VARCHAR,实体类对应属性就应该是String,如果数据库字段为小数,则定义为Double,属性建议使用包装类型,不用基本类型。至于时间,数据库一般由Date,DateTime,以及timestamp表示,对应于java实体类,一般用Date封装即可,对时间进精度要求高的话,就用TimeStamp封装。当然,你说的情况是可以的,也就是说,使用java的String类型,理论上可以封装所有的数据库字段类型,你可以把任何数据库的有效字段都封装为String,因为java中的所有数据类型,都有toString()方法,可以以字符串形式展示任何数据类型,还可以通过重写对象的toString()方式达到自定义显示数据的方式,可以说很方便。但是时间类型一旦用字符串表示,你便失去了直接调用时间类型特有的一些有用的方法,比如获取时分秒,比较时间大小等等。而是需要手动再转化为时间对象再进行操作,这无疑又多了一个步骤。因此,除非是比较特殊的情况,比如,单纯的进行数据导出,不做特殊处理,你可以建一个属性全为String的实体类,来封装数据库查询的数据,然后导出为excel或word文件之类的操作。否则,强烈建议使用匹配的数据类型和数据库字段类型建立关联!
希望我的回答能帮到你! 参考技术A Mysql中有一个类型是时间戳类型,数据库会默认给你赋值为你加入这条记录的系统当前时间的!
学懂Java常用类
一.包装类
1.概念
- 包装类是将基本类型封装到一个类中,包含属性和方法,方便对象操作
- 包装类位于java.lang包中
2.转换
包装类与基本数据类型
包装类是将基本数据类型封装成一个类,包含属性和方法
使用
在使用过程中,会涉及到自动装箱和自动拆箱
- 装箱:将基本数据类型转换成包装类
- 基本类型就自动地封装到与它相同类型的包装中,如:
- Integer i = 100;
- 本质上,编译器编译时为我们添加了:
- Integer i = Integer.valueOf(100);
- 拆箱:将包装类转换成基本数据类型
- 包装类对象自动转换成基本类型数据。如:
- int a = new Integer(100);
- 本质上,编译器编译时为我们添加了:
- – int a = new Integer(100).intValue();
public class IntegerDemo
public static void main(String[] args)
// int a = 10;
// Integer i = new Integer(10);//被拆箱了
//------------------------------------------
// //通过方法进行类型的转换
// Integer i2 = Integer.valueOf(a);//装箱
// int i3 = i.intValue();//拆箱
//------------------------------------------
// System.out.println(a == i);
// Float f1 = new Float(3.14);
// Double d1 = new Double(3.14);
Integer i = 10;
int a = i;
System.out.println(a==i);
案例
// int i =100;
// Integer i1 = 100;
// Integer i2 = 100;
// Integer i3 = 200;
// Integer i4 = 200;
// System.out.println(i1==i2);
// System.out.println(i3==i4);
// 结果
//true
//false
看valueOf的实现
值在-128---127之间返回相同Integer
超过这个范围后就返回new Integer(i);
// Double d1 = 1.0;
// Double d2 = 1.0;
// Double d3 = 2.0;
// Double d4 = 2.0;
// System.out.println(d1==d2);
// System.out.println(d3==d4);
// 结果
//false
//false
都返回new
二.String
注意:常量池在1.7之后放置在了堆空间之中
字符串的使用:
1.创建
- String str = "abc";
- String str2 = new String("abc");
- 两种方式都可以用,只不过第一种使用比较多
2.字符串的本质
- 字符串的本质是字符数组或者叫做字符序列
- String类使用final修饰,不可以被继承
- 使用equals方法比较的是字符数组的每一个位置的值
- String是一个不可变对象
3.常用方法
- char charAt(int index)
- 返回字符串中第index个字符。
- boolean equals(String other)
- 如果字符串与other相等,返回true
- boolean equalsIgnoreCase(String other)
- 如果字符串与other相等(忽略大小写),则返回true
- int indexOf(String str) lastIndexOf(String str,int idx)
- int length()
- 返回字符串的长度。
- String replace(char oldChar,char newChar)
- 返回一个新串,它是通过用 newChar 替换此字符串中出现的所有oldChar而生成的
- boolean startsWith(String prefix)
- 如果字符串以prefix开始,则返回true
- boolean endsWith(String prefix)
- 如果字符串以prefix结尾,则返回true
- String substring(int beginIndex)
- String substring(int beginIndex,int endIndex)
- 返回一个新字符串,该串包含从原始字符串beginIndex到串尾戒endIndex-1的所有字符
- String toLowerCase()
- 返回一个新字符串,该串将原始字符串中的所有大写字母改成小写字母
- String toUpperCase()
- 返回一个新字符串,该串将原始字符串中的所有小写字母改成大写字母
- String trim()
- 返回一个新字符串,该串删除了原始字符串头部和尾部的空格
public class StringDemo
public static void main(String[] args)
String str = "abc";
String str2 = new String("abc");
// str2 = str2.intern();
System.out.println(str==str2);
System.out.println(str.equals(str2));
System.out.println(str.charAt(0));
//数组的复制过程
System.out.println(str.concat("cde"));
//返回指定下标的元素
System.out.println(str.indexOf("a"));
String s = "abcdefghijklmn";
System.out.println(s.substring(3));
//在截取字符串的时候,需要注意是左闭右开区间
System.out.println(s.substring(3,5));
System.out.println(s.length());
//----------------------------------------------------------
// String a = "abc";
// String b = new String("abc");
// b = b.intern();
// System.out.println(a==b);
String a = "abc";
String b = "def";
String c = "abcdef";
// String d1 = a+b;
// System.out.println(c==d1);//false
String d = (a+b).intern();
String e = "abc"+"def";
System.out.println(c==d);//true
System.out.println(c==e);//true,c,e都是常量,"abcdef"在常量池里只会存在一次,因此地址相同
String f = "a" + "b" +"c";
String a1 = "a";
String a2 = "b";
String a3 = "c";
String f1 = a1+a2+a3;
三.StringBuffer类与StringBuilder类
可变字符串
StringBuffer:线程安全,效率低
StringBuilder: 线程不安全,效率高
public class StringBufferDemo
public static void main(String[] args)
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(1).append(1.234).append("abc").append(true);
System.out.println(stringBuffer);//11.234abctrue
System.out.println(stringBuffer.length());//13
System.out.println(stringBuffer.capacity());//16
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("123").append(1).append(false);
System.out.println(stringBuilder);
四.时间处理相关类
public class DateDemo
public static void main(String[] args) throws ParseException
Date date = new Date();
System.out.println(date);
System.out.println(date.getTime());
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//将Date类按照规范转换为字符串格式
String str = dateFormat.format(date);
System.out.println(str);
//将字符串转换成对应的日期类
Date d1 = dateFormat.parse("2019-10-9 20:29:56");
System.out.println(d1);
//获取的是当前系统的时间
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
//设置指定时间的日历类
calendar.setTime(d1);
System.out.println(calendar);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.SECOND));
五.Math类
public class MathDemo
public static void main(String[] args)
System.out.println(Math.abs(-1));
System.out.println(Math.sqrt(2));
System.out.println(Math.ceil(-3.14));//向上取整
System.out.println(Math.floor(-3.14));//向下取整
System.out.println(Math.pow(2,3));//次方
六.枚举类
public enum Gender
男,女
1. 只能够取特定值中的一个
2. 使用enum关键字
3. 所有的枚举类型隐性地继承自 java.lang.Enum。(枚举实质上还是类!而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final的。可以直接通过枚举类型名直接使用它们。)
public enum EventEnum
LAUNCH("launch"),PAGEVIEW("pageview"),EVENT("event");
EventEnum(String name)
this.name = name;
private String name;
public void show()
System.out.println(this.name);
EventEnum[] ee = values();
for(int i = 0;i<ee.length;i++)
System.out.println(ee[i]);
public class Test
public static void main(String[] args)
EventEnum ee = EventEnum.LAUNCH;
ee.show();
String name = EventEnum.PAGEVIEW.name();
System.out.println(name);
以上是关于java 操作数据库时一个属性是DateTime类型的写入数据库时可弄成Varchar么的主要内容,如果未能解决你的问题,请参考以下文章
sqlserver数据库中为datetime类型,通过myeclipse逆向工程生成实体类中属性为啥是java.sql.Timestamp