MySQL系列-使用JDBC操作MySQL常用数据类型

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();
                }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值