JDBC笔记

JDBC:
JDBC概念:连接数据库的,
一:导入jar包
1:导入jar包
2:注册驱动
Class.forName(“com.mysql.jdbc.Driver”);
3:获取数据库连接对象
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/db3”, “root”, “root”);
4:定义sql语句
String sql=“update a set age=30 where id=1”;
5:获取执行sql的对象 statement
Statement stmt=conn.createStatement();
6:执行sql
int count=stmt.executeUpdate(sql);
7:处理结果
System.out.println(count);
8:释放资源
conn.close();
stmt.close();
二:讲解各个类
1:DriverManager:驱动管理对象
1:注册驱动:告诉程序使用哪一个数据库驱动jar;
2:获取数据库连接:
static Connection getConnection(String url,String ueser,String password)
注意:也可以不写,mysql5之后的驱动可以省略;
2:Connection:数据库连接对象
1:获取执行sql的对象
statement createstatement()
preparedstatement preparedstatement (string sql)
2:管理事务
开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
提交事务:commit()
回滚事务:rollback()
3:statement:执行sql的对象
1:boolean execute(String sql):可以执行任意的sql(了解)
2:int executeUpdate(string sql):执行dml(insert、update、delete)语句 ddl(create、 alter、 drop)
3:resultset executeQuery(string sql):执行dql(select)语句
4:resultset:结果集对象(查询数据库里的数据的)
next():游标向下移动一行
getXXX(参数):数据类型
XXX:代表数据类型 如:int getInt(),string getString()
string:代表列名称。如getDouble(“balance”)
遍历输出: while(rst.next()){
int anInt = rst.getInt(1);
String nm= rst.getString(“name”);
System.out.println(anInt+“—”+nm+“===”);
}
5:preparedstatement:执行sql的对象
1:sql注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
1:输入用户随便,输入密码:a’or’a’='a
2:sql:select * from user where username=‘fhdsjkf’ and password=‘a’ or ‘a’ =‘a’
2:解决sql注入问题:使用PreparedStatement对象来解决
3:预编译的sql:参数使用?作为占位符
4:步骤:
1:导入jar包
2:注册驱动
3:获取数据库连接对象Connection
4:定义sql
注意:sql的参数使用?作为占位符。如:select * from user where username=? and password=?;
5:获取执行sql语句的对象 PreparedStatement Connection。prepareStement(String sql)
6:给?赋值:
方法:setXXX(参数1,参数2)
参数1:?的位置编号 从1开始
参数2:?的值
7:执行sql,接受返回结果,不需要传递sql语句
8:处理结果
9:释放资源
注意:后期都会使用PrepardeStement来完成增删改查的所有操作
1:可以防止sql注入
2:效率更高
代码实现: String sql=“select * from user where name=? and id= ?”;
conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/ob”, “root”, “root”);
pst = conn.prepareStatement(sql);
pst.setString(1,name);
pst.setString(2,id);
rss = pst.executeQuery();
其他的都一样
JDBC控制事务(可以放在实现增删改查的代码中)
1:事务:一个包含多个步骤的业务操作。如果这个业务被事务管理,则多个步骤要么同时成功,要么同时失败。
1:开启事务:conn.setAutoCommit(false); 在执行sql之前开启事务
2:提交事务:conn.commit(); 当所有sql都执行完提交事务
3:回滚事务:conn.rollback(); 在catch中回滚事务
数据库连接池:
1:概念:其实就是一个容器(集合),存放数据库连接的容器
2:好处:
1:节约资源
2:用户访问高效
3:实现:
1:标准接口:DataSource
获取连接:getConnection()
归还连接:Connection。close()。如果连接对象是从连接池中获取的,这不会在关闭连接
2:一般我们不去实现它,有数据库厂商来实现
1:C3P0:数据库连接池技术
2:Druid:数据库连接池实现技术,由阿里巴巴提供的
Druid:数据库连接池实现技术,由阿里巴巴提供的
1:步骤
1:导入jar包 druid-1.0.9.jar
2:定义配置文件
是properties形式的
可以叫任意名称,可以放在任意陌目录下
3:加载配置文件。properties
4:获取数据库连接池对象:通过工厂来获取 DruidDataSourceFcatory
5:获取连接:getConnection
2:定义工具类
1:定义一个类 JDBCUtils
2:提供静态代码块加载配置文件,初始化连接池对象
3:提供方法
1:获取连接方法:通过数据库连接池获取连接
2:释放资源
3:获取连接池的方法

