栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDBC笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC笔记

第一章 一. JDBC概述

二.JDBC程序编写顺序

补充:ODBC(Open Database Connectivity,开放式数据库连接),是微软在Windows平台下推出的。使用者在程序中只需要调用ODBC API,由 ODBC 驱动程序将调用转换成为对特定的数据库的调用请求。

第二章 获取数据库连接 一.Driver接口实现类 1.Driver接口概述

ava.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。

  • 方式一
	@Test
    public void testConnection1() throws SQLException {
        Driver driver = new com.mysql.jdbc.Driver();

        //url:http:localhost:8080/gmall/keyboard.hpg
        //jdbc:mysql:协议
        //localhost:ip协议
        //3306:默认mysql的端口号
        //test:test数据库
        String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8";
        //?characterEncoding=utf8:设置字符格式
        //封装用户名和密码
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("password","123456");

        Connection conn = driver.connect(url,info);

        System.out.println(conn);
    }
  • 方式二:使用反射
    @Test
    public void testConnection2()  throws Exception{
        
        //使用反射
        Class clazz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver)clazz.newInstance();

        String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8";
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("password","123456");

        Connection conn = driver.connect(url,info);
        System.out.println(conn);
    }
  • 方式三:使用DriverManager替换Driver
    @Test
    public void testConnection3() throws Exception{
        //1.获取Driver实现类的对象
        Class clazz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver)clazz.newInstance();

        String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8";
        String user = "root";
        String password = "123456";

        //2.注册驱动
        DriverManager.registerDriver(driver);

        //3.获取连接
        Connection conn = DriverManager.getConnection(url, user, password);

        System.out.println(conn);
    }
  • 方式四:
    @Test
    public void testConnection4() throws Exception{
        //1.提供基本信息
        String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8";
        String user = "root";
        String password = "123456";

        //2.加载Driver
        //连接MySQL数据库时 加载Driver这句代码也可以省略
        Class.forName("com.mysql.jdbc.Driver");
        

        //3.获取连接
        Connection conn = DriverManager.getConnection(url, user, password);

        System.out.println(conn);
    }
  • 方式五:将数据库连接需要的信息放在配置文件中,获取连接
    配置文件放在src目录下
    @Test
    public void testConnection5() throws Exception{
        //1.读取配置文件的信息
        InputStream rs = Connection.class.getClassLoader().getResourceAsStream("jdbc.properties");

        Properties pro = new Properties();
        pro.load(rs);

        String user = pro.getProperty("user");
        String url = pro.getProperty("url");
        String password = pro.getProperty("password");
        String driverClass = pro.getProperty("driverClass");

        //2.加载Driver
        Class.forName(driverClass);

        //3.连接
        Connection conn = DriverManager.getConnection(url, user, password);

        System.out.println(conn);
    }
第三章:使用PreparedStatement实现CRUD操作 一.操作和访问数据库

数据库连接被用于向数据库服务器发送命令和 SQL 语句,并接受数据库服务器返回的结果。其实一个数据库连接就是一个Socket连接。
在 java.sql 包中有 3 个接口分别定义了对数据库的调用的不同方式:

  • Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。
  • PrepatedStatement:SQL 语句被预编译并存储在此对象中,可以使用此对象多次高效地执行该语句。
  • CallableStatement:用于执行 SQL 存储过程
二. 使用Statement操作数据表的弊端
  • 问题一:存在拼串操作,繁琐
  • 问题二:存在SQL注入问题
    如:SELECt user, password FROM user_table WHERe user=‘a’ OR 1 = ’ AND password = ’ OR ‘1’ = ‘1’
三. PreparedStatement的使用 1.实现增删改除

增:

    @Test
    public void testInsert() throws Exception{

        //连接数据库
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");

        Properties pros = new Properties();
        pros.load(is);

        String user = pros.getProperty("user");
        String password = pros.getProperty("password");
        String url = pros.getProperty("url");
        String driverClass = pros.getProperty("driverClass");

        Connection conn = DriverManager.getConnection(url, user, password);
        System.out.println(conn);

        //预编译sql语句,返回PreparedStatement的实例
        String sql = "insert into customers(name,email,birth)values(?,?,?)";
        PreparedStatement pre = conn.prepareStatement(sql);
        pre.setString(1,"哪吒");
        pre.setString(2,"nazha@163.com");
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date parse = simpleDateFormat.parse("2000-10-08");
        pre.setDate(3,new Date(parse.getTime()));

        //执行操作
        pre.execute();

        //关闭资源
        pre.close();
        conn.close();
    }

通用增删改
连接数据库关闭资源封装在JDBCutils.java内

public class JDBCutils {
    public static Connection getConnection() throws Exception{
        //连接数据库
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");

        Properties pros = new Properties();
        pros.load(is);

        String user = pros.getProperty("user");
        String password = pros.getProperty("password");
        String url = pros.getProperty("url");
        String driverClass = pros.getProperty("driverClass");

        Connection conn = DriverManager.getConnection(url, user, password);
        System.out.println(conn);
        return conn;
    }

    public static void closeResource(Connection con,Statement pre){
        try {
            if(con != null)
                con.close();
            if(pre != null)
                pre.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}
	//通用增删改
    public void Update(String sql,Object ...args){
        Connection conn = null;
        PreparedStatement pre = null;
        try{
        	//连接数据库
            conn = JDBCutils.getConnection();
            pre = conn.prepareStatement(sql);
            //填充占位符
            for(int i = 0;i < args.length;i++){
                pre.setObject(i+1,args[i]);
            }
            //执行操作
            pre.execute();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
        	//关闭资源
            JDBCutils.closeResource(conn,pre);
        }
    }

测试:

    public void UpdateTest(){
        String sql = "update customers set name = ? where id = ?";
        Update(sql,"Crown","19");
    }
2.查询
    @Test
    public void testQuery1() throws Exception{
        Connection conn = JDBCutils.getConnection();
        String sql = "select name,email,birth from customers where id = ?";
        PreparedStatement pre = conn.prepareStatement(sql);
        pre.setObject(1,1);
        //返回结果
        ResultSet resultSet = pre.executeQuery();
        if(resultSet.next()){//判断是否有下一个并指针后移
            String name = resultSet.getString(1);
            String email = resultSet.getString(2);
            Date birth = resultSet.getDate(3);

            Customers customers = new Customers(name, email, birth);
            System.out.println(customers);
        }
    }

ORM编程思想
一个数据表对应一个java类,表中的一条记录对应java类的一个对象,表中的一个字段对应java的一个属性。
Java与SQL对应数据类型转换表

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/936269.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号