【JavaWeb学习Day11】

发布于:2025-02-10 ⋅ 阅读:(36) ⋅ 点赞:(0)

java程序操作数据库(JDBC)

JDBC:(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API。

本质:

1.sun公司官方定义的一套操作所有关系型数据库的规范、即接口。

2.各个数据库厂商去实现这套接口,提供数据库驱动jar包。

3.我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

01.入门程序:

1.需求:基于JDBC程序,执行update语句(update user set age = 25 where id = 1)

2.步骤:

准备工作:创建一个maven项目,引入依赖;并准备数据库表user

代码实现:编写JDBC程序,操作数据库

public void testUpdate() throws Exception {
    //1.注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //2.获取数据库连接
    //标准的 JDBC URL 格式:jdbc:mysql://hostname:port/databasename
    String url="jdbc:mysql://localhost:3306/web01";//连接时一定注意这些数据不能错
    String username = "root";
    String password = "1234";
    Connection connection = DriverManager.getConnection(url, username, password);
    //3.获取SQL语句执行对象
    Statement statement = connection.createStatement();
    //4.执行SQL
​
    int i = statement.executeUpdate("update user set age = 25 where id = 1");//DML
    System.out.println("SQL执行完毕影响的记录数为:" + i);
    //5.释放资源
    statement.close();
    connection.close();
}
02.JDBC-查询数据:

1.需求:基于JDBC执行如下select语句,将查询结果封装到User对象中。

2.SQL:select * from user where username = 'daoqiao' and password = '123456'

3.ResultSet(结果集对象):ResultSet re = statement.executeQuery(),next():将光标从当前位置向前移动一行,并判断当前行是否为有效行,返回值为Boolean,返回值为true表示有效行,当前行有数据,false为无效行,当前行没有数据。getXxx():获取数据,可以根据列的编号获取,也可以根据列名获取(推荐)。

@Test
        public void testSelect(){
            String URL = "jdbc:mysql://127.0.0.1:3306/web01";
            String USER  = "root";
            String PASSWORD  = "1234";
​
            Connection conn = null;
            PreparedStatement stmt = null;
            ResultSet rs = null;//封装查询返回的结果
            try{
                //1.注册驱动
                Class.forName("com.mysql.cj.jdbc.Driver");
                //2.打开链接
                conn = DriverManager.getConnection(URL,USER,PASSWORD);
                //3.执行查询
                String sql = "select id,username,password,name,age from user where username = ? AND password = ?";//预编译SQL
                stmt = conn.prepareStatement(sql);
                stmt.setString(1,"daqiao");
                stmt.setString(2,"123456");
                rs = stmt.executeQuery();
                //4.处理结果集
                while (rs.next()){
                    User user = new User(
                            rs.getInt("id"),
                            rs.getString("username"),
                            rs.getString("password"),
                            rs.getString("name"),
                            rs.getInt("age")
                    );
                    System.out.println(user);
​
                }
​
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //5.关闭资源
                try{
                    if(rs!=null) rs.close();
                    if(stmt!=null) stmt.close();
                    if (conn!=null) conn.close();
                } catch (SQLException se){
                    se.printStackTrace();
                }
            }
​
        }
​
03.预编译SQL

优势一:可以防止SQL注入,更安全。

SQL注入:通过控制输入来修改实现定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。

优势二:性能更高。


网站公告

今日签到

点亮在社区的每一天
去签到