文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JDBC快速入门

2020-11-18 06:49

关注

JDBC快速入门

JDBC快速入门

 

详解

1.0DriverManager

功能1

 

 

 

功能2

2.0 connection对象

 

3.0 statement对象

 

 

4.0 ResultSet

遍历结果集的一个案例

 

import java.sql.*;

public class DQLtest {
    public static void main(String[] args)  {
        //注册驱动
        Connection connection=null;
        Statement statement=null;
        ResultSet resultSet =null;
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");
            //定义一个SQL语句
            String sql="select * from student";
            //数据库连接对象 此处url要在原来数据库后加上 "?serverTimezone=GMT%2B8&useSSL=false"
            //因为我导入的jar包为最新版本 要添加ssl连接状态
            connection = DriverManager.getConnection("jdbc:mysql:///db2" +
                    "?serverTimezone=GMT%2B8&useSSL=false", "root", "root");
            //执行SQL的对象
            statement = connection.createStatement();
            //获取结果集对象
            resultSet = statement.executeQuery(sql);
            while(resultSet.next())//next方法判断游标是否位于最后一行,是则返回false 否则返回true
            {
                int id = resultSet.getInt("ID");
                int age= resultSet.getInt("age");
                String name = resultSet.getString("name");
                String cls = resultSet.getString("class");
                System.out.println(id+" "+age+" "+name+" "+cls);
            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }
}

  

 

打印结果:

1 18 lisa 191
2 19 JK 192
3 18 rose 191
4 19 V 192
5 20 suga 181
6 21 jimin 182

 

JDBC工具类的创建以及使用

1.0 配置文件

drive=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///db2?serverTimezone=GMT%2B8&useSSL=false
user=root
password=root

2.0 JDBCutil的创建

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;

public class JDBCutil {
    
