MySQL常用数据类型有这些 MySQL系列-常用数据类型
那么这些数据对应的java类型是那些呢,又该如何使用jdbc进行操作呢?
1.插入和获取日期类型
表的设计如下
表中数据如下:
如何从结果集中获取这些类型的数据呢?
第一个date类型,我们可以使用getDate()方法获取。例如:
Date d = resultSet.getDate(1);//返回 java.sql.Date 但是 java.sql.Date extends java.util.Date
打印结果为2018-06-07,无论是java.sql.Date 或者 java.util.Date 获取的都是这个结果,且都没有时间部分
第二个类型time,我们可以使用getTime()方法:
Time t = resultSet.getTime(2);//java.sql.Time
打印结果为20:24:13
第三个和第四个一样,如何获取呢,getDate()方法是不行的,只会返回日期部分而没有时间部分,我们可以使用getObject()方法先获取这个数据对象,然后进行强制类型转换,且只能转换为java.util.Date类型,因为java.sql.Date只能包含日期部分:
Date d2 = (Date) resultSet.getObject(3);//获取对象进行强转 得到 2018-06-07 20:24:16.0
Date d3 = (Date) resultSet.getObject(4);//获取对象进行强转 得到 2018-06-08 00:19:44.0
第五个用int类型就可以了:
int y = set.getInt(5);//year 类型的话直接获取int类型就可以了
打印结果为2018
如何插入这些类型的数据呢?怎么获取就怎么插入就行了:
state.setDate(1,new java.sql.Date(new Date().getTime()));
state.setTime(2,new Time(9,6,6));
state.setObject(3,new Date());
state.setObject(4,new Date());
state.setInt(5,2019);
插入数据之后的表:
2.插入和获取整数类型
表的设计如下:
整数类型比较简单,对于前面四个用getInt()方法就行了,插入的时候用setInt()但是要数值注意范围。
bigint类型用getLong() 和 setLong()就行。
3.插入和获取浮点数类型
这个也比较简单,全都可以用double类型进行获取,对应decimal类型也可以先获取Object类型进行强转为java的BigDecimal类型。
System.out.println(set.getDouble(1));
System.out.println(set.getDouble(2));
System.out.println(set.getDouble(3));
System.out.println((BigDecimal)set.getObject(3));
4.插入和获取字符串类型
全部都使用String类型来操作是没问题的,但是对于text类型到longtext类型来说,数据可能非常大,直接转化成String类型读入内存当中是不现实的,我们可以使用io流对大的数据进行操作。
用字符流进行大文本插入:
File file = new File("E:/桌面/1.txt");//windows下用 / \ 作为分割符都可以
FileReader reader = new FileReader(file);
state.setCharacterStream(1,reader,file.length());//设置为字符流类型
用字符流进行大文本的获取:
Reader reader = set.getCharacterStream(1);
FileWriter writer = new FileWriter("E:/桌面/2.txt");
try {
int len;
char buff[] = new char[1024];
while ((len = reader.read(buff)) > 0) {
writer.write(buff, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(reader!=null) {
try {
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(writer!=null) {
try {
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
java关流确实有点烦,但是还是必须这样做,或者我们可以使用java7的自动资源关闭,关于Java7、java8、java9、java10....我会在新的博客中进行专门的讲解。(我也是结合书籍和资料边学边讲,顺便吐槽一句,可能是Oracle意识到了危机吧,java现在半年一更,233333)
try( Reader reader = set.getCharacterStream(1);
FileWriter writer = new FileWriter("E:/桌面/2.txt");) {
int len;
char buff[] = new char[1024];
while ((len = reader.read(buff)) > 0) {
writer.write(buff, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}
5.插入和获取二进制类型
和上面的大文本操作一样,我们要用流进行操作。这个在开发中不会用的,但是我们可以用数据库保存一些私密照片,不是专业人员也取不出来 233333
插入一张图片:
File file = new File("E:/桌面/j.png");
FileInputStream fin = new FileInputStream(file);
state.setBinaryStream(1,fin,file.length());
获取一张图片,注意这里要用字节流,字符类型要用字符流:
try( InputStream in = set.getBinaryStream(1);
FileOutputStream fout = new FileOutputStream("E:/桌面/k.png");) {
int len;
byte buff[] = new byte[1024];
while ((len = in.read(buff)) > 0) {
fout.write(buff, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}