错误笔记:JDBC中Statement和PreparedStatement对于Date类型写入数据库问题
来源:互联网 发布:域名注册管理机构 编辑:程序博客网 时间:2024/06/05 04:12
今天写JDBC使用Statement执行sql语句向oracle数据库中插入Date类型数据时,遇到了一些问题:
首先Date类在java.util下和java.sql下都有,他们在控制台上的答应分别是:
java.util.date:
java.sql.date:
接下来 我们需要跟数据库建立连接,把我们写的POJO类中的数据插入oracle数据库中
POJO类:
package com.briup.day2;import java.util.Date;public class Student { private long id; private String name; private Date date;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}@Overridepublic String toString() {return "Studnet [id=" + id + ", name=" + name + ", date=" + date + "]";} }
接着要把POJO类对象中的数据拿出来插入数据库,需要对应数据库中的表建student表:
create table student(id number primary key,name varchar2(100),birthday date);
对应的把对象中的数据插入数据库的操作:
首先要想日期类型要怎么往数据库中插入,我的oracle时Session是中文格式,必须要插入xx-xx月-xx类型的日期,而我的POJO类中Date时java.util.date类,所对应的日期不符合规则.因此需要先写一个方法把java.util.date类转换成java.sql.date类型. java.sql.date类型创建对象时,需要传一个long类型的日期,因此调用java.util.date.getTime()方法来获得,传入:
public java.sql.Date getDate(long time){ return new java.sql.Date(time); }
但是这样转换后的日期格式时"xx-xx-xx",因此我一直报一个数据类型不符合的错.那怎么办呢?首先用toString()将Date类型转化成字符串,在使用SQL语句to_date('date','yyyy-mm-dd')方法,将"xx-xx-xx"转换成"xx-xx月-xx"的字符串方可插入数据库:public class StatementTest {private String driver ="oracle.jdbc.driver.OracleDriver";private String url ="jdbc:oracle:thin:@127.0.0.1:1521:XE";private String user=nameprivate String pass=password; public void StTestInsert(Student s){ Connection conn=null; Statement st =null; try { Class.forName(driver); conn = DriverManager.getConnection(url, user, pass); System.out.println(conn); st=conn.createStatement(); long id = s.getId(); String name = s.getName(); java.sql.Date date = getDate(s.getDate().getTime()); String date1 = date.toString(); String sql="insert into student values("+id+",'"+name+"',to_date('"+date1+"','yyyy-mm-dd'))"; System.out.println(sql); st.execute(sql); System.out.println("执行成功"); } catch (Exception e) {e.printStackTrace();}finally{ if(st!=null){ try {st.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} } if(conn!=null){ try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} }} } public java.sql.Date getDate(long time){ return new java.sql.Date(time); }
这样可以将date正确的插入数据库中
接着时prepareStatement:
prepareStatement中有对应的方法,getDate() 里面需要传的就是java.sql.date类型的数据,因此不需要麻烦的转换:
public void preTestInsert(Student s){ Connection conn=null; PreparedStatement pst =null; try { Class.forName(driver); conn = DriverManager.getConnection(url, user, pass); System.out.println(conn); long id = s.getId(); String name = s.getName(); java.sql.Date date = getDate(s.getDate().getTime()); //构建PreparedStatement 对象 ,这个对象提供预编译功能 //可以帮我们把sql语句发送到数据库 String sql ="insert into student values(?,?,?)"; pst=conn.prepareStatement(sql); pst.setLong(1, id); pst.setString(2, name); pst.setDate(3, date); pst.execute(); System.out.println("执行成功"); } catch (Exception e) {e.printStackTrace();}finally{ if(pst!=null){ try {pst.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} } if(conn!=null){ try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} }} }
总结下来,statement插入数据时比较麻烦,如果数据类型太多的话,字符串的拼接就会很长,稍不留神就会出错,因此觉得还是preparedStatement比较好用.
用statement时需要特别注意日期的转换问题.
阅读全文
0 0
- 错误笔记:JDBC中Statement和PreparedStatement对于Date类型写入数据库问题
- JDBC中Statement和PreparedStatement
- jdbc中 PreparedStatement 和Statement的区别
- JDBC 中preparedStatement和Statement区别
- 错误笔记 -- Statement、PreparedStatement和CallableStatement
- 数据库中关于preparedStatement和Statement分析
- JDBC: Statement、PreparedStatement和CallableStatement
- Jdbc中的Statement 和PreparedStatement
- JDBC中的Statement和PreparedStatement
- jdbc中的Statement 和 PreparedStatement
- JDBC--Statement、PreparedStatement和CallableStatement
- JDBC的Statement和PreparedStatement
- JDBC中操作数据库的三个对象:Statement;PreparedStatement;CallableStatement
- JDBC连接数据库 and PreparedStatement和Statement区别
- JDBC中Statement和PreparedStatement的择弃
- jdbc中Statement、PreparedStatement和CallableStatement的区别
- JDBC中Statement和PreparedStatement性能的比较
- JDBC中Statement,PreparedStatement和CallableStatement的比较
- 【Scikit-Learn 中文文档】高斯过程
- Leetcode665 (Array) Non-decreasing Array +Leetcode674 Longest Continuous Increasing Subsequence
- Job-ES6 语法
- 安卓1jShopDemo
- C++中的向上类型转换和向下类型转换+四种强制类型转换
- 错误笔记:JDBC中Statement和PreparedStatement对于Date类型写入数据库问题
- LM c语言代码
- MyBatis源码(五)之动态Sql解析运行阶段参数处理
- chrome谷歌浏览器开启webgl
- 53.Maximum Subarray
- 使用mongodb的findAndModify命令来进行数据同步
- 【Scikit-Learn 中文文档】交叉分解
- PHP重置数组为连续数字索引的几种方式
- C# ConcurrentStack实现