JDBC java数据库连接

news/2024/11/5 0:56:35 标签: 数据库, java, sql

JDBC java数据库连接

Java DataBase Connectivity

* JDBC是java官方提供的一套结构,用于连接DBMS并进行相关操作。

 * 核心的接口:

 * Connection               表示数据库连接

 * Statement                用来执行SQL语句的语句对象

 * PreparedStatement        用来执行预编译SQL语句的语句对象

 * ResultSet                用来表示查询结果集

* 不同的DBMS提供上都会提供一套具体的实现类,并打包为jar。那么这个jar包被我们称为是连接该DBMS的驱动(Driver)

一.Statement提供了多种执行SQL的方法

1.     boolean execute(String sql)

用于向数据库执行SQL语句。该方法可以执行任何种类的SQL

但是实际上执行DML,DQL都有专门的方法,因此通常只用来执行DDL

该方法返回一个boolean值,执行该SQL后是否产生了查询结果集。

  1. int executeUpdate(String sql)

专门用于执行DML语句的,返回值表达执行该DML后影响了表中多少条记录

  1. executeQuery专门用于执行DQL语句的
  2. ResultSet重要方法:           boolean next()

 让结果集向下移动一行,返回值表示是否存在下一行。

如果存在下一行则返回true否则返回false。

try (

    Connection connection = DBUtil.getConnection();

){

  Statement statement = connection.createStatement();

String sql = "SELECT id,name,salary,title " +"FROM teacher ";

      ResultSet resultSet = statement.executeQuery(sql);

            

while(resultSet.next()){//结果集向下移动一行,并判断改行是否存在

int id = resultSet.getInt("id");

String name = resultSet.getString("name");

int salary = resultSet.getInt("salary");

String title = resultSet.getString("title");

System.out.println(id+","+name+","+salary+","+title);

            }

} catch (SQLException e) {

            e.printStackTrace();

        }

二.预编译SQL语句的写法,将原本需要拼接的"值"先用"?"代替

SELECT id,username,password,nickname,age

FROM userinfo

WHERE username='拼接' AND password='拼接'

缺陷:登录验证

* 若密码为:a' OR '1'='1

 * 会出现拼接SQL导致语义发生改变,这就是SQL注入攻击

* SELECT * FROM userinfo

 * WHERE username='hajkdshfkj' AND password='a' OR '1'='1'

预编译SQL:

SELECT id,username,password,nickname,age

FROM userinfo

WHERE username=? AND password=?

String sql = "SELECT id,username,password,nickname,age " +

  "FROM userinfo " +"WHERE username=? AND password=?";

    

    try (Connection connection = DBUtil.getConnection();){

//创建预编译SQL语句执行时将预编译SQL发送给数据库要求其理解语义

            PreparedStatement ps = connection.prepareStatement(sql);

            //执行该sql前要指明预编译SQL中"?"的值是什么

/*     ?是什么类型的值,这里就应当调用对应的set方法

例如

?表示整数时,调用ps.setInt(...)

?表示字符串时,调用ps.setString(...)

方法第一个参数表示预编译SQL中第几个"?"."?"从左往右,从上往下,并且

?"从1开始,1表示第一个"?"。   */

            ps.setString(1,"范传奇");//第一个?值

            ps.setString(2,"123456");//第二个?值

            //将值传给数据库执行该SQL

            ResultSet rs = ps.executeQuery();

            if(rs.next()){

                String nickname = rs.getString("nickname");

                System.out.println("登录成功,欢迎你:"+nickname);

            }else{

                System.out.println("登录失败,用户名或密码不正确");

            }

        } catch (SQLException throwables) {

            throwables.printStackTrace();

        }


http://www.niftyadmin.cn/n/393610.html

相关文章

ClassLoader源码

介绍 ClassLoader 顾名思义就是类加载器 ClassLoader 是一个抽象类 没有父类 作用 1.负责将 Class 加载到 JVM 中 2.审查每个类由谁加载(父优先的等级加载机制) 3.将 Class 字节码重新解析成 JVM 统一要求的对象格式 常量&变量 //注册本地方法…

chatgpt赋能python:Python可以用C语言吗?——一份详细解读

Python可以用C语言吗?——一份详细解读 Python和C语言是两种常见而重要的编程语言。Python被广泛应用于各种领域,从人工智能到数据科学,而C语言则是系统编程,操作系统和编译器方面最受欢迎的语言之一。许多人认为Python和C语言没…

idea部署Tomcat

创建Web项目 我们首先使用IDEA创建一个普通的java项目 创建好后的项目结构如上图,我创建的项目名称为tomcat,这个项目现在还是一个普通的java项目,想要开发web程序,我们还要做一下操作,首先我们先给项目添加依赖 首先…

Vmware虚拟机实例配置静态IP

最近在给虚拟机配置静态IP的时候,出了一些小问题,本文主要描述操作过程中一些小问题的解决。 主要参考资料: How to set up Linux in VMWare Workstation with static IP (IPv4) 个人配置信息: VMware Workstation Debian 记录一下虚拟机的网卡信息 …

Java 实现在顺序表指定位置插入一个元素

一、思路 1.定义一个pos变量来记录要插入的位置. 2.定义一个usedSize变量来记录元素个数. 3.定义一个data变量来记录要插入的元素值. 4.要保证pos位置合法,也就是不是负数,因为是要保证pos位置前是要有元素,因此也不能大于元素个数. 5.也需要…

打电话用什么耳机好,推荐几款性能表现高的骨传导耳机

近几年有一种新型传播方式的耳机,将声音转化为振动,从而让我们的听觉神经感知到。这种声音传播方式叫做"骨传导",所以叫做骨传导耳机。因为它不需要通过耳膜进行传播声音,所以可以让耳朵在不接触外界的情况下听到声音。…

chatgpt赋能python:Python可以搜集网上资料吗?

Python 可以搜集网上资料吗? Python 是一种非常流行的编程语言,它广泛应用于数据科学、机器学习、人工智能等领域。作为一名 Python 工程师,我们经常需要在互联网上搜集资料来解决开发中的问题,但是有些人会问:Python…

Python3内置关键字大全

目录 1. 布尔类 True 真 False 假 None 空 2. 逻辑类 and 与 or 或 not 非 3. 判断类 if 条件判断 elif 条件判断 else 条件判断 4. 循环类 for 迭代循环 while 判断循环 break 跳出整个循环 continue 跳出当前循环 5. 定义类 class 类与对象 def 自定义函…