JDBC连接数据库

JDBC

1.概述

jdbc(Java Database Connectivity)java数据库连接,是一种专门用java语言实现数据库的标准,我们所说的JDBC是面向关系型数据库的。
数据库分为关系型数据库和非关系型数据库。关系型数据库比如有MySQL,Oracle,SQL Service,DB2等,非关系型数据库有Redis,Nosql等

2.使用步骤

导入jar包(存放了大量java工具类的压缩包)
使用工具类,连接数据库
通过程序发起SQL,操作数据库
数据库把结果返回给java程序
java程序解析结果
1.使用IDEA导入mysql-connector-java的jar包
这里插入图片描述
这是一个Maven项目,直接在pom.xml中导入mysql连接java的依赖包,就可以使用JDBC的功能
2.创建数据库、表,使用SQLyog工具

USE cgb2106;
CREATE TABLE USER(
 id INT PRIMARY KEY AUTO_INCREMENT,
 NAME VARCHAR(20),
 PASSWORD VARCHAR(10)
);
INSERT INTO USER VALUES(NULL,'jack','123456');
INSERT INTO USER VALUES(NULL,'rose','123')
SELECT * FROM USER

在这里插入图片描述
3.数据库实现了数据的持久化,在java程序中处理数据,一般步骤:
1)注册驱动
2)获取连接
3)获取传输器
4)执行SQL语句
5)处理结果集
6)释放资源

3.模拟登录功能

下面是代码:

package cn.tedu.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

//JDBC连接数据库,模拟用户登录的功能
public class Test1 {
    public static void main(String[] args) throws Exception {
        method();//根据用户名和密码登录的方法
    }
    private static void method() throws Exception {
        //1.获取驱动,使用反射的技术
        Class.forName("com.mysql.jdbc.Driver");
        //2,获取mysql连接url,用户名和密码
        //jdbc:数据库类型:主机IP:端口号/数据库名?characterEncoding=编码
        String url="jdbc:mysql://localhost:3306/cgb2106?characterEncoding=utf8";
        Connection c = DriverManager.getConnection(url, "root", "123456");

        System.out.println("请输入用户名:");
        String name=new Scanner(System.in).nextLine();
        System.out.println("请输入密码:");
        String pwd=new Scanner(System.in).nextLine();
        //SQL骨架,执行SQL语句
        String sql="select * from user where name=? and password=?";
        //3.获取传输器
        /**PreparedStatement和Statement传输器的区别
         * Statement传输器低效,不安全,可能会出现SQL注入攻击的现象,比如#在Mysql中是注释的意思
         * 因此这里使用prepareStatement传输器高效,安全*/
        try{
            PreparedStatement ps = c.prepareStatement(sql);
            //4.给字段赋值
            ps.setString(1,name);
            ps.setString(2,pwd);
            //5.处理结果集
            ResultSet r = ps.executeQuery();//执行查询的方法
            if(r.next()){//判断是否有下一个可执行语句
                System.out.println("登陆成功啦~");
            }else{
                System.out.println("请输入正确的用户名和密码~");
            }
            //6.释放资源
            r.close();
            ps.close();
            c.close();
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

在这里插入图片描述

4.注意事项

1.首先一定要导入jar包(工具类),不然JDBC的功能无法实现
2.防止中文乱码:可以将字符集设置为utf-8在url后面加?characterEncoding=utf8
//jdbc:数据库类型:主机IP:端口号/数据库名?characterEncoding=编码
例如:String url=“jdbc:mysql://localhost:3306/cgb2106?characterEncoding=utf8” ;
3.sql注入
使用高级的传输器PreparedStatement,是预编译的,对于批量处理可以大大提高效率,安全
Statment是低级的传输器,不安全,可能会出现SQL注入攻击的现象,比如当用户输入了特殊数据时
//当用户名输入了jack’# 时候,SQL中出现了特殊符号#,在SQL里表示注释的意思
//只需要输入用户名正确,不需要密码也能登录
//SQL语义变了:SELECT * FROM USER WHERE NAME=‘jack’#’ AND PASSWORD=‘123456’
4,最后记得要释放资源,使用close()方法

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值