一、JDBC基本概念

1.JDBC 简介

sum公司在jdk集成, 学习一套接口

使用java: 面向对象:

JDK只提供了JDBC核心接口, 实现类由各大数据库厂家提供

JDBC实现类称为数据库驱动, 不在jdk中, 外部jar, jar: 压缩文件, 放的是class文件

2.核心API

JDBC中的核心类有:DriverManager、ConnectionStatement,和ResultSet

DriverManager(类): 驱动管理器: 加载指定数据库的驱动, 表示使用那个数据库

Connection: 连接对象, 连接数据库

Statement: 用于发送sql给数据, 通知数据库执行sql语句

ResultSet: 用于接收查询的结果集

3.JDBC入门程序

(1)创建一个java项目,导入数据库驱动jar: 使用mysql数据库, 导入mysql驱动jar

在项目中创建一个lib目录, 存放第三方jar

把第三方jar拷贝到lib目录, CTRL+C CTRL+V

设置lib是jar目录

再添加其他jar, 不需要重新设置, 只需要把jar拷贝到lib

(2)编写jdbc代码

1.增删改

jdbc的步骤:

  1. 加载驱动类: 指定使用那个数据库

  2. 获取连接

  3. 编写sql语句, 字符串

  4. 创建Statement对象

  5. 执行之(发送sql语句到数据库,通知数据库执行sql)

  6. 接收结果(如果是增删改: 行数(int), 查询:结果集(ResultSet))

  7. 如果查询, 解析ResultSet(表结构),变成java对象

  8. 关闭资源

<span style="background-color:#dadada"><span style="color:#1f0909">1. 加载驱动类:  指定使用那个数据库 通过反射技术
Class.forName("com.mysql.jdbc.Driver");
​
2.获取连接 DriverManager的getConnection方法获取连接
String url = "jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=utf8&useSSL=false";
String username = "root";
String password="123";
conn = DriverManager.getConnection(url,username,password);
System.out.println("连接成功!!!");
​
3.编写sql语句
String sql = "INSERT INTO tb_user VALUES(2,'lisi','1234','男')";
            //删除
String sql = "delete from tb_user where id = 2";
            //修改:
String sql = "update tb_user set gender = '女', password='123456' where id = 1";
​
4.创建Statement  通过Connection对象
statement = conn.createStatement();
​
5.执行之,接收结果  增删改: int executeUpdate(sql)
// 查询:ResultSet executeQuery(sql)
int row = statement.executeUpdate(sql);
​
6.关闭资源  倒序关    包裹代码: ctrl + alt + T
 try {
     if(statement != null) statement.close();
     if(conn != null) conn.close();
} catch (SQLException e) {
     e.printStackTrace();
}</span></span>

2.查询

  1. 加载驱动类

  2. 获取连接

  3. 编写sql select

  4. 创建Statement对象

  5. 执行之,并接收结果 executeUpdate(sql) executeQuery(sql)

  6. 如果查询, 解析ResultSet

  7. 关闭资源

<span style="background-color:#dadada"><span style="color:#1f0909"> //1.加载驱动类
 Class.forName("com.mysql.jdbc.Driver");
​
//2.获取连接
String url="jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=utf8&useSSL=false";
String username="root";
String password = "123";
conn = DriverManager.getConnection(url,username,password);
           
System.out.println("请输入您要查询的姓名:");
Scanner input = new Scanner(System.in);
String word = input.next();
//'%z%'
​
//3.编写sql   select
String sql ="SELECT * FROM tb_user where username like '%" +word+"%'";
System.out.println("sql:"+sql);
​
//4.创建Statement对象
stmt = conn.createStatement();
​
//5.执行之,并接收结果
resultSet = stmt.executeQuery(sql);
​
//6.解析ResultSet: 获取每一行每一列数据
            resultSet.next();
            //列索引获取 从1开始
            int id = resultSet.getInt(1);
            //列名获取
            String name = resultSet.getString("username");
            String pass = resultSet.getString("password");
            String gender = resultSet.getString("gender");
            System.out.println("id:"+id+",name:"+name+",pass:"+pass+",gender:"+gender);
