发表于: 2018-03-12 23:01:58
1 516
今日完成
回复日报:
1,师兄纠正了昨天的错误:加不加on update current_timestamp是有明确的效果的。
建表:
create table user_d(id int not null auto_increment primary key,update_at timestamp default CURRENT_TIMESTAMP() on update CURRENT_TIMESTAMP(),name varchar(50) not null);
效果:
加on update current_timestamp
不加on update current_timestamp
结论:加上on update current_timestamp ,在更新数据时会自动根据当前时间更改时间戳。吸收教训不要轻易下结论。
2,预编译和直接使用String拼接有什么区别,优劣在哪?
区别:
1,PreparedStatement预编译SQL语句,性能好;无序拼接SQL语句,编程更简单;可以防止SQL注入,安全性好。
2,Statement由方法createStatement()创建,该对象用于发送简单的静态的SQL语句。
PreparedStatement由方法preparedStatement()创建,该对象用于发送带有一个
或多个输入参数的SQL语句。
该方法继承了Statement的所有方法。并进行了扩展。
SQL语句使用“?”作为数据占位符,使用setXxx()方法设置数据。
setXxx()方法的第一个参数要设置为参数的序数位置,第二个参数是设置给该参数的值。
3,//Statement的用法
int id=111;
String sql="selsect * from user where id="+id;
Statement st=connection.CreateStatement();
ResultSet rs=st.executeQuery(sql);
//PreparedStatement的用法
//PreparedStatement可替换变量(在SQL语句中可以包含?)
String sql="select * from user where id=?";
PreparedStatement ps=connection.preparedStatement(sql);//sql在这里进行预编译
int id =111;
ps.setInt(1,id);//为sql传入参数
ResultSet rs=ps.executeQuery();//这里不需要sql,因为上面预编译过
优劣:
1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
2.在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。
PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
3.statement每次执行sql语句,数据库都要执行sql语句的编译,preparedstatement是预编译得, preparedstatement支持批处理
4. 执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象。通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。
参照教程写了一个jdbctemplate程序连接数据库
先建个表
项目结构
实体类User
public class User {
private int id;
private String name;
private String password;
public int getId(){return id;}
public void setId(int Id){this.id=Id;}
public String getName(){return name;}
public void setName(String name){this.name=name;}
public String getPassword(){return password;}
public void setPassword(String password){this.password=password;}
@Override
public String toString() {
return "User[Id="+id+",Name="+name+",Password="+password+"]";
}
}
UserDao
public interface UserDao {
void createUser(User user);
void deleteUser(int id);
void updateUser(User user);
List<User> findAllUser();
}
UserDaoImpl
public class UserDaoImpl implements UserDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate ) {
this.jdbcTemplate =jdbcTemplate ;
}
public void createUser(User user){
String sql="insert into jdbctemplate_tb values(?,?,?)";
jdbcTemplate.update(sql,user.getId(),user.getName(),user.getPassword());
System.out.println(user);
}
public void deleteUser(int id){
String sql="delete from jdbctemplate_tb where u_id=?";
int i=jdbcTemplate.update(sql,id);
System.out.println(i);
}
public void updateUser(User user){
String sql="update jdbctemplate_tb set u_name=?,u_password=? where u_id=?";
jdbcTemplate.update(sql,user.getName(),user.getPassword(),user.getId());
}
public List<User> findAllUser(){
String sql="select * from jdbctemplate_tb";
return jdbcTemplate.query(sql,new UserRowMapper());
}
class UserRowMapper implements RowMapper<User> {
//rs为返回结果集,以每行为单位封装着
public User mapRow(ResultSet rs,int rowNum) throws SQLException {
User user=new User();
user.setId(rs.getInt("u_id"));
user.setName(rs.getString("u_name"));
user.setPassword(rs.getString("u_password"));
return user;
}
}
}
配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mydb" />
<property name="username" value="root" />
<property name="password" value="612049" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="userDao" class="Impl.UserDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
</beans>
明日计划
学习mybatis,再将JdbcTemplate好好复习下,还有数据池的知识点。
遇到的困惑
1,这句话不懂
public void setJdbcTemplate(JdbcTemplate jdbcTemplate ) {
this.jdbcTemplate =jdbcTemplate ;
}
2,RowMapper的作用
class UserRowMapper implements RowMapper<User> {
//rs为返回结果集,以每行为单位封装着
public User mapRow(ResultSet rs,int rowNum) throws SQLException {
User user=new User();
user.setId(rs.getInt("u_id"));
user.setName(rs.getString("u_name"));
user.setPassword(rs.getString("u_password"));
return user;
}
}
网上说法是:如此完成了一个对User类的RowMapper映射。直接jdbcTemplate.query(sql,new UserRowMapper)即可将查询的信息存入java Bean中,靠的是bean中的get/set方法。
收获
今天学习了Java的一些基础知识
大致了解了JDBCTemplate连接MySQL的方法,但是还需要完善一下代码,
评论