【JavaWeb学习Day11】
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/databasenameString 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");//DMLSystem.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():获取数据,可以根据列的编号获取,也可以根据列名获取(推荐)。
@Testpublic 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 = ?";//预编译SQLstmt = 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语句,以达到执行代码对服务器进行攻击的方法。
优势二:性能更高。