JAVA学习笔记

JAVA学习笔记


对于Date在java与mysql不一致的处理方法:

Date类在JDK1.1以上已经基本被废弃了 > 详情的api请看data

Date在java中表现为Y-M-D H-M-S 而在mysql中Date仅仅是年月日,Time类型表现才为时分秒,而Timestamp类型在mysql中表现类似于Date in Java。

1.1 (所以这里可以直接选择createStatement(),s1,s2为string类型即可 format Y-M-D H-M-S)

	String sql = "select * from tdate where date between \"" + s1  + "\"  and \"" + s2  + "\"";
	Statement st = con.createStatement();
	ResultSet rs  = st.executeQuery(sql);

这种方式可以成功,但有sql注入的风险。

1.2 预定义sql 参数化查询。 #切记切记executeUpdate里面不要带参数,不然无论如何都报错,因为你的Statement已经预编译过了,不要再编译一次sql,若重新再编译了,sql中的 “?”就不会再有setLong注入这个值了,所以报错#

	String sql = "insert into orders(`id`,`userID`,`cinemaID`,`time`,`prices`) values(null,1,1,?,60)";
	PreparedStatement st = con.prepareStatement(sql);
	System.out.println(lg1);
	st.setLong(1, lg1);
	st.executeUpdate(); 

2 我们选择利用UTC时间戳来处理。 这样我们在数据库中保留的是Long数据(据离零时区的某个时间的毫秒级时间间隔)

	Calendar calendar = Calendar.getInstance();
	int year = 2016;
	int month = 4;
	int date = 21;
	int hourOfDay = 21;
	int minute = 32;
	int second = 10;
	calendar.set(year, month, date, hourOfDay, minute, second);
	Long lg1 = calendar.getTimeInMillis();

以上利用Calendar(jdk1.1后用来代替Date),还有Date.getTime()方法

	new Date().getTime();
    //获取当前时间 


对于java JDBC中文字插入Mysql乱码的处理方法:

首先先确保Mysql表create时,对应table的charset与java文件的编码是否一致。

其次,利用jdbc连接数据库的时候,url的设置有两种方式:

xml配置格式:在url中 jdbc:mysql://172.18.41.13:3306/cinema_datebase?useUnicode=true&characterEncoding=UTF-8注意里面的&
java文件配置格式在url中 jdbc:mysql://172.18.41.13:3306/cinema_datebase?useUnicode=true&characterEncoding=UTF-8注意里面的&;


对于Spring框架下 JDBCtemplate insert数据到Mysql想要返回主键的处理方法:

原本我们用到是return jdbcTemplate.update("insert into orders values(null,?,?,?,?,?)",generatedKeyHolder,new Object[{order.getUserID(),order.getCinemaID(),order.getTime(),order.getPrices(),"1"});

后来我查看了一下JdbcTemplate中update的重载函数,发现对于Object类型的重载并不涉及到获取主键的方法,找到了这个

public int update(final PreparedStatementCreator psc, final KeyHolder generatedKeyHolder)

于是我们的update函数需要自己写预定义的sql语句,结果代码变成这样

	jdbcTemplate.update(
			new PreparedStatementCreator() {
		@Override
		public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
			PreparedStatement st = con.prepareStatement("insert into orders values(null,?,?,?,?,?)", new String[]{"id"});
			st.setInt(1, order.getUserID());
			st.setInt(2, order.getCinemaID());
			st.setLong(3, order.getTime());
			st.setFloat(4, order.getPrices());
			st.setString(5, "1");
			return st;
		}
	},generatedKeyHolder);
	return generatedKeyHolder.getKey().intValue();

posted @ 2016-05-23 20:51  KiddingJohn  阅读(225)  评论(0编辑  收藏  举报