1.JDBC-01

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.JDBC-01相关的知识,希望对你有一定的参考价值。

案例1-通过jdbc完成单表的curd操作:
需求:
对分类表完成操作.
技术分析:
jdbc
///////////////////////
jdbc:
java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)
驱动:jdbc的实现类.由数据库厂商提供.
我们就可以通过一套规范操作不同的数据库了(多态)
jdbc作用:
连接数据库
发送sql语句
处理结果

jdbc操作步骤:★
1.数据库和表
2.创建一个项目
3.导入驱动jar包
4.编码:
注册驱动
获取连接
编写sql
创建预编译的语句执行者
设置参数
执行sql
处理结果
释放资源

初始化数据库和表:
CREATE DATABASE day07;
USE day07;

create table category(
cid varchar(20) primary key,
cname varchar(20)
);

insert into category values(‘c001‘,‘电器‘);
insert into category values(‘c002‘,‘服饰‘);
insert into category values(‘c003‘,‘化妆品‘);
insert into category values(‘c004‘,‘书籍‘);

IDE打开之后
1.修改字符集 utf-8
2.新建 java项目
3.使用的jdk为自己的jdk 不用使用内置

使用junit单元测试
要求:
1.方法是public void xxx(){}
2.在方法上添加 @Test
3.在@Test 按下 ctrl+1(快速锁定错误)
4.在方法上右键 run as -->junit 就可以执行方法了.
jdbc-api详解:
所有的包 都是 java.sql 或者 javax.sql

DriverManager:管理了一组jdbc的操作 类
常用方法:
了解:注册驱动
static void registerDriver(Driver driver) :
通过查看 com.mysql.jdbc.Driver的源码 有如下代码

1 static {
2   try {
3     java.sql.DriverManager.registerDriver(new Driver());//这段代码我们已经写过
4   } catch (SQLException E) {
5     throw new RuntimeException("Can‘t register driver!");
6   }
7 }  

驱动注册了两次.我们只需要将静态代码块执行一次,类被加载到内存中会执行静态代码块,并且只执行一次.
现在只需要将类加载到内存中即可:
方式1:★  

  Class.forName("全限定名");//包名+类名 com.mysql.jdbc.Driver

方式2:
  类名.class;
方式3:
  对象.getClass();

掌握:获取连接
  static Connection getConnection(String url, String user, String password)
参数1:

  告诉我们连接什么类型的数据库及连接那个数据库
协议:

  数据库类型:子协议 参数
  mysql: jdbc:mysql://localhost:3306/数据库名称
  oracle: jdbc:oracle:[email protected]:[email protected]实例

参数2:账户名 root
参数3:密码


(了解)Driver:java.sql 接口 驱动
Connection:连接 接口
常用方法:
获取语句执行者:
      (了解)Statement createStatement() :获取普通的语句执行者 会出现sql注入问题
★  PreparedStatement prepareStatement(String sql) :获取预编译语句执行者
    (了解)CallableStatement prepareCall(String sql):获取调用存储过程的语句执行者

了解:
  setAutoCommit(false) :手动开启事务
  commit():提交事务
  rollback():事务回滚

Statement:语句执行者 接口
PreparedStatement:预编译语句执行者 接口
  常用方法:
    设置参数:
      setXxx(int  第几个问号,Object  实际参数);
  常见的方法:
    setInt
    setString
    setObject

执行sql:
  ResultSet executeQuery() :   执行 r 语句 返回值:结果集
  int executeUpdate() :    执行cud 语句 返回值:影响的行数


ResultSet:结果集 接口
  执行查询语句之后返回的结果
  常用方法:
    boolean next():判断是否有下一条记录,若有返回true且将光标移到下一行,若没有呢则返回false
  光标一开始处于第一条记录的上面

获取具体内容
  getXxx(int|string)
  若参数为int :第几列
  若参数为string:列名(字段名)
  例如:
    获取cname的内容可以通过
    getString(2)
    getString("cname")
常用方法:
  getInt
  getString 也可以获取int值
  getObject 可以获取任意

 

 1 import java.sql.Connection;
 2 import java.sql.DriverManager;
 3 import java.sql.ResultSet;
 4 import java.sql.SQLException;
 5 import java.sql.Statement;
 6 
 7 public class JdbcUtils {
 8     // 获取链接
 9     public static Connection getConnection() throws ClassNotFoundException,SQLException {
10         // 注册驱动
11         Class.forName("com.mysql.jdbc.Driver");
12 
13         // 获取链接
14         Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day02", "root", "123456");
15 
16         return conn;
17     }
18 
19     /**
20      * 释放资源
21      * @param conn 链接
22      * @param st 语句执行者
23      * @param rs 结果集
24      */
25     public static void closeResource(Connection conn, Statement st, ResultSet rs) {
26         closeResultSet(rs);
27         closeStatement(st);
28         closeConn(conn);
29     }
30     /**
31      * 释放链接
32      * @param conn 链接
33      */
34     public static void closeConn(Connection conn) {
35         if (conn != null) {
36             try {
37                 conn.close();
38             } catch (SQLException e) {
39                 e.printStackTrace();
40             }
41             conn = null;
42         }
43     }
44     /**
45      * 释放语句执行者
46      * @param st 语句执行者
47      */
48     public static void closeStatement(Statement st) {
49         if (st != null) {
50             try {
51                 st.close();
52             } catch (SQLException e) {
53                 e.printStackTrace();
54             }
55             st = null;
56         }    
57     }
58     /**
59      * 释放结果集
60      * @param rs 结果集
61      */
62     public static void closeResultSet(ResultSet rs) {
63         if (rs != null) {
64             try {
65                 rs.close();
66             } catch (SQLException e) {
67                 e.printStackTrace();
68             }
69             rs = null;
70         }
71     }
72     
73 }

 

 1 //插入一条数据
 2     @Test
 3     public void f3(){
 4         Connection conn = null;
 5         ResultSet rs = null;
 6         PreparedStatement st = null;
 7         
 8         try {
 9             //获取链接
10             conn = JdbcUtils.getConnection();
11             
12             //编写sql
13             String sql = "insert into category values(?,?)";
14             
15             //获取语句执行者
16             st = conn.prepareStatement(sql);
17             
18             //设置参数
19             st.setString(1, "c005");
20             st.setString(2, "户外");
21             
22             //执行sql
23             int i = st.executeUpdate();
24             
25             //处理结果
26             if(i==1){
27                 System.out.println("success");
28             }else{
29                 System.out.println("fail");
30             }
31             
32         } catch (Exception e) {
33             e.printStackTrace();
34         }finally{
35             //释放资源
36             JdbcUtils.closeResource(conn, st, rs);
37         }
38         
39     }

 

























































































































以上是关于1.JDBC-01的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数