文章目录
JDBC入门
JDBC介绍
概念
-
java提供的一个标准[由各大数据库厂商实现]:数据的持久化操作
-
持久化:数据的永久的存储的问题
数据库持久化操作的技术只有一个JDBC
JDBC使用的步骤
1.换新的工作空间,并且设置工作空间编码为UTF-8
2.Java项目: 导入Mysql的jar包
3.新建一个文件夹lib…jar放入lib…建立jar与项目得关联
4.贾:加载驱动…程序…Mysql写好的驱动程[ Driver ]序加载进来
5.连:java获得与数据库的连接[ DriverManager ] //Connection
6.欲:获得语句对象[ Statement ]
7.执:准备sql语句并用语句对象执行
8.释:释放资源[ ResultSet a Statement b Connection c ]
JDBC增删改查(CRUD)
1.向数据库添加数据
@Test
public void insert() {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1/jdbc_demo", "root", "******");
Statement statement = connection.createStatement();
String sql = "insert into student values(1,'小王',18),(2,'小李',22),(3,'小刘',24)";
statement.execute(sql);
} catch (Exception e) {
e.printStackTrace();
}
}
2.修改数据库数据
@Test
public void update() {
String sql = "update student set name='小胡' where id = 1";
try {
statement.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
3.删除表中数据
@Test
public void delete() {
String sql = "delete from student where id = 3";
try {
statement.execute(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
4.查询表中数据
@Test
public void select() {
String sql = "select * from student";
try {
set = statement.executeQuery(sql);
while (set.next()) {
System.out.print(set.getString("id"));
System.out.print(set.getString("name"));
System.out.print(set.getString("age"));
System.out.print(" ");
}
} catch (Exception e) {
e.printStackTrace();
}
}
抽取JDCB工具类
public class JDBCUtil {
/*
* 1.提供单例模式:私有化构造方法,字段,提供公共静态访问方法
* 2.将加载驱动放入静态代码块
* 3.创建properties文件,将驱动地址,数据库地址url,用户名username,密码password存入
* 4.读取properties文件,通过当前线程获得类加载器,再获得properties流
* */
//私有化构造方法
private JDBCUtil(){}
//私有化静态字段
private static JDBCUtil instance;
//私有化properties对象
private static Properties prop = new Properties();
//静态代码块,优先加载
static {
//放入需要优先加载的静态字段
instance = new JDBCUtil();
try {
//通过properties对象调用方法获取文件流
prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
//加载驱动器
Class.forName(prop.getProperty("DriverClassName"));
} catch (Exception e) {
e.printStackTrace();
}
}
//提供公共方法获取instance对象
public static JDBCUtil getInstance() {
return instance;
}
//连接数据库方法,返回数据库对象
public static Connection getConnection() {
Connection connection = null;
try {
//连接数据库
connection = DriverManager.getConnection(prop.getProperty("url"), prop.getProperty("username"), prop.getProperty("password"));
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
//释放资源
public static void close(ResultSet set, Statement statement, Connection connection) {
try {
if (set!=null)
set.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
if (statement!=null)
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
try {
if (connection!=null)
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
DriverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/jdbc_demo
username=root
password=******
DAO层
概念
界面层:收集数据; name,password,age…等等 需要传递很多东西;
业务层:界面层收集之后,传到业务层;
数据层(DAO层)
DAO : 主要是用来做数据库的操作
模块化,分工明确,解耦(责任分离),便于维护
域对象
界面层传到业务层的东西封装成对象,这个对象叫做域对象(domain)
模拟注册和登录场景
在业务层和DAO层完成
新建一个实体类
eclipse设置好私有化字段后,其余方法都可以一键生成
1.私有化字段
2.提供get、set方法
3.提供有参、无参构造方法
新建基础DAO层接口
提供增删改查方法
public interface BaseDao {
//新增
void add(User u);
//删除
void delete(Long id);
//修改
void update(User u);
//查找
User query(User u);
}
新建实体类DAO层接口
继承基础DAO层接口
public interface IUserDao extends BaseDao{
//该接口自己的批量删除方法
void batchdel(long...id);
}
新建DAO层实现类
对DAO层接口进行覆写
JDBCUtil为已提取的工具类(已在之前封装好)
public class UserDaoImpl implements IUserDao {
private User user;
/*
* 注册:在数据库中添加账号密码
*/
@Override
public void add(User u) {
Connection connection = JDBCUtil.getInstance().getConnection();
try {
Statement statement = connection.createStatement();
String sql = "insert into users(username,password) values('"+u.getUsername()+"','"+u.getPassword()+"')";
statement.execute(sql);
JDBCUtil.getInstance().close(null, statement, connection);
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 注销账号:在数据库中删除数据
*/
@Override
public void delete(Long id) {
Connection connection = JDBCUtil.getInstance().getConnection();
try {
Statement statement = connection.createStatement();
String sql = "delete from users where id ="+id;
statement.executeUpdate(sql);
JDBCUtil.getInstance().close(null, statement, connection);
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 修改账号密码:在数据库中修改数据
*/
@Override
public void update(User u) {
Connection connection = JDBCUtil.getInstance().getConnection();
try {
Statement statement = connection.createStatement();
String sql = "update users set username='"+u.getUsername()+"',password='"+u.getPassword()+"' where id='"+u.getId()+"'";
statement.executeUpdate(sql);
JDBCUtil.getInstance().close(null, statement, connection);
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 登录:在数据库中查找数据
*/
@Override
public User query(User u) {
Connection connection = JDBCUtil.getInstance().getConnection();
User user = null;
try {
Statement statement = connection.createStatement();
String sql = "select * from users where username='"+u.getUsername()+"' and password='"+u.getPassword()+"'";
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
user = new User();
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
}
JDBCUtil.getInstance().close(resultSet, statement, connection);
} catch (Exception e) {
e.printStackTrace();
}
return user;
}
/*
* 批量删除数据
*/
@Override
public void batchdel(long...id) {
for (long l : id) {
delete(l);
}
}
}