JDBC各个类详解:
1.DriverManager:驱动管理对象
2.Connection:数据库连接对象
3.Statement:执行sql的对象
4.ResultSet:结果集对象
5.PreparedStatement:执行sql的对象
1.DriverManager:驱动管理对象
功能:
1.注册驱动:
static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager 。
写代码使用:Class.forName("com.mysql.jdbc.Driver");
通过查看源码发现:在类中存在静态代码块
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
注意:mysql5之后版本的驱动jar包可以省略注册驱动的步骤
2.获取数据库连接:
方法:static Connection getConnection(String url, String user, String password)
参数:
url:指定连接的路径
语法:jdbc:mysql://IP地址(域名):端口号/数据库名称
例子:jdbc:mysql://localhost:3306/bd3
细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可简写为:jdbc:mysql:///数据库名
user:用户名
password:密码
2.Connection:数据库连接对象
1.功能:
1.获取执行sql的对象
Statement createStatement()
PreparedStatement prepareStatement(String sql)
2.管理事务
开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
提交事务:commit()
回滚事务:rollback()
3.Statement:执行sql的对象
1.执行sql
1.boolean execute(String sql):可以执行任意的sql (了解)
2.int executeUpdate(String sql):执行DML (insert、update、delete) 语句、DDL(create、alter、drop)语句
返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则被执行成功,反之,则失败。
3.ResultSet executeQuery(String sql) :执行DQL(select)语句
2.练习:案例演示:https://blog.csdn.net/qq_36050720/article/details/100071767
1.account表 添加一条记录
2.account表 修改一条记录
3.account表 删除一条记录
4.ResultSet:结果集对象,封装查询结果
Boolean next():游标向下移动一行,判断当前行是否是最后一行的末尾(是否有数据),如果是则返回false,不是返回true。
getXxx(参数):代表数据类型 如: int getInt(1),String getString()
参数:
1.int:代表列的编号,从1开始。 如:getInt(1)
2.String:代表列名称。 如:getString("balance")
注意:
1.游标向下移动一行
2.判断是否有数据
3.获取数据
练习:案例演示:https://blog.csdn.net/qq_36050720/article/details/100075792
定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回。
1.定义Emp类
2.定义方法 public List
3.实现方法 select * from emp;
5.PreparedStatement:执行sql的对象
1.SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
2.解决sql注入问题:使用PreparedStatement对象来解决
3.预编译的SQL:参数使用?作为占位符
4.步骤:
1.导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
2.注册驱动
3.获取数据库连接对象 Connection
4.定义sql
注意:sql的参数使用?作为占位符。 如:select * from user where username = ? and password = ?
5.获取执行sql语句的对象 PreparedStatement Connection.PreparedStatement(String sql)
6.给?赋值:
方法:setXxx(参数1,参数2)
参数1:?的位置编号 从1开始
参数2:?的值
6.执行sql,接收返回结果,不需要传递sql语句
7.处理结果
8.释放资源
5.注意:后期都会使用PreparedStatement来完成增删改查的所有操作
1.可以防止SQL注入
2.效率更高