一.介绍
JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。
有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Mysql数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。
二.知识点介绍
1、JDBC的连接模式
2、JDBC常用类
3、JDBC操作流程
三.上课对应视频的说明文档
1、JDBC的连接模式
(1)加载驱动(对应数据库,下载对应的jar包)
(2)MySQL数据库 Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost:3306/myDB?user=
soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//myDB为数据库名
Connection conn= DriverManager.getConnection(url);
(3)Oracle8/8i/9i数据库(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2、JDBC常用类
(1)DriverManager:
DriverManager是JDBC的管理层,作用于用户和驱动程序之间。
DriverManager跟踪可用的驱动程序,并在数据库和相应的驱动程序之间建立连接。
DriverManager处理驱动程序登陆时间限制、跟踪消息的显示等。
(2)Connection:
Connection与特定数据库的连接(会话),在连接上下文中执行 SQL 语句并返回结果。
DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上:
Connection con= DriverManager.getConnection(url,login,password);
(3)Statement
用于执行静态 SQL 语句并返回它所生成结果的对象。
一般情况下使用connection.createStatement()方法可以得到Statement实例。
A、三种Statement对象:
Statement:用于执行不带参数的简单SQL 语句
PreparedStatement:用于执行带或不带IN参数的预编译SQL语句
CallableStatement:用于执行对数据库现有存储过程的调用。
B、常用的Statement方法:
execute():运行语句,返回是否有结果集。(有:true,无:false)
executeQuerty():运行查询语句,返回ResultSet结果集。
executeUpdate():运行更新操作,返回更新的行数。
C、PreparedStatement
第一步:通过连接获得PreparedStatement对象,用占位符(?)的sql语句构造。
PrepareStatement pstm=con.prepareStatement(“select * from userinfo where id=?”);
第二步:设置参数
pstm.setString(1,”ganbin”);
第三步:执行SQL语句
rs=pstm.excuteQuery();
(4)ResultSet
Statement执行SQL语句时返回ResultSet结果集。
ResultSet提供的检索不同类型字段的方法,常用的有:
getString():获得在数据库里是varchar、char等数据类型的对象。
getFloat():获得在数据库里是Float类型的对象。
getDate():获得在数据库里面是Date类型的数据。
getBoolean():获得在数据库里面是Boolean类型的数据。
getObject():在Sql中无对应类型,获得序列化对象。
3、JDBC操作流程
(1) 加载对应数据库(mysql,db2,oracle,sqlServer等)的驱动jar包
(2) 加载驱动:Class.forName("");
(3) 创建连接:
Connection⇒DriverManger.getConnection(url,name,password);
(4) 创建 SQL语句
A、 增(insert into)、删(delete),修改(update)
B、 查询(select)
(5) 加载SQL
PreparedStatement⇒conn.prepareStatement(sql);
(6) 补齐SQL中的通配符
ps.setString(1, "男");//setString()表示字段类型,1表示位置,"男"表示对应的值
ps.setInt(2, 20);
(7) 执行SQL
A、 有返回值
ResultSet rs=ps.executeQuery();
B、 没有返回值
ps.executeUpdate();
案例:
(1) 加载驱动创建链接
代码示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/* JDBC连接
* (1)导入驱动jar包,不同数据库有不同jar包
* (2)代码介入
* */
public class JdbcLj {
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn=null;//得到数据库连接对象
try {
Class.forName("org.gjt.mm.mysql.Driver"); // 加载驱动
System.out.println("加载驱动");
conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/ww", "root", "root");// 获取连接
System.out.println("获取连接");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
(2) 完成增加操作
代码示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/* JDBC连接
* (1)导入驱动jar包,不同数据库有不同jar包
* (2)代码介入
* */
public class JdbcLj {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn=null;//得到数据库连接对象
try {
Class.forName("org.gjt.mm.mysql.Driver"); // 加载驱动
System.out.println("加载驱动");
conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/ww", "root", "root");// 获取连接
System.out.println("获取连接");
//表的操作,都是SQL
String sql="insert into students(name,xh,sex,age) values(?,?,?,?)";
PreparedStatement ps=conn.prepareStatement(sql);//加载SQL
ps.setString(1, "李四");
ps.setInt(2, 0001);
ps.setString(3, "女");
ps.setInt(4,19);
//PreparedStatement 加载SQL语句,可以操作有参的SQL
//Statement 操作无参
ps.executeUpdate();//执行查询语句并接收结果
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
(3) 完成修改操作
代码示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/* JDBC连接
* (1)导入驱动jar包,不同数据库有不同jar包
* (2)代码介入
* */
public class JdbcLj {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn=null;//得到数据库连接对象
try {
Class.forName("org.gjt.mm.mysql.Driver"); // 加载驱动
System.out.println("加载驱动");
conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/ww", "root", "root");// 获取连接
System.out.println("获取连接");
//表的操作,都是SQL
String sql="update students name=? where id=?";
PreparedStatement ps=conn.prepareStatement(sql);//加载SQL
ps.setString(1, "李四");
ps.setInt(2, 1);
//PreparedStatement 加载SQL语句,可以操作有参的SQL
//Statement 操作无参
ps.executeUpdate();//执行查询语句并接收结果
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
(4) 完成删除操作
代码示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/* JDBC连接
* (1)导入驱动jar包,不同数据库有不同jar包
* (2)代码介入
* */
public class JdbcLj {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn=null;//得到数据库连接对象
try {
Class.forName("org.gjt.mm.mysql.Driver"); // 加载驱动
System.out.println("加载驱动");
conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/ww", "root", "root");// 获取连接
System.out.println("获取连接");
//表的操作,都是SQL
String sql="delete from students where id=? ";
PreparedStatement ps=conn.prepareStatement(sql);//加载SQL
ps.setInt(1, 9);
//PreparedStatement 加载SQL语句,可以操作有参的SQL
//Statement 操作无参
ps.executeUpdate();//执行查询语句并接收结果
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
(5) 完成查询操作
代码示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/* JDBC连接
* (1)导入驱动jar包,不同数据库有不同jar包
* (2)代码介入
* */
public class JdbcLj {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection conn=null;//得到数据库连接对象
try {
Class.forName("org.gjt.mm.mysql.Driver"); // 加载驱动
System.out.println("加载驱动");
conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/ww", "root", "root");// 获取连接
System.out.println("获取连接");
//表的操作,都是SQL
String sql="select * from students where sex=? and age>?";
PreparedStatement ps=conn.prepareStatement(sql);//加载SQL
ps.setString(1, "男");
ps.setInt(2, 20);
//PreparedStatement 加载SQL语句,可以操作有参的SQL
//Statement 操作无参
ResultSet rs=ps.executeQuery();//执行查询语句并接收结果
while(rs.next()){
System.out.println(rs.getString("name")+" "+rs.getInt("age"));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}