JDBC介绍
java data base connectivity, java数据库连接
java通过该标准去操作MySQL, Oracle等数据库
用到的包
java.sql; javax.sql
类:DriverManager 注册驱动
接口:Connection 获取连接
Statement
ResultSet
PreparedStatement
CallableStatement
DateSource (javax.sql)
入门代码
前提创建一个数据库
create table user(
id int primary key auto_increment,
username varchar(20) unique not null;
password varchar(20) not null;
emai varchar(40) not null;
);
insert into user values (null, 'tom', '123', 'tom@163.com');
insert into user values(null, 'fox', '123', 'fox@163.com');
// 驱动需要下载,jar包,将其导入到环境路径中
import java.sql.DriverManager; // 驱动管理,注册驱动
import com.mysql.jdbc.Driver; //此驱动是mysql提供
import java.sql.Connection;
import java.sql.ResultSet;
public class jdbcDemo1{
public static void main(String[] arg){
//注册驱动,还有另一种方式Class.forName("com.jdbc.mysql.Driver");
DriverManager.registerDriver(new Driver()); //此处有异常,抛出
//获取连接对象
Connection con = (Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/day17", "root", "abc");
//通过连接对象获取操作sql语句的Statement
Statement st = con.createStatement();
//操作sql语句
String sql = "select * from user";
ResultSet rs = st.excuteQuery(sql); //返回结果集
//遍历结果集,可以记住
while(rs.next){
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
String email = rs.getString("email");
System.out.println(id+" "+ username+password+email);
}
//释放资源,关闭数据库
//java与数据库连接,必须释放资源
rs.close();
st.close();
con.close();
}
}
DriveManager详解
注册驱动:
//DriverManager类是管理一组JDBC驱动程序的基本服务
//底层是vector容器,可以装入很多数据库驱动
//第一种方式,这种方式,根据源码可知,DriverManager中会产生两个Driver
DriverManager.registerDriver(new Driver());
//第二种方式,反射机制。推荐使用
//降低耦合,不依赖于驱动
Class.forName("com.mysql.jdbc.Driver");//注册MySQL驱动
Class.forName("oracle.jdbc.driver.OracleDriver");//注册oracle驱动
//通过DriverManager获取连接对象
Connection con = DriverManager.getConnection(String url, String user; String password); //url确定使用哪一个驱动
关于URL
url格式:
主协议 自协议 主机 端口 数据库
jdbc : mysql ://localhost:3306/day17
mysql url: jdbc:mysql://localhost:3306/数据库名
mysql 简写 url: jdbc:mysql:///day17 (本地的,且端口号3306)
oracle url: jdbc:oracle:thin:@localhost:1521:sid
在url后面可以带参数:
useUnicode=true&characterEncoding=UTF-8
Connection详解 java.sql.Connection;
代表连接对象,数据库与程序的连接
作用:
- 通过Connection获得操作sql的Statement对象
- Statement st = con.createStatement();
- 获取执行预处理的PraparedStatement对象
- 获取存储过程的CallableStatement对象
- 操作事务
- setAutoCommit(boolean flag) 开启事务
- rollback() 事务回滚
- commit() 事务提交
//通过DriverManager获取连接对象
Connection con = DriverManager.getConnection(String url, String user; String password); //url确定使用哪一个驱动
Statement st = con.createStatement();
Statement详解 java.sql.Statement;
作用:
-
执行sql语句
- DML:insert update delete 插入 修改 删除
- 使用方法 int executeUpdate(String sql)
- DQL: select 查询
-
使用方法 ResultSet executeQuery(String
sql)excute(String sql) 执行任意sql语句,少用
-
- DML:insert update delete 插入 修改 删除
-
批处理操作
- addBatch(String sql); 将sql添加到批处理
- executeBatch(); 批量处理
- clearBatch(); 清空批处理
//执行update语句
int row = st.executeUpdate("update user set password='135'");
System.out.println(row);//=2;里面有两条记录,两个记录的password改了
//根据返回值,判断修改是否成功
ResultSet详解 java.sql.ResultSet
封装select语句执行后的结果集(表)
初始的时候,游标在第一行之前,调用ResultSet.next()方法,使游标指向具体的行
ResultSet rs = st.excuteQuery("select * from user"); //返回结果集
//获取任意类型的数据
rs.getObject(int index);
rs.getObject(String columnName);
//获取指定类型的数据
rs.getString(int index);
rs.getString(String columnName);
rs.getInt(String columnName); //等等
//遍历
while(rs.next()){
...
}
//部分函数
rs.next() ;// 移动到下一行
rs.previous(); //移动到前一行
rs.absolute(int row); //移动到指定行
rs.beforeFirst(); //移动到最前面
rs.afterLast(); //移动到最后面
rs.updateRow(); //更新行数据
释放资源
通常需要关闭的对象:
- ResultSet
- Statement
- Connection(务必注意)
包含异常处理的入门代码
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Driver;
//对异常进行try-catch
public class jdbcDemo4 {
public static void main(String[] args) {
Connection con = null;
Statement st = null;
ResultSet rs = null;
//注册驱动
try {
DriverManager.registerDriver(new Driver());
//获取连接
con = (Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/day17","root","123");
//获取sql的Statement
st = con.createStatement();
//执行
rs = st.executeQuery("select * from user");
//遍历
while(rs.next()){
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
String email = rs.getString("email");
System.out.println(id+" "+ username+" "+password+" "+email);
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
//释放资源
if(rs!= null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
try {
if(st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
网友评论