代码(实例)
	public static void main(String[] args) {
    		Connection conn=null;
    		PreparedStatement pstmt=null;
    		try {
        		//获取连接
        		conn = gjler.getConnection();
        		//定义sql
        		String sql="insert into a(id,name,age) values(1,?,?)";
        		//获取pstmt对象
        		pstmt = conn.prepareStatement(sql);
        		//给?赋值
        		pstmt.setString(1,"张三");
        		pstmt.setString(2,"18");
        		//执行sql
        		int i = pstmt.executeUpdate();
        		System.out.println(i);
    			} catch (SQLException e) {
        		e.printStackTrace();
    			}finally {
        		//释放资源
        		gjler.close(pstmt,conn);
    		}
		}
	}

Spring JDBC(重要)
Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
步骤:
1:导入jar包
2:创建JDBCTemplate对象,依赖于数据源DataSource
jdbcTemplate template=new jdbcTemplate(ds);
代码实现:
JdbcTemplate template = new JdbcTemplate(gjler.getDataSource());
String sql=“update a set age=150 where id=?”;
int update = template.update(sql, 1);
System.out.println(update);
解释:gjler:工具类(driud工具类)
3:调用jdbcTemplate的方法来完成CRUD的操作(比之前简单多了,很好用)(依靠driud来实现)
1:update():执行DML语句。增删改语句
2:queryForMap():查询结果将结果集封装为map集合 注意这个方法查询的结果集长度只能是1(只能查询出一条数据)
3:queryForlist():查询结果将结果封装为list集合 可以查询出很多条数据
4:query():查询结果,将结果封装为javaBean对象
query的参数:RowMapper
一般我们使用BeanPropertyRowMmpper实现类。可以完成数据到JavaBean的自动封装
new BeanPropertyRowMapper(d10.class) 解释:d10:JavaBean(get set)方法
5:queryForObject:查询结果,将结果封装为对象
一般用于聚合函数
查询记录数目:queryForObject(sql,long.class)
代码实现:
JdbcTemplate jdbcTemplate = new JdbcTemplate(gjler.getDataSource());
String sql=“select count(id) from a”;
Long aLong = jdbcTemplate.queryForObject(sql, long.class);
System.out.println(aLong);
三:万能代码:
Statement stmt=null;
Connection conn=null;
try {
String sql=“delete from a where id=1”;(想要修改 删除还是其他的 要在这里打代码)
conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/ob”, “root”, “root”);
stmt = conn.createStatement();
int count=stmt.executeUpdate(sql);
System.out.println(count);
if (count>0){
System.out.println(“添加成功”);
}else {
System.out.println(“添加失败”);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
if (stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
if (conn !=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

}

练习:(希望后期能看懂)
1:(d3为get set方法)(目的:整合成一个对象 输出)
package itcast;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class d4 {
public static void main(String[] args) {
List list=new d4().a();
System.out.println(list);
}
public List a(){
Connection conn=null;
Statement s=null;
ResultSet r=null;
d3 d3=null;
List list=null;
try {
String sql=“select * from a”;
conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/ob”, “root”, “root”);
s = conn.createStatement();
r = s.executeQuery(sql);
list=new ArrayList();
while (r.next()){
int id = r.getInt(“id”);
String name = r.getString(“name”);
int age = r.getInt(“age”);
d3=new d3();
d3.setId(id);
d3.setName(name);
d3.setAge(age);
list.add(d3);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
if (r!=null){
try {
r.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (s!=null){
try {
s.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return list;
}
}
简化版:(查询所有记录,将其封装在Emp对象的list集合)(非常好用)
public static void main(String[] args) {
JdbcTemplate template = new JdbcTemplate(gjler.getDataSource());
String sql=“select * from a”;
List query = template.query(sql, new BeanPropertyRowMapper(d10.class));
for (d10 d10 : query) {
System.out.println(d10);
}
}
解释:d10:为java bean也就是get set方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值