一、前言:
还是力推一下,小马哥的JAVA学习!!!
学习需要一个循循渐进,或许后面这种原生的sql语句会少打。
阶段一:

阶段二:采用预编译可有效防止SQL注入攻击
二、Coding:

一:基础步骤:
六大步骤:见注释
package ch2020.com.ydl.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DbUtill {
public static final String URL = "jdbc:mysql://localhost:3306/imooc";
public static final String USER = "root";
public static final String PASSWORD = "123456";
private static Connection conn = null;//选用的java的接口而不是mysql的!!!
static {
try {
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2. 获得数据库连接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
return conn;
}
public static void main(String[] args) throws Exception {
//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//2. 获得数据库连接
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
//3.操作数据库,实现增删改---executeUpdate() 查executeQuery,发送SQL语句
Statement stmt = conn.createStatement();
//4.如果有数据,rs.next()返回true
String sql = "insert into imooc_goddess(id,user_name,email) values(2,'xxx','xx@sina.com')";
int num=stmt.executeUpdate(sql);
if (num>0) {
System.out.println("插入成功");
}
ResultSet rs = stmt.executeQuery("SELECT user_name, id FROM imooc_goddess");
//5.处理结果
while(rs.next()){
System.out.println(rs.getString("user_name")+" id:"+rs.getInt("id"));
}
//释放数据,有顺序要求 先关ResultSet,再关Statement,最后关Connection
stmt.close();
conn.close();
}
}
做一个登录测试
public static void login() throws ClassNotFoundException, SQLException {
System.out.println("请输入学生的姓名");
String name=input.next();
System.out.println("请输入学生的密码");
String password=input.next();
queryLoin(name,password);
}
public static void queryLoin(String name,String pa) throws ClassNotFoundException, SQLException {
Class.forName(DRIVER);
conn=DriverManager.getConnection(URL, USER, PASSWORD);
Statement stmt=conn.createStatement();
String sql="SELECT user_name, id FROM imooc_goddess where user_name='"+name+"'and password='"+pa+"'";
rSet=stmt.executeQuery(sql);
//光标指向下一行
while(rSet.next()){
//获取当前行数据,(可以根据列名,也可以根据索引来获取)
System.out.println(rSet.getString("user_name")+" id:"+rSet.getInt("id"));
System.out.println("编号"+rSet.getInt(2));
}
stmt.close();
conn.close();
}Note:
1.注意SQL 语句中 当出现字符类型的量时应该加单引号,否则会当成数据库列表,导致未定义列名这种报错
2.‘1’=1 SQL注入,解决措施
与PHP一样,JAVA也有预编译 PrepareStatement接口下的预编译
二、使用myClipse工具测试 JDBC:

三、为什么要使用Dao层:
代码存在于客户端,我们操作是在客户端的,所以当多个客户时,就会出现代码重复,因此我们要清除代码
代码重复没有对错,但是影响维护成本,在遵循DRY原则

比如上述数组的例子,将容量检查和扩容存储存在add方法中,从而减少数据库代码重复
什么是DAO:
Data Access Object 就是一个对象就是叫DAO
!!!!!!NOTE:!!!!!!!!
1.DAO的设计规范:
DAO组件包含DAO接口和DAO实现类以及DAO的测试类:
分包规范:
package 域名倒写.模块名称.组件名;
com._520it.smis.domain;
存储的domain文件 com._520it.smis.dao;
存储dao接口文件 com._520it.smis.dao.impl;
存储dao实现类文件 com._520it.smis.test;
临时存储测试类 起名规范:
domain类 : 描述对象的,一把使用英文单词来表示:Xxx,比如:Employee.
DAO 接 口: IXxxDAO/IXxxDao, 如:IEmployeeDAO/IEmployeeDao.
DAO实现类: XxxDAOImpl/XxxDaoImpl, 如:EmployeeDAOImpl,EmployeeDaoImpl.
注意:实现类一定要实现DAO接口.,否则就废了,,,
DAO测试类:
根据DAO接口生成测试类, XxxDAOTest/XxxDaoTest,如:EmployeeDAOTest,EmplyeeDaoTest.
创建DAO对象规范:
1):DAO对象起名,统统叫做xxxDAO.
2):面向接口编程,把DAO对象赋给DAO接口类型. IEmployeeDAO employeeDAO= new EmployeeDAOImpl();
2.DAO操作步骤:
1:先创建一张表.
2:根据表的结构,创建domain对象.
3:创建DAO接口,并提供DAO方法(CRUD).
4:创建DAO实现类,覆盖接口中的方法,但是暂时不实现.
5:根据DAO接口生成DAO测试类. 单元测试
6:完成DAO实现类中的方法,并测试通过.
















