栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于java的jdbc的一概小细节,

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于java的jdbc的一概小细节,

首先声明,java新手,最近新学的jdbc,感觉细节众多,琐碎每次忘记都需要去查,就自己写篇写点东西用来记录一下,方便自己查阅,小小新手,如有错误敢情看官不吝斧正。

1.1jdbc简介

JDBC(Java Datebase connectivity)Java数据库简介技术

具体说就是通过Java连接数据库,并对数据库中数据进行增删改查等操作的技术

1.2jdbc相关的API

JDBC要通过Java代码操作数据库,JDBC中定义了各种操作数据库的接口和类。Driver 驱动接口,定义了Java如何和数据库获取连接

DriverManager 工具类 提供了管理驱动的便捷能力,可以获取和数据库的连接

Connection 连接接口 代表了Java和数据库之间的联系

PrepareStatement (statement)发送SQL语句的工具接口 该类型的对象用于向数据库发送一条SQL语句

ResultSet 结果集接口 该类型的对象表示一条查询SQL的结果

1.3 jdbc 是规范不是实现

从根本上来说,JDBC是一种规范,它提供了一整套完整的接口,允许便携式访问底层数据库,因此可以轻松的用

为什么JDBC只有接口,没有提供实现?

不同数据库底层技术不同,不少数据库是闭源的,源代码不公开的,Sun公司无力为所有数据库提供具体实现,只  能提供接口而由数据库厂商提供具体实现,Sun公司只是制定了JDBC标准,各个数据库厂商根据标准提供具体实     现。


JDBC编写适用于各种数据库的程序

2.0 jdbc的编程

2.1 jdbc的编程步骤

        首先jdbc操作数据库和Navicat操作数剧效果基本一致,操作数据库的步骤也是大同小异,将两者做下对比。

具体步骤:

1.加载驱动

2.获取连接

3.准备一个发送sql的工具

4.发送SQL

5.处理结果集

6.释放资源

准备工作

  1. 准备开发工作(搭建开发环境)

需要在项目中引入数据库驱动jar包(jar包:针对class文件的压缩格式包含了多个带包的class文件,类似于普 通吗文件打包完之后的zip,rar)

idea

将mysql-connector-java-8.0.23.jar添加到项目中

1.右键选中项目,新建一个lib文件夹,将jar包复制到lib中 2.选中jar包,add as

类似于

编码:

public class JDBCTest01 {
public static void main(String[] args) throws Exception {

//1.加载驱动Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
String username="root"; String password="root";
//url参数用来确定连接的数据库信息

String url="jdbc:mysql://localhost:3306/baizhi? userUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=Asia/Shanghai";

Connection conn = DriverManager.getConnection(url, username, password);
//3.准备发送SQL的工具
String sql="INSERT INTO t_person VALUES(null,'王五',19,'男','199999999','大学城')";
PreparedStatement pstm = conn.prepareStatement(sql);

//4.发送执行SQL
//有一个返回值update 是告知我们表中数据有多少行发生了变化
int update = pstm.executeUpdate(); System.out.println("被影响的条数"+update);
//5.处理结果集(如果有)

//6.释放资源
//后使用的资源先释放
pstm.close();
conn.close();
}
}

类似的相应的增删改查都可以仿照改写,只是注意执行增删改语句和查询语句的方法不一样

增删改:使用的是发送SQL工具的executeUpdate()

               获得的是一个int的返回值

查询:使用的是发送SQL工具的executeQuery()

                获得的是

结果集处理:

 

注意:两种结果集数据处理方式,使用序列号获取和使用列名获取,我们推荐使用列名获取。

案例演示:

public class JDBCTest03 {
public static void main(String[] args) throws Exception {

//1.加载驱动Class.forName("com.mysql.cj.jdbc.Driver");
//2.创建和数据库之间的连接
String username="root"; String password="root";
String url="jdbc:mysql://localhost:3306/baizhi?userUnicode=true&characterEncoding=UTF- 8&userSSL=false&serverTimezone=Asia/Shanghai";
Connection conn = DriverManager.getConnection(url, username, password);

//3.准备一个发送SQL的工具
String sql="select * from t_person"; PreparedStatement pstm = conn.prepareStatement(sql);

//4.发送并执行SQL
ResultSet rs = pstm.executeQuery();
//5.处理结果集

while (rs.next()){
int personId = rs.getInt("person_id");
String personName = rs.getString("person_name"); int age = rs.getInt("age");
String sex = rs.getString(4); String mobile = rs.getString(5);
String address = rs.getString(6);

System.out.println("personId="+personId+",personName="+personName+",age="+age+",sex="+sex+",mob
ile="+mobile+",address="+address);
}
//6.释放资源rs.close();
pstm.close();
conn.close();
}
}
关于这里的一些小的细节,可以参照 https://blog.csdn.net/weixin_45802913/article/details/120694804 3.数据绑定

数据绑定:将用户输入的数据,绑定到SQL语句当中

JDBC 执行的SQL中的数据要根据用户的输入发生变化,比如 登录功能背后的查询SQL要根据用户名不同,执行不同的条件,这个就需要将用户输入的数据绑定到SQL语句中。

绑定数据的方式有2种:

        字符串拼接、 占位符绑定

3.1字符串拼接

本质上就是通过Java字符串拼接的语法构造出正确的SQL语句

  1. 在需要数据的地方,使用变量名进行替换
  2. 在变量名前添加"+ 在变量名后添加+"
  3. 如果拼接的是字符串的话,那么需要在"+之前添加' 在+"之后添加'

代码实例:

static int loginSys(Connection conn) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入用户名:");
        String adminName = scanner.nextLine();
        System.out.print("请输入密码:");
        String password = scanner.nextLine();
        String sql = "select admin_name, password from admin where admin_name = '"+adminName+"'and password = '"+password+"'";
        PreparedStatement pstm = conn.prepareStatement(sql);

        ResultSet rs = pstm.executeQuery();
        int flag = 0;
        while (rs.next()){
            flag = 1;
            String AdminName = rs.getString("admin_name");
            String PassWord = rs.getString("password");

            System.out.println("用户名:" + AdminName + "密码:" + PassWord);
        }
        System.out.println(rs.next());
        if (flag == 1){
            return 1;
        }
        else{ return 0;}
    }

3.2占位符拼接

?占位符是JDBC 中一种特殊语法,专门用于参数绑定使用步骤:

  1. 在需要数据的地方,使用?代替(占位)
  2. 在发送SQL之前,通过pstm。setXxx方法给?赋值

 代码示例:

public Student findStudent(String name) {

        Student stu = new Student();
        Connection conn = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;

        conn = JDBCUtils.getConnection();
        String sql = "select student_id, student_name, sex, class_id from t_student where student_name = ?";
        try {
            pstm = conn.prepareStatement(sql);
            pstm.setString(1,name);
            rs = pstm.executeQuery();
            if ( rs != null){
                while (rs.next()){
                    stu.setStudentId(rs.getString("student_id"));
                    stu.setStudentName(rs.getString("student_name"));
                    stu.setSex(rs.getString("sex"));
                    stu.setClassId("class_id");
                    stu.toString();
                }
            }else{
                stu = null;
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        finally {
            if (null != conn || pstm != null || rs != null){
                JDBCUtils.free(rs,null,conn,pstm);
            }
        }
        return stu;

    }

 3.3字符串拼接和?占位符拼接的 区别

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/315338.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号