JDBC学习笔记(1)——jdbc快速入门

  先实现一个简单的java连接数据库程序,以此为例,展开讲解jdbc的相关入门知识:

1.源码概览

package cn.itcast.jdbc;

import java.sql.*;

public class jdbcdemo01 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.导入驱动jar包:
       		// a.复制mysql-connector-java-8.0.20.jar到创建好的libs项目目录下面
            //b.右键libs---->Add As library正真的把jar包加载进来
        //2.注册(加载)驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //3.获取数据库链接对象
        Connection conn= DriverManager.getConnection(//该错误为是系统时间错误只需要在访问数据库的Url后面加上以下的语句即可:?serverTimezone=GMT%2B8
                "jdbc:mysql://192.168.1.101:3306/test?serverTimezone=GMT%2B8", "root", "135254");
        //DriveManager:驱动管理对象     Connection数据库链接对象
        /*com.mysql.jdbc.Driver 是 mysql-connector-java 5中的,
        *com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6中的
        *JDBC连接Mysql6 com.mysql.cj.jdbc.Driver, 需要指定时区serverTimezone:
        *在设定时区的时候,如果设定serverTimezone=UTC,会比中国时间早8个小时,如果在中国,可以选择Asia/Shanghai或者Asia/Hongkong
        *eg:serverTimezone=Asia/Shanghai*/


        //4.定义sql语句
        String sql= "update user set phone =110 where id =1";
        //5.获取执行sql的对象 Statement
        Statement stat = conn.createStatement();    //Statement:  执行sql的对象
        //6.执行sql;
        int count = stat.executeUpdate(sql);
        //7.处理结果
        System.out.println(count);
        //8.释放资源
        stat.close();
        conn.close();
        //ResultSet: 结果集对象
        //PerparedStatement:执行sql的对象,比Statement对象强大
    }
}

每个语句是干什么的以及需要注意的地方都有详细的解释,下面对代码中出现的几个对象进行详细地了解。

DriveManager:驱动管理对象

* 功能:
  • 1.注册(加载)驱动:告诉我们程序使用哪一个数据库驱动jar
      static void registerDriver(Driver driver):注册与给定的驱动程序   DriverManage
      写代码使用的是Class.forName(“com.mysql.cj.jdbc.Driver”) ;
      通过查看源码发现,在com.mysql.cj.jdbc.Driver类里面存在静态代码块:
       static {
        try {
           DriverManager.registerDriver(new Driver());
          } catch (SQLException var1) {
        throw new RuntimeException(“Can’t register driver!”);
         }
        }
    注意:mysql5之后的驱动jar包可以省略注册驱动的步骤,不过建议写上。
    JDBC学习笔记(1)——jdbc快速入门_第1张图片
    我们可以看到这个jar包已经包含了这个驱动加载,如果我们没有写注册驱动,他也会自动加载驱动(也就是说Mysql5之后的版本驱动的jar包可以省略注册驱动的步骤。
  • 2.获取数据库连接
      方法:static Connection getConnection(String url,String user,String password)
      参数:
          *url:指定连接的路径
         *语法:jdbc:mysql://ip地址(域名):端口号/数据库名
          *例子:jdbc:mysql://localhost:3306/db3
         *细节:如果连接的是本机mysql服务器且端口号为3306,可以省略为 jdbc:mysql:///数据库连接名
       user:用户名
       password:密码

Connection:数据库连接对象

*功能:

1.获取执行sql的对象
	*Statement createStatement()
    *PreparedStatement prepareStatement(String sql)
2.管理事务:
   	*开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
    *提交事务:commit();
    *回滚事务:rollback();

statement对象:执行sql的对象

*该对象的主要方法

1. boolean execute(String sql):可以执行任意的sql ,不常用(因为他多用于处理相对复杂的sql语句)了解即可
2. int executeUpdate(String sql)执行DML(insert update delete)语句、DDL(create alert drop)语句
	*返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功
3.ResultSet execteQuery(String sql):执行DQL(查询)语句
	*返回的是结果集对象

ResultSet:结果集对象

该对象的主要方法:

	1.next() 游标向下移动一行
    	* getXXX(参数)获取数据
    	*XXX代表数据类型 如:int getInt(); String getString();
    $参数:
        1.int:代表列的编号,从1开始 如:getString(1);
        2.String代表的是列的名称,如:getDouble("balance");

查询一个表的所有数据示例:

while(rs.next()){
    //6.2获取数据
    int id=rs.getInt(1);
    String name=rs.getString("name");
    double balance=rs.getDouble(3);
    System.out.println(id+"---"+name+"---"+balance);
}

PerparedStatement对象:执行sql的对象

主要作用:解决sql注入问题

	1.SQL注入问题:输入密码为 a' or 'a' = 'a
    2.sql:select * from user where username='adsc' and password='a' or 'a' ='a';
    'a' ='a'恒成立,这种状态下此密码也能登陆成功。
    statement处理的是静态的sql语句,这些sql语句在生成的时候已经拼接好了,从而执行,这个时候容易
    3.解决sql注入问题:使用PreparedStatement对象来解决
    预编译的sql:参数使用?作为占位符,在执行sql的时候给sql赋值

使用步骤:JDBC学习笔记(1)——jdbc快速入门_第2张图片

你可能感兴趣的:(javaweb)