发表于: 2017-10-23 23:25:28
2 645
day6
今日完成
1.学习了怎么用jdbc连接MySQL数据库,看了教程后终于了解了其最基本的操作步骤,并成功地进行了CRUD操作,以下是代码:
package com.jnshu;
import java.sql.*;
public class JdbcDemo {
public static void main(String[] args)
{
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF8";
String username="root";
String password="612049";
Connection conn = null;
Statement stat = null;
try{
Class.forName(driver);
conn=DriverManager.getConnection(url,username,password);
stat=conn.createStatement();
String sql1="create table student(id bigint(20),name varchar(20),sex varchar(20),primary key(id))";
int row1=stat.executeUpdate(sql1);
if(row1 != -1){
System.out.println("创建表成功");
}
String sql2="insert into student values (1,'张三','男')";
String sql3="insert into student values (2,'李四','女')";
int row2=stat.executeUpdate(sql2) ;
int row3=stat.executeUpdate(sql3) ;
if(row2!=-1 && row3!=-1)
{
ResultSet rs2 = stat.executeQuery("select * from student");
while(rs2.next())
{
int id=rs2.getInt("id");
String name=rs2.getString("name");
String sex=rs2.getString("sex");
System.out.println("ID:"+id+",Name:"+name+",Sex:"+sex);
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(stat != null){
try {stat.close();} catch (SQLException e) {e.printStackTrace();}
}
if(conn != null){
try {conn.close();} catch (SQLException e) {e.printStackTrace();}
}
}
}
}
不过,感觉代码的质量还需要改进,以后在研究研究。
成功创建了表格:
2.今天又了解到了:
SQL 注入的防范
SQL 注入是用户利用某些系统没有对输入数据进行充分的检查,从而进行恶意破坏的行为。
(1)statement存在sql注入攻击问题,例如登陆用户名采用' or 1=1 or username=‘
(2)对于防范 SQL 注入,可以采用PreparedStatement取代Statement。
接着就有了PreperedStatement,
PreperedStatement是Statement的孩子,它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象而言的优势:
(1) 防止SQL注入:PreperedStatement可以避免SQL注入的问题。
(2) 预编译SQL语句:Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。
(3) 使用占位符简化语句:并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。
3.了解到要使用Jdbctemplate 对象来完成jdbc 操作。通常情况下,有三种方式得到JdbcTemplate 对象。
第一种方式:我们可以在自己定义的DAO 实现类中注入一个DataSource 引用来完 成JdbcTemplate
的实例化。也就是它是从外部“注入” DataSource 到DAO 中,然后 自己实例化JdbcTemplate,然后将DataSource
设置到JdbcTemplate 对象中。
第二种方式: 在 Spring 的 IoC 容器中配置一个 JdbcTemplate 的 bean,将 DataSource 注入进来,然后再把JdbcTemplate 注入到自定义DAO 中。
第三种方式:
Spring 提供了 org.springframework.jdbc.core.support.JdbcDaoSupport 类 , 这 个
类 中 定 义 了 JdbcTemplate 属性,也定义了DataSource 属性,当设置DataSource 属性的时候,会创
建jdbcTemplate 的实例,所以我们自己编写的DAO 只需要继承JdbcDaoSupport 类, 然后注入DataSource 即可。提倡采用第三种方法。
大体步骤:
1.要利用JdbcTemplate,首先要添加Spring依赖。用quickstart模板创建Maven项目,在pom.xml中添加Spring依赖:
2.创建学生类(数据传递类),描述学生信息。
3.创建数据操作接口,规定需要哪些方法来操作数据。
增、改各一种方法,删、查各4中方法:通过id,name,专业+学号,Student对象(方便出现前三种方法以外的需求时删、查)。
4.创建数据操作类,实现数据操作接口
5.创建DAO工厂类,用于创建数据操作对象(日后有新的数据操作类时,只需在此修改)
6.测试类
遇到的问题:
关于PreperedStatement的用法还不太懂。
明日计划:
通过JdbcTemplate来连接数据库。
收获:
感觉对操作数据库有了个基础的认识,不像之前两眼摸瞎。
评论