Jdbc使用及相关类详解

1.什么是Jdbc??

jdbc(Java DataBase Connectivity),简而言之就是使用java语言去操作数据库

2.Jdbc的本质

官方(sun公司)定义了一套操作所有关系型数据库的规则(接口),然后由每一个不同种的数据库厂商去实现不同的实现类(数据库驱动),我们可以使用这套接口(jdbc)去编程,真正执行的代码是驱动jar包中的实现类
在这里插入图片描述

/**
	jdbc就像是接口,而各厂商使用的数据库驱动就是一个个实体类,可以达到多态的效果
	Person pImpl;//接口
	Worker mWorker;//worker类
	//使用方法
	Person pImpl=new Worker();//类似这样的多态化操作
*/
3.快速使用jdbc
套路:

1.导入驱动jar包

//导入数据库对应的jdbc版本,这里使用的是8.0版本的

2.注册驱动

 //2.注册驱动(通过反射机制)
    Class.forName("com.mysql.cj.jdbc.Driver");

3.获取数据库的连接对象

 Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/db1" +
            "?useUnicode=true" +
            "&characterEncoding=UTF-8" +
            "&useSSL=false&serverTimezone=Asia/Shanghai" +
            "&zeroDateTimeBehavior=CONVERT_TO_NULL",
            "root","123456");

4.定义sql

 //4.定义sql语句
    String sql="UPDATE account SET balance=800 WHERE id=1";

5.获取sql执行对象,并且执行sql

 //5.获取执行sql的对象 Statement
    Statement mState=conn.createStatement();
    //6.执行sql
    int count=mState.execute(sql);

6.释放资源

 //释放资源
    mState.close();
    conn.close();

注:以上的步骤是使用jdbc的基础步骤,有些方法可以进行简化和省略(这个稍后也会谈,通过这种方式操作mysql 8.0+是没问题的)

详解各个对象

<1> DriverManager:驱动管理对象
功能:
1.注册驱动,告诉程序需要使用哪一个数据库来驱动jar
方法:Class.forName(“com.mysql.cj.jdbc.Driver”);【静态代码块】
通过源码可知在"com.mysql.cj.jdbc.Driver"中存在静态代码块,用来注册驱动

在java5.0之后注册驱动可以省略

2.获取数据库连接
方法:Connection mConn=DriverManager.getConnection(mUri,userId,password);
通过提供uri,账号和密码来进行数据库连接对象的获取

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1" +
                "?useUnicode=true" +
                "&characterEncoding=UTF-8" +
                "&useSSL=false&serverTimezone=Asia/Shanghai" +
                "&zeroDateTimeBehavior=CONVERT_TO_NULL",
        "root", "123456");

<2>Connection:数据库连接对象,是当前代码和数据库之间的桥梁
功能
1.获取执行的sql对象

*Statement createStatement(String sql_code);
*PreparedStatement createStatement(String sql_code);

2.管理事务

*开启事务:setAutoCommit(boolean autoCommit); 设置该参数为false 即开启事务
*提交事务:commit();
*回滚事务:rollback();

<3>Statement 用来执行sql对象
注:该对象用来执行静态sql语言并且返回生成结果的对象

*Boolean execute(String sql); //可以执行任意的sql

*int executeUpdate(String sql);//执行DML(增删改表中的数据 insert update delete)语句,DDL语句(对表和库进行创建 create alter drop)【不经常用】、
返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0则执行成功,反之失败

*ResultSet  executeQuery(String sql); 执行DQL(select)语句

<4>ResultSet 结果集对象,用来封装查询结果

*boolean next():游标向下移动一行 判断当前行是否有数据

*getXxx():获取数据

*Xxx代表着数据类型 int getInt() int getDouble()

*参数
1.int:代表列的编号    如:getString(columnIndex);//从1开始
2.String: 代表列的名称 getString("columnLabel");//从哪一列开始

使用方法:
1.游标向下移动一行
2.判断是否有数据
3.获取数据

mRes=mStmt.executeQuery(sql_select);
//查询结果
//1.让光标向下移动一行
mRes.next();
//2.获取数据
int id=mRes.getInt(1);
String name=mRes.getString("name");
double balance=mRes.getDouble(3);
mRes.next();
int id1=mRes.getInt(1);
String name1=mRes.getString("name");
double balance1=mRes.getDouble(3);
System.out.println(id+"---"+name+"---"+balance);
System.out.println(id1+"---"+name1+"---"+balance1);

一般使用循环查询的方法
//查询结果
while(mRes.next()){
    int id=mRes.getInt(1);
    String name=mRes.getString("name");
    double balance=mRes.getDouble(3);
    System.out.println(id+"---"+name+"---"+balance);
}

<5>PreparedStatement用来执行sql对象
注:该对象用来执行预编译sql语言并且返回生成结果的对象

为了解决sql注入问题(在拼接sql的时候,有一些sql的特殊关键字参与字符串的拼接,会造成一些安全性的问题),因此采用了PreparedStatement

使用方法:
1.导入驱动
2.注册连接
3.获取连接
4.定义sql

*sql参数使用?作为占位符,如:
select*from user where username=? and password=?

5.获取执行sql语句的对象

PreparedStatement mPstmt=Connection.preparedStatement(sql);

6.给?赋值

*setXxx(参数1,参数2)
参数1:问号的位置编号
参数2:问号的值

7.执行sql 接收返回的结果

 mRs=mPstat.executeQuery();

下面是写的一个使用PrepareStatement的部分代码:

public boolean newLogin(String userName,String password){
    if(userName==null||password==null){
        System.out.println("账号密码错误");
        return false;
    }
    //开始连接数据库
    try {
        //查询连接
        mConn=JDBCUtils.getConnection();
        //找到sql
        String sql="select*from user where username=? and password=?";
        //获取执行对象
         mPstat=mConn.prepareStatement(sql);
        //设置参数
        mPstat.setString(1,userName);
        mPstat.setString(2,password);
        //执行sql
        mRs=mPstat.executeQuery();
        return mRs.next();

    } catch (SQLException e) {
        e.printStackTrace();
    }
    return false;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值