​
          /*  resultSet.next();
            //列索引获取 从1开始
             id = resultSet.getInt(1);
            //列名获取
             name = resultSet.getString("username");
             pass = resultSet.getString("password");
             gender = resultSet.getString("gender");
            System.out.println("id:"+id+",name:"+name+",pass:"+pass+",gender:"+gender);*/
​
            //循环获取
            while( resultSet.next()){
                //列索引获取 从1开始
                int id = resultSet.getInt(1);
                //列名获取
                String name = resultSet.getString("username");
                String pass = resultSet.getString("password");
                String gender = resultSet.getString("gender");
                System.out.println("id:"+id+",name:"+name+",pass:"+pass+",gender:"+gender);
            }
            
//7.关闭资源
try {
 if(resultSet != null) resultSet.close();
 if(stmt != null) stmt.close();
 if(conn != null) conn.close();
} catch (SQLException e) {
 e.printStackTrace();
}</span></span>

查询不仅可以向下移还可以向上移

<span style="background-color:#dadada"><span style="color:#1f0909">//往上移动
resultSet.previous();</span></span>

4.PreparedStatement 预编译功能

使用Statement, sql语句使用拼接

  1. 很容易出错

  2. sql注入/sql攻击

解决方案:

使用Statement的子接口: PreparedStatement

在sql中提供占位符 ?

<span style="background-color:#dadada"><span style="color:#770088">SELECT</span> *  <span style="color:#770088">FROM</span>  tb_user  <span style="color:#770088">WHERE</span> username = <span style="color:#008855">?  </span><span style="color:#770088">AND</span> PASSWORD = <span style="color:#008855">?</span></span>

给?赋值, 这个值一定使用单引号引起, 只作为值使用 or 关键字只作为值

sql语句的执行:

  1. sql编译

  2. 语法检查

  3. 执行sql

SELECT * FROM tb_user WHERE username = ? AND PASSWORD = ?

SELECT * FROM tb_user WHERE username =? AND PASSWORD =?

相对于Statement优点:

  1. 防止sql攻击

  2. 可读性高

  3. 效率高: 预编译功能(一定数据库有这个功能)

给?赋值:

PreparedStatement提供setXxx(int index, Xxx 值) Xxx数据类型. 给?赋值

index: ?的位置, 从1开始

通用数据类型setObject(任意数据类型);

通用数据类型 setString(String 类型)

setInt()

setLong()

.....

注意:

以后都是使用PreparedStatement

5.jdbc工具类

发现jdbc代码大量重复, 使用工具类把重复的代码抽取出来形成一个工具类

写的是一个半封装的

扩展: jdbc工具类全封装

executeQuery(String sql, List params) 执行查询

int executeUpdate(String sql, List params) 执行增删改

重复的代码:

  1. 得到连接的代码重复

  2. 数据库四大参数 不能硬编码, 写在代码中, 应该把四大参数写在一个文件中

drivaerClass= com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=utf8&useSSL=false

  1. 关闭资源代码的重复

Map: HashMap<k,v>: key/value key:Object value:Object

Properties: key/value key:String value:String

把一个properties的文件的所有数据加载到Properties类的中

load(InputStream inStream)

String getProperty(String key)

properties的文件要求: 文本文件

后缀名: .properties

语法格式:

key1=value1

key2=value2

...

#表示注释

properties配置文件存放的目录: src目录

<span style="background-color:#dadada"><span style="color:#aa5500">#驱动类全限定名</span>
<span style="color:#0000ff">driverClass </span>=<span style="color:#009900"> com.mysql.jdbc.Driver</span>
<span style="color:#aa5500">#jdbc的url</span>
<span style="color:#0000ff">url </span>=<span style="color:#009900"> jdbc</span>:<span style="color:#009900">mysql</span>:<span style="color:#009900">//localhost</span>:<span style="color:#009900">3306/mytest?useUnicode</span>=<span style="color:#009900">true&characterEncoding</span>=<span style="color:#009900">utf8&useSSL</span>=<span style="color:#009900">false</span>
<span style="color:#aa5500">#用户名</span>
<span style="color:#0000ff">username </span>=<span style="color:#009900"> root</span>
<span style="color:#aa5500">#密码</span>
<span style="color:#0000ff">password </span>=<span style="color:#009900"> 123</span></span>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值