1.JDBC概述:
Java database connection:java数据库连接;
为什么要用Java连接数据库?
我们所需要的程序是自动化执行的,不是通过键盘在控制台下输入命令来控制DB的
JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库
2.JDBC步骤:
l 导入jar包
l 注册驱动
l 获得连接
l 获得发送命令对象
l 发送命令,获得返回资源
l 处理返回的资源
l 关闭资源
2.1 DriverManager类讲解
Jdbc程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法
Class.forName("com.mysql.jdbc.Driver");
DriverManager.getConnection(url, user, password),
2.2 数据库URL讲解
URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库
常用数据库URL地址的写法:
Oracle写法: jdbc:oracle:thin:@localhost:1521:sid
SqlServer写法: jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid
MySql写法: jdbc:mysql://localhost:3306/sid
如果连接的是本地的Mysql数据库,并且连接使用的端口是3306,
那么的url地址可以简写为: jdbc:mysql:///数据库
2.3 Connection类讲解
Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常
用方法:
createStatement():创建向数据库发送sql的statement对象。
prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
prepareCall(sql):创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit() :在链接上提交事务。
rollback() :在此链接上回滚事务。
2.4 Statement类讲解
Jdbc程序中的Statement对象用于向数据库发送SQL语句,Statement对象常用方法:executeQuery(String sql) :用于向数据发送查询语句。
executeUpdate(String sql):用于向数据库发送insert、update或delete语句
execute(String sql):用于向数据库发送任意sql语句
addBatch(String sql) :把多条sql语句放到一个批处理中。
executeBatch():向数据库发送一批sql语句执行。
2.5 ResultSet类讲解
Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式.ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游
标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方
法获取该行的数据。
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
获取任意类型的数据
getObject(int index)
getObject(string columnName)
获取指定类型的数据,例如:
getString(int index)
getString(String columnName)
ResultSet还提供了对结果集进行滚动的方法:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。
释放资源
Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互
的对象,这些对象通常是ResultSet, Statement和Connection对象,特别是Connection
对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不 能及时、正确的关
闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。
为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。
3.使用JDBC对数据库进行CRUD
3.1 statement对象介绍
* create
Statement st = conn.createStatement();
String sql = "insert into user(….) values(…..) ";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println("插入成功!!!");
}
* update
Statement st = conn.createStatement();
String sql = “update user set name=‘’ where name=‘’";
int num = st.executeUpdate(sql);
if(num>0){
System.out.println(“修改成功!!!");
}
* delete
Statement st = conn.createStatement();
String sql = “delete from user where id=1;
int num = st.executeUpdate(sql);
if(num>0){
System.out.println(“删除成功!!!");
}
* read
Statement st = conn.createStatement();
String sql = “select * from user where id=1;
ResultSet rs = st.executeUpdate(sql);
while(rs.next()){
//根据获取列的数据类型,分别调用rs的相应方法映射到java对象中
}
3.2 PreparedStatement对象介绍
String sql = “select * from tab_student where s_number=?”; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, “S_1001”); ResultSet rs = pstmt.executeQuery(); rs.close();
SQL注入
SELECT * FROM users WHERE NAME= 'ss' AND PASSWORD = '' OR '1' = '1';SELECT * FROM users WHERE NAME= 'ss' AND PASSWORD = '';DROP TABLE users;
4.MySQL数据库中操作事务命令
提交事务(commit)
回滚事务(rollback)
5.JDBC中使用事物
当Jdbc程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会 自动向数据库提交在它上面发送的SQL语句.若想关闭这种默认提交方式,让多条 SQL在一个事务中执行,可使用下列的JDBC控制事务语句 Connection.setAutoCommit(false);//开启事务(start transaction) Connection.rollback();//回滚事务(rollback) Connection.commit();//提交事务(commit)
6.使用JDBC进行批处理
6.1 使用Statement完成批处理
1.使用Statement对象添加要批量执行SQL语句,如下: Statement.addBatch(sql1); Statement.addBatch(sql2); Statement.addBatch(sql3); 2、执行批处理SQL语句:Statement.executeBatch(); 3、清除批处理命令:Statement.clearBatch(); 采用Statement.addBatch(sql)方式实现批处理的优缺点 优点:可以向数据库发送多条不同的SQL语句。 缺点:SQL语句没有预编译。 insert into account values(1,’DD’,100);
6.2 使用PreparedStatement完成批处理
使用PreparedStatement完成批处理范例
long starttime = System.currentTimeMillis();
本文详细介绍了JavaWeb中JDBC的使用,包括JDBC概述、JDBC连接步骤、DriverManager、数据库URL、Connection、Statement、ResultSet的讲解。深入探讨了如何利用JDBC进行CRUD操作,特别提到了PreparedStatement以防止SQL注入。同时,文章还涵盖了MySQL事务处理命令以及JDBC的批处理功能,分别展示了Statement和PreparedStatement的批处理实现。
169

被折叠的 条评论
为什么被折叠?