    public static String drive;
    public static String url;
    public static String user;
    public static String password;
    static {
        Properties properties = new Properties();
        //获取src目录下的文件方式->类加载器 Classloader
        //先获取字节码文件
        ClassLoader classLoader = JDBCutil.class.getClassLoader();
        URL resource = classLoader.getResource("jdbc.properties");
        //URL 统一资源定位符 获取绝对路径
        String path = resource.getPath();
        try {
            properties.load(new FileReader(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
        drive = properties.getProperty("drive");
         url = properties.getProperty("url");
         user = properties.getProperty("user");
         password = properties.getProperty("password");

    }
    public static Connection getConnection() throws SQLException {

        return DriverManager.getConnection(url,user,password);
    }

    public static void close(Connection conn, Statement stat)
    {
        try {
            conn.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        try {
            stat.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
    //重载
    public static void close(Connection conn, Statement stat, ResultSet res)
    {
        try {
            conn.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        try {
            stat.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        try {
            res.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

 

对案例进行优化 使用JDBCutil类

import java.sql.*;

public class DQLtest {
    public static void main(String[] args)  {
        //注册驱动
        Connection connection=null;
        Statement statement=null;
        ResultSet resultSet =null;
        try{
            //Class.forName("com.mysql.cj.jdbc.Driver");
            //定义一个SQL语句
            String sql="select * from student";
 
           // connection = DriverManager.getConnection("jdbc:mysql:///db2" +
           //"?serverTimezone=GMT%2B8&useSSL=false", "root", "root");
           connection = JDBCutil.getConnection();

            //执行SQL的对象
           statement= connection.createStatement();
            //获取结果集对象
           resultSet = statement.executeQuery(sql);
            while(resultSet.next())//next方法判断游标是否位于最后一行,是则返回false 否则返回true
            {
                int id = resultSet.getInt("ID");
                int age= resultSet.getInt("age");
                String name = resultSet.getString("name");
                String cls = resultSet.getString("class");
                System.out.println(id+" "+age+" "+name+" "+cls);
            }

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        finally {
            JDBCutil.close(connection,statement,resultSet);
        }
    }
}

  

页面登录案例

 PreparedStatement 

 

import java.sql.*;
import java.util.Scanner;

public class Usertest {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入您的姓名:");
        String username=input.next();
        System.out.println("请输入您的密码:");
        String password=input.next();
        Connection conn=null;
        PreparedStatement prep =null;
        ResultSet set=null;
        try{
            conn = JDBCutil.getConnection();
            //String sql="SELECT *FROM USER WHERE NAME=""+username+""AND PASSWORD=""+password+""";
            String sql="SELECT *FROM USER WHERE NAME=? AND PASSWORD=?";
            prep = conn.prepareStatement(sql);
            //给?赋值
            prep.setString(1,username);
            prep.setString(2,password);
            ResultSet resultSet = prep.executeQuery();
           if(resultSet.next())
           {
               System.out.println("登录成功!");
           }
           else {
               System.out.println("登录失败!");
           }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JDBCutil.close(conn,prep,set);
        }

    }
}

 

  

 JDBC管理事务

 

数据库连接池

1.0 介绍

 

重点介绍druid 

 

 

下面就建立一个druid工具类来使用(mysql-connector-java-8.0.11.jar)(druid-1.1.21.jar)

定义配置文件druid.properties

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///db2?serverTimezone=GMT%2B8&useSSL=false
username=root
password=root
#初始化连接数量
initialSize=5
#最大连接数
maxActive=10
#最大等待时间
maxWait=3000

 

定义一个工具类

package utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class Druidutil {
    public static DataSource ds;
    //导入jar包
    //定义配置文件
    //加载配置文件
    static{

        try {
            Properties prop = new Properties();
            prop.load(Druidutil.class.getClassLoader().getResourceAsStream("druid.properties"));
            ds = DruidDataSourceFactory.createDataSource(prop);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //获取连接对象
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    //释放资源

    public static void close(Statement stat,Connection conn)
    {
     close(null,stat,conn);
    }


    public static void close(ResultSet res,Statement stat, Connection conn)
    {
        if(res!=null)
        {
            try {
                res.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(stat!=null)
        {
            try {
                stat.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(conn!=null)
        {
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }

    //获取连接池
    public static DataSource getDataSource()
    {
        return ds;
    }
}

 

定义一个测试类来测试一下这个工具类 

import utils.Druidutil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Druidtest {
    public static void main(String[] args) {
        //需求:给db2中的表 student 添加一条数据
        Connection conn=null;
        PreparedStatement prep=null;
        try {
            //1.获取连接
            conn = Druidutil.getConnection();
            //2.定义sql
            String sql="INSERT INTO student VALUES(NULL,?,?,?)";//使用prepareStatement
            //3.获取prepareStatement对象
            prep = conn.prepareStatement(sql);
            prep.setInt(1,18);
            prep.setString(2,"Jennie");
            prep.setString(3,"191");
            //4.执行sql
            int result = prep.executeUpdate();
            //打印结果
            System.out.println(result);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally{
            Druidutil.close(prep,conn);
        }

    }
}

 

(添加成功)

 

为了简化JDBC的使用 我们引入一个 Spring JDBC (JDBCTemplate)

 

1.DML语句

 

import org.springframework.jdbc.core.JdbcTemplate;
import utils.Druidutil;

public class SpringJDBC {
    private static JdbcTemplate template;
    public static void main(String[] args) {

        //执行DML语句
        //导入jar包 获取JDBCtemplate
        template = new JdbcTemplate(Druidutil.getDataSource());
        //test1();//修改操作
        //test2();//添加操作
        //test3();//删除操作
    }

    private static void test3() {
        String sql="delete from user where id=?";
        int update = template.update(sql, 3);
        System.out.println(update);
    }

    private static void test2() {
        String sql="insert into user (id,name,password) values (?,?,?)";
        int update = template.update(sql, 4, "bts", "613");
        System.out.println(update);
    }

    private static void test1()
    {
        //定义sql语句
        String sql="update user set password="121" where id=1";
        //执行sql
        int update = template.update(sql);
        System.out.println(update);
    }
}

 

2.DQL语句  

 

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import utils.Druidutil;

import java.util.List;
import java.util.Map;

public class SpringJDBC {
    private static JdbcTemplate template;

    public static void main(String[] args) {

        //执行DQL语句
        //导入jar包 获取JDBCtemplate
        template = new JdbcTemplate(Druidutil.getDataSource());
        //test1();//查询一条记录
        //test2();//查询多条条记录
        //test3();//将每条数据分装为emp对象
         //test4();//查询总记录数
    }

    private static void test4() {
        String sql="select count(*) from user";
        Long aLong = template.queryForObject(sql, Long.class);
        System.out.println(aLong);
    }

    private static void test3() {
        String sql="select * from user";
        List query = template.query(sql, new BeanPropertyRowMapper(emp.class));
        for (emp emp : query) {
            System.out.println(emp);
        }
    }

    private static void test2() {
        String sql="select * from user";
        List> list = template.queryForList(sql);
        for (Map map : list) {
            System.out.println(map);
        }
    }

    private static void test1() {
        String sql="select * from user where id=?";
        Map map = template.queryForMap(sql, 3);
        System.out.println(map);
    }
}

 

  

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