1.JDBC入门
a.介绍:使用java程序发送sql语句到数据库服务器端执行,这叫用到了JDBC技术。jdbc是Oracle- Sun 公司设计的一套专门用于java程序操作数据库的接口。
b.使用jdbc发送sql条件
连接mysql数据库数据库主机端口、数据库、用户名、数据库密码、连接的数据库。
c.核心api
Driver接口: 数据库驱动程序的接口,所有具体数据库厂商需要的驱动程序需要实现此接口。
Connectionconnect(String url, Properties info) 用于获取数据库连接
Connection接口:与具体的数据库的连接对象。
StatementcreateStatement() 创建一个静态sql语句对象
PreparedStatementprepareStatement(String sql) 创建预编译的sql语句对象
CallableStatementprepareCall(String sql) 创建存储过程的sql语句对象
Statement接口:用于执行静态 SQL 语句
intexecuteUpdate(String sql) 执行更新操作的sql语句 (create/alter/drop) DDL语句
(insert/update/delete)DML语句
ResultSetexecuteQuery(String sql) 执行查询操作的sql语句
(select)(DQL查询语句)
PreparedStatement接口:用于执行预编译的SQL语句(是Statement的子接口)
intexecuteUpdate() 执行更新操作的sql语句
ResultSetexecuteQuery() 执行查询操作的sql语句
CallableStatement接口:用于执行 SQL 存储过程的接口(是PreparedStatement子接口)
ResultSetexecuteQuery() 执行存储过程的sql语句
ResultSet接口:结果集对象。 存储所有数据库查询的结果,用该对象进行数据遍历。
booleannext():把光标移动到下一行。如果下一行有数据,返回true,如果没有下一行数 据,返回false。
getXXX(列索引|列字段名称): 获取字段的数据
public class DriverDemo {
private static String url = "jdbc:mysql://localhost:3306/day20";
//jdbc协议:mysql协议://主机地址:端口号/需要连接的数据库名称
private static String user = "root";
private static String password="root";
public static void main(String[] args) throws Exception {
/**
* java程序连接mysql数据库
* 1.mysql数据库的主机地址
* 2.端口号
* 3.用户名
* 5.密码
* 6.需要连接的数据库
*
* 先使用java程序连接我们的数据库,需要一个连接对象Connection
*/
//conn1();
//conn2();
conn3();
}
private static void conn3() throws Exception {
//注册驱动,mysql驱动程序的Driver实现类已经在静态代码块中注册好了驱动,只需要将 Driver实现类加载到我们的内存中,static代码块就会自动执行
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取java连接数据库的对象
Connection conn = DriverManager.getConnection(url, user, password);
//打印这个连接对象
System.out.println(conn);
}
private static void conn2() throws Exception {
//使用驱动管理类,连管理我们的驱动程序,并获取连接
//1.注册驱动
//public static void registerDriver(Driver driver)throws SQLException
Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(driver);
//获取连接
//public static Connection getConnection(String url,String user,String password)throws SQLException
Connection conn = DriverManager.getConnection(url, user, password);
//打印这里数据库连接
System.out.println(conn);
}
//直连
private static void conn1() throws SQLException {
//创建一个驱动类对象Driver
Driver driver = new com.mysql.jdbc.Driver();
//获取java连接数据库的连接
//Connection connect(String url, Properties info)throws SQLException
//创建一个properties集合
Properties prop = new Properties();
prop.setProperty("user", user);
prop.setProperty("password", password);
Connection conn = driver.connect(url, prop);
//打印这个连接对象,如果连接对象不为空,就说明我们已经成功获取到了连接对象
System.out.println(conn);
}
}
2.Statement对象执行SQL操作
public class Demo {
private static String url = "jdbc:mysql://localhost:3306/day20";
private static String user = "root";
private static String password = "root";
public static void main(String[] args){
Connection conn = null;
Statement stmt = null;
try {
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库连接
conn = DriverManager.getConnection(url, user, password);
//创建语句执行者
stmt = conn.createStatement();
//int executeUpdate(String sql)
//throws SQLException执行给定 SQL 语句,
//该语句可能为 INSERT、UPDATE 或 DELETE 语句,或者不返回任何内容的 SQL 语句 (如 SQL DDL 语句)。
String sql = "CREATE TABLE student("+
"id INT,"+
"NAME VARCHAR(20),"+
"age INT"+
");";
//使用语句执行者执行创建的sql语句
int count = stmt.executeUpdate(sql);
//打印一下影响的结果
System.out.println(count);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}finally{
//释放资源
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
3.执行DML操作
public class Demo2 {
private static String url = "jdbc:mysql://localhost:3306/day20";
private static String user = "root";
private static String password = "root";
public static void main(String[] args) {
//testInsert();//给数据库添加一条记录
//testUpdate();//修改数据库中的一条数据
testDelete();
}
private static void testDelete() {
//需求:将刘德华改为岳云鹏
Connection conn = null;
Statement stmt = null;
try{
//2.获取连接对象
conn =JDBCUtil.getConn();
//3.准备sql
String sql = "DELETE FROM student WHERE id=1;";
//4.获取语句执行者
stmt = conn.createStatement();
//5.发送兵长执行sql
int count = stmt.executeUpdate(sql);
//打印影响的行数
System.out.println(count);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException();
}finally{
JDBCUtil.close(conn, stmt, null);
}
}
private static void testUpdate() {
//将刘德华改为岳云鹏
Connection conn = null;
Statement stmt = null;
try{
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接对象
conn =DriverManager.getConnection(url, user, password);
//3.准备sql
String sql = "UPDATE student SET NAME=‘岳云鹏‘ WHERE id=1;";
//4.获取语句执行者
stmt = conn.createStatement();
//5.发送兵长执行sql
int count = stmt.executeUpdate(sql);
//打印影响的行数
System.out.println(count);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException();
}finally{
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
private static void testInsert() {
//专门测试添加功能
Connection conn = null;
Statement stmt = null;
try{
//注册驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
conn = DriverManager.getConnection(url, user, password);
//定义sql
String sql = "INSERT INTO student VALUES(1,‘刘德华‘,50);";
//获取语句执行者
stmt = conn.createStatement();
//使用语句执行者发送并执行sql语句,并返回影响的行数
int count = stmt.executeUpdate(sql);
System.out.println(count);
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException();
}finally{
//释放资源
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
4.执行DQL查询操作
public class Demo3 {
public static void main(String[] args) {
//定义一个连接对象和一个语句执行者
Connection conn =null;
Statement stmt = null;
ResultSet rs = null;
try{
conn = JDBCUtil.getConn();
//定义sql
String sql = "SELECT * FROM student;";
//获取语句执行者对象
stmt = conn.createStatement();
//执行DQL查询语句
//ResultSet executeQuery(String sql)
//throws SQLException执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。
rs = stmt.executeQuery(sql);
//ResultSet是一个结果集
/*//判断有没有下一行数据
if (rs.next()) {
//说明有下一行数数据
System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
}
if (rs.next()) {
//说明有下一行数数据
System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
}
if (rs.next()) {
//说明有下一行数数据
System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
}
if (rs.next()) {
//说明有下一行数数据
System.out.println(rs.getInt(1)+"--"+rs.getString(2)+"--"+rs.getInt(3));
}
if (rs.next()) {
//说明有下一行数数据
//使用字段名称获取字段的每一个数据
while (rs.next()) {
//当我们使用字段名称去获取字段数据的时候,字段名称是不区分大小写
System.out.println(rs.getInt("ID")+"--"+rs.getString("NAME")+"-- "+rs.getInt("AGE"));
}
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtil.close(conn, stmt, rs);
}
}
}
5.JDBC工具类的抽取
public class JDBCUtil {
private static String url = "jdbc:mysql://localhost:3306/day20";
private static String user = "root";
private static String password = "root";
static{
//随着类的加载而夹在
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取连接
public static Connection getConn(){
//注册驱动
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException();
}
}
//释放资源
public static void close(Connection conn,Statement stmt,ResultSet rs){
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}