07-数据库的连接

starrylsi
2024-09-08 / 0 评论 / 18 阅读 / 正在检测是否收录...

目标

掌握连接数据库的四个步骤
理解工厂模式

概念

1.工厂模式

三种工厂模式都是为了解决对象创建过程中的耦合问题,使得系统更容易扩展和维护。简单工厂模式适用于创建逻辑相对简单的情况;工厂方法模式适用于有多个产品族需要创建的情况;抽象工厂模式适用于需要创建一系列相关或依赖的产品对象的情况。

2.java为了保证支持所有的数据库 提供给所有的数据库厂商三个核心接口

Connection 连接Statement 语句ResultSet 结果集

3.java访问数据库 需要提供四个步骤

导入jar包

1.根目录新建文件夹命名为 lib
2.右键jar包->添加至构建路径

案例

都是三个阶段:
1.准备(获取连接,定义sql,定义statement或prepareStatement)
2.使用(stmt.executeUpdate,存储参数和pstmt.executeUpdate)
3.销毁(关流).

connection案例代码

public class ConnectionTest {
    public static void main(String[] args) {
        try {
            //1.注册驱动
            //DriverManager.registerDriver(new Driver());
            
            //1.1也可以使用反射加载驱动
            //1.8版本之后 可以不加载 自动加载
//            Class.forName("com.mysql.jdbc.Driver");
            
            //2.提供数据库的url
            String url = "jdbc:mysql://localhost/?";
            
            //3.提供用户名、密码
            String password = "?";
            String username = "?";
            
            //4.生成连接对象
            Connection con= DriverManager.getConnection(url, username,password);
            System.out.println(con);
            
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
    }
}

statement案例代码

public class StatementTest {
    public static void main(String[] args) {
        //1.获取连接
        Connection conn = JDBCUtils.getConnection();
        
        Date date = new Date();
        
        //2.定义sql
        String sql = "insert into test6(name,password,create_date) "
                + "values('李思','123','"+ new java.sql.Date(date.getTime()) +"')";
        
        //3.获取Statement对象
        Statement stmt = null;
        try {
            stmt = conn.createStatement();
            
            //4.执行DML语句时 使用executeUpdate
            int result = stmt.executeUpdate(sql);
            
            System.out.println(result > 0 ? "添加成功" : "添加失败");
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //5.关流
            JDBCUtils.close(conn,stmt);
        }
        
        
        
    }
}

prepareStatement 案例代码

/**
 * 由于Statement存储数据时需要拼接字符串
 * 会造成sql注入问题
 * 
 * sql注入:拼接字符串时 被强行插入不符合规则数据 造成数据库宕机
 * 
 * 所以java提供了Statement接口的子接口
 * PreparedStatement 可以用来提供可变参数
 * 
 * 
 * 
 * 
 * 
 * */


public class PrepareTest {
    public static void main(String[] args) {
        //1.获取连接
        Connection conn = JDBCUtils.getConnection();
        
        //2.声明PreparedStatement对象
        PreparedStatement pstmt = null;
        
        //3.定义sql
        String sql = "insert into test6 values(null,?,null,?)";
        
        try {
            //4.生成pstmt对象
            pstmt = conn.prepareStatement(sql);
            
            //5.存储参数
            pstmt.setString(1, "赵柳");
            pstmt.setDate(2, new java.sql.Date(new Date().getTime()));
            
            //6.执行sql并获取返回值
            int result = pstmt.executeUpdate();
            
            System.out.println(result > 0 ? "添加成功" : "添加失败");
            
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //7.关流
            JDBCUtils.close(conn, pstmt);
        }
    }
}

result 案例代码

查询多行数据

public class ResultSetTest1 {
    public static void main(String[] args) {
        //0.声明一个Person对象
        Person person = null;
        
        //1.获取连接
        Connection conn = JDBCUtils.getConnection();
        
        //2.声明pstmt和rs对象
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        //3.定义sql
        String sql = "select * from test6 where id = ?";
        
        try {
            //4.根据sql生成pstmt
            pstmt = conn.prepareStatement(sql);
            
            //5.传递参数
            pstmt.setInt(1, 2);
            
            //6.执行sql并获取rs对象
            rs = pstmt.executeQuery();
            
            //7.遍历rs对象 并获取数据
            while(rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String password = rs.getString("password");
                Date createDate = rs.getDate("create_date");
                
                
                person = new Person(id, name, password, createDate);
            }
            
            
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.close(conn, pstmt, rs);
        }
        
    
        System.out.println(person);
        
    }
}
0

评论 (0)

取消