jdbc基础
1.概述
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API。JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成。
JDBC需要连接驱动,驱动是两个设备要进行通信,满足一定通信数据格式,数据格式由设备提供商规定,设备提供商为设备提供驱动软件,通过软件可以与该设备进行通信。 今天我们使用的是mysql的驱动mysql-connector-java-5.1.37-bin.jar
2.JDBC规范(掌握四个核心对象):
DriverManager:用于注册驱动
Connection: 表示与数据库创建的连接
Statement: 操作数据库sql语句的对象
ResultSet: 结果集或一张虚拟表
3.JDBC原理
4.开发步骤
注册驱动
告诉jvm使用的是哪个数据库
获得连接
就是连接数据库,获取到数据库的连接对象,Connection对象
获得执行sql语句的对象
Connection连接对象获取执行sql语句的Statement对象
执行sql语句,并返回结果
Statement对象,执行增删改,返回结果,返回int数字,代表的是影响的行数
Statement对象,执行查询,返回结果集ResultSet对象
处理结果
增删改,返回结果,返回int数字,代表的是影响的行数,不用处理
执行查询,返回结果集ResultSet对象,需要处理,遍历或者封装对象
释放资源
Connection,Statement,ResultSet以上3个对象,都有close方法
5.API详解
注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 不建议使用,原因有2个:
导致驱动被注册2次
强烈依赖数据库的驱动jar
解决办法:
Class.forName(“com.mysql.jdbc.Driver”);
获得链接
static Connection getConnection(String url, String user, String password) :试图建立到给定数据库 URL 的连接。
参数说明:
url 需要连接数据库的位置(网址)
user用户名
password 密码
例如: getConnection(“jdbc:mysql://localhost:3306/day04”, “root”, “root”);
扩展:
URL:SUN公司与数据库厂商之间的一种协议。
jdbc:mysql://localhost:3306/day04
协议子协议 IP :端口号数据库mysql:jdbc:mysql://localhost:3306/day04 或者 jdbc:mysql:///day04(默认
本机连接) oracle数据库: jdbc:oracle:thin:@localhost:1521:sid
java.sql.Connection接口:一个连接
接口的实现在数据库驱动中。所有与数据库交互都是基于连接对象的。
Statement createStatement(); //创建操作sql语句的对象
java.sql.Statement接口: 操作sql语句,并返回相应结果
String sql = “某SQL语句”;
获取Statement语句执行平台:Statement stmt =con.createStatement();
常用方法:
int executeUpdate(String sql); --执行insert update delete语句.
ResultSet executeQuery(String sql); --执行select语句.
boolean execute(String sql); --仅当执行select并且有结果时才返回true,执行其他的语句返回false.
6.处理结果集(注:执行insert、update、delete无需处理)
ResultSet实际上就是一张二维的表格,我们可以调用其boolean next() 方法指向某行记录,当第一次调用next() 方法时,便指向第一行记录的位置,这时就可以使用ResultSet提供的 getXXX(int col) 方法来获取指定列的数据:(与数组索引从0开始不同,这里索引从1开始)
rs.next();//指向第一行
rs.getInt(1);//获取第一行第一列的数据
常用方法:
Object getObject(int index) / Object getObject(String name) 获得任意对象
String getString(int index) / String getString(String name) 获得字符串
int getInt(int index) / int getInt(String name) 获得整形
double getDouble(int index) / double getDouble(String name) 获得双精度浮点型
释放资源
与IO流一样,使用后的东西都需要关闭!关闭的顺序是先得到的后关闭,后得到的先关闭。
rs.close();
stmt.close();
con.close();
package jdbcxue;
import java.sql.*;
public class Demo01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//addOne();
//updateOne();
//deleteOne();
//queryOne();
queryAll();
}
//添加一条记录
private static void addOne() throws ClassNotFoundException, SQLException {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
//定义数据库的连接地址
String url = "jdbc:mysql://localhost:3306/day02";
//定义用户名
String userName = "root";
//定义密码
String passWord = "123456";
Connection con = DriverManager.getConnection(url, userName, passWord);
//3.获得执行sql语句的对象
Statement statement = con.createStatement();
//定义sql语句
String sql = "insert into scores(sid,score,sname) values(1,100,'柳岩')";
//Statement对象调用exexuteUpdate方法执行sql语句,获取结果
int result = statement.executeUpdate(sql);
if (result > 0){
System.out.println("添加一条记录成功");
}else{
System.out.println("添加一条记录失败");
}
//关闭资源
statement.close();
con.close();
}
//修改一条记录
private static void updateOne() throws ClassNotFoundException, SQLException {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
//定义数据库的连接地址
String url = "jdbc:mysql://localhost:3306/day02";
//定义用户名
String userName = "root";
//定义密码
String passWord = "123456";
Connection con = DriverManager.getConnection(url, userName, passWord);
//3.获得执行sql语句的对象
Statement statement = con.createStatement();
//定义sql语句
String sql = "update scores set score=60 where sname='柳岩'";
//Statement对象调用exexuteUpdate方法执行sql语句,获取结果
int result = statement.executeUpdate(sql);
if (result > 0){
System.out.println("修改一条记录成功");
}else{
System.out.println("修改一条记录失败");
}
//关闭资源
statement.close();
con.close();
}
//删除一条记录
private static void deleteOne() throws ClassNotFoundException, SQLException {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
//定义数据库的连接地址
String url = "jdbc:mysql://localhost:3306/day02";
//定义用户名
String userName = "root";
//定义密码
String passWord = "123456";
Connection con = DriverManager.getConnection(url, userName, passWord);
//3.获得执行sql语句的对象
Statement statement = con.createStatement();
//定义sql语句
String sql = "delete from scores where sname='柳岩'";
//Statement对象调用exexuteUpdate方法执行sql语句,获取结果
int result = statement.executeUpdate(sql);
if (result > 0){
System.out.println("删除一条记录成功");
}else{
System.out.println("删除一条记录失败");
}
//关闭资源
statement.close();
con.close();
}
//查询一条记录
private static void queryOne() throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/day02","root","123456");
Statement statement = con.createStatement();
String sql = "select * from scores where sid=1";
ResultSet rs = statement.executeQuery(sql);
if (rs.next()){
int sid = rs.getInt(1);//根据列的编号
int score = rs.getInt(2);
String sname = rs.getString("sname");
System.out.println("编号:" + sid + ",姓名:" + sname + ",成绩:" + score);
}else {
System.out.println("没有该学生");
}
rs.close();
statement.close();
con.close();
}
//查询所有记录
private static void queryAll() throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/day02","root","123456");
Statement statement = con.createStatement();
String sql = "select * from scores";
ResultSet rs = statement.executeQuery(sql);
while (rs.next()){
Object sid = rs.getObject(1);//根据列的编号
Object score = rs.getObject(2);
Object sname = rs.getObject(3);
System.out.println("编号:" + sid + ",姓名:" + sname + ",成绩:" + score);
}
rs.close();
statement.close();
con.close();
}
}