一、jdbc连接套路
1.jdbc代码:
1.获取连接
2.编写sql
3.创建PreparedStatement
4.如果sql语句中有?给?赋值
5.执行sql
6.如果是查询,解析ResultSet
7.关闭资源
2.核心api
- DriverManager
其实我们今后只需要会用DriverManager的getConnection()方法即可
- Connection
Connection最为重要的方法就是获取Statement:
Statement stmt = con.createStatement();
- Statement
Statement最为重要的方法是:
①. int executeUpdate(String sql):执行更新操作,即执行insert、update、delete语句,其实这个方法也可以执行create table、alter table,以及drop table等语句,但我们很少会使用JDBC来执行这些语句;
②. ResultSet executeQuery(String sql):执行查询select操作,执行查询操作会返回ResultSet,即结果集。
③. boolean execute() 了解!可以执行executeUpdate()和executeQuery()两个方法能执行的sql语句,这个方法可以用来执行增、删、改、查所有SQL语句。该方法返回的是boolean类型,表示SQL语句是否有结果集!。如果使用execute()方法执行的是更新语句,那么还要调用int getUpdateCount()来获取insert、update、delete语句所影响的行数。如果使用execute()方法执行的是查询语句,那么还要调用ResultSet getResultSet()来获取select语句的查询结果。
- ResultSet
ResultSet表示结果集,它是一个二维的表格!ResultSet内部维护一个行光标(游标),ResultSet提供了一系列的方法来移动游标
3.解析图
二不采用封装式
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//加载驱动
Class.forName("com.mysql.jdbc.Driver"); //固定写法 加载驱动
//用户信息和URL
//localhost:mysql默认端口号3306 我是由于改了mysql的端口号
String url="jdbc:mysql://localhost:3307/user?useUnicode=true&characterEncoding=utf8&useSSL=true";
String username="root";
String password="0000";//数据库密码
//连接成功,数据库对象 Connection代表数据库
Connection connection = DriverManager.getConnection(url, username, password);
//执行SQL的对象 statement执行SQL的对象
Statement statement=connection.createStatement();
//执行SQL的对象去执行SQL,可能存在返回结果,查看返回结果
String sql="SELECT * FROM tb_users";
String sql2="INSERT INTO tb_users(sname,pwd) VALUES('zhangsan','123')";
int i = statement.executeUpdate(sql2);
System.out.println("受影响行数"+i);
ResultSet resultSet = statement.executeQuery(sql); // 返回的结果集
while(resultSet.next()){
//字段要和数据库的字段一致
System.out.println("id="+resultSet.getObject("id"));
System.out.println("sname="+resultSet.getObject("sname"));
System.out.println("pwd="+resultSet.getObject("pwd"));
System.out.println("=====================================");
}
//释放连接
resultSet.close();
statement.close();
connection.close();
}
但是实际开发中一把会把数据库四大参数与close connection进行封装
三、封装jdbc
数据库放入.properties文件中,放入src目录下
#msql四大参数
#驱动类的全限定名
driverClassName=com.mysql.jdbc.Driver
#url
url=jdbc:mysql://localhost:3307/user?useUnicode=true&characterEncoding=utf8&useSSL=false
#用户名
username=root
#密码
password=0000
使用dao层模式
实体类: User Student ---> pojo包
DAO接口: UserDao StudentDao --> dao包
Dao接口的实现类:UserDaoImpl StudentDaoImpl --> dao.impl包
工具类: 位于util包
工具类实现代码块
package util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
/**
* Created with IntelliJ IDEA.
* User: 张乾
* Date: 2022/7/13
* Time: 17:11
* Description: jdbc连接数据库
*/
public class JdbcUtil {
//用于properties文档的读入
private static Properties props=new Properties();
static{
//输入流读取文件
//getClassLoader() 得到当前类型的类加载器
//getResourceAsStream()加载文件
InputStream in =JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");
try {
//得到文件中的键值对
props.load(in);
//注册驱动类
Class.forName(props.getProperty("driverClassName"));
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
//得到connection对象
public static Connection getConnertin() throws SQLException {
//getProperty ( String key )
//获取属性信息
//即用指定的键在属性列表中搜索属性 也就是通过参数 key 得到 key 所对应的 value
return DriverManager.getConnection(props.getProperty("url"),props.getProperty("username"),props.getProperty("password"));
}
/**
* 关闭资源
* @param resultSet
* @param pstmt
* @param coon
*/
public static void close(ResultSet resultSet, PreparedStatement pstmt, Connection coon){
try {
if (resultSet != null){
resultSet.close();
}
if (pstmt != null){
pstmt.close();
}
if (coon != null){
coon.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
在dao接口类的实现类中进行以java代码操作数据库
ublic class UserDaoImpl implements UserDao {
/**
* 注册
* @param user
* @return
*/
@Override
public Boolean add(User user) {
Connection connection=null;
PreparedStatement pstm = null;
ResultSet rs =null;
//连接
try{
//1.获取连接
connection= JdbcUtil.getConnertin();
//2.编写sql语句
String sql="INSERT INTO tb_users(sname,pwd) VALUES(?,?)";
//3.创建PrepareStatement
pstm=connection.prepareStatement(sql);
//4.由于有问号则给问号赋值
pstm.setString(1,user.getName());
pstm.setString(2,user.getPwd());
//5执行sql 返回受影响行数(由于是对数据库进行更新则没有使用的resultset结果集)
int i = pstm.executeUpdate();
if (i!=0) return true;
}catch (SQLException e) {
e.printStackTrace();
}finally {
JdbcUtil.close(rs,pstm,connection);
}
return false;
}
}
总结
jdbc就是一个简单的套路,类比上面的商品图知道核心api的关键作用,记住套路模板则可以完成jdbc快速书写