发表于: 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的方法,但是还需要完善一下代码,


返回列表 返回列表
评论

    分享到