一、JDBC的基本利用:
JDBC是数据库毗连技术
它们位于java.sql包以及javax.sql包中
JDBC的作用:
1.建立与数据库之间的访问毗连
2.将编写好的SQL语句发送到数据库执行
3.对数据库返回的效果进行处理
四个重要类和接口:
1.DriverManager类:管理JDBC驱动
2.Connection接口:负责毗连数据库,并担当传送数据的任务
3.Statement接口:由Connection产生,负责SQL语句
4.ResultSet接口:负责保存Statement执行后所产生的执行效果
运行代码须要准备的:
我创建的是web项目
须要引一下mysql的包
然后右键lib包
Add as library
二、JDBC访问数据库步调(查询):
1.加载驱动:Class.forName():加载驱动,假如系统中不存在给定的类,则会引发异常,异常类型为"ClassNotFoundException"
2. 通过DriverManager创建Connection对象;DriverManeger类跟踪已注册的驱动程序,当调用getConnection时,它会搜索驱动程序列表,直到找到一个可以或许毗连至字符串指定命据库驱动程序,加载此驱动程序后,将利用DriverManager的getConnection()建立毗连,此方法接收三个参数
3.通过Connection获得Statement对象,用于执行sql
4.准备sql语句
5.利用Statemennt执行SQL语句,并返回效果。利用ResultSet对象的next()方法判断效果集是否包含数据。在next()方法返回true时,利用ResultSet的getxxx()方法得到对应字段的值。
6.处理rs遍历集合
7.关闭效果集
注意:
- rs.getInt("customer_id");中可以放字段名称,也可以放字段列数(第几列)rs.getInt(1);,数字是几,返回的内容就是第几列的
- 一次rs.next( ) 返回的是一行数据,以是假如是返回多行数据,还须要在while(){}里面来一个for循环
- stmt.executeQuery(sql);和stmt.execute(sql);第一个会返回影响行数,第二个会返回boolean(false是乐成了,true是失败了),推荐利用executeQuery(sql)。
查询JDBC代码:
- public static void main(String[] args) {
- Connection connection = null;
- Statement stmt = null;
- ResultSet rs = null;
- //1.加载驱动
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- //2.通过DriverManager创建Connection对象
- connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool02", "root", "root");
- //3.通过Connection获得Statement对象,用于执行sql
- stmt = connection.createStatement();
- //4.准备sql语句
- String sql = "select * from orders";
- //5.使用Statemennt执行SQL语句,并返回结果
- rs = stmt.executeQuery(sql);
- //6.处理rs遍历集合
- while (rs.next()){
- int id = rs.getInt("order_id");
- int customerId = rs.getInt("customer_id");
- String orderDate = rs.getString("order_date");
- String status = rs.getString("status");
- System.out.println("id:"+'\t'+id+"customerId"+'\t'+customerId+"orderDate"+'\t'+orderDate+"status"+'\t'+status);
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //7.关闭结果集
- if(rs!=null){
- rs.close();
- }
- if(stmt!=null){
- stmt.close();
- }
- if(connection!=null){
- connection.close();
- }
-
- }
- }
复制代码
三、PrepareStatement实现增删改:
PrepareStatement继续Statement接口,PrepareStatement包含已编译的SQL语句,这些输入参数的值在SQL创建时未被指定,而是为每一个输入参数保留一个?作为占位符。
在执行PrepareStatement之前,必须设置每个输入参数的值,可以通过调用setXxx()方法
PrepareStatement对语句进行了预编译,以是速度比statement快
增删改返回的数据是影响行数
增删改步调:前两条都一样
- Class.forName():加载驱动,假如系统中不存在给定的类,则会引发异常,异常类型为"ClassNotFoundException"
- DriverManeger类跟踪已注册的驱动程序,当调用getConnection时,它会搜索驱动程序列表,直到找到一个可以或许毗连至字符串指定命据库驱动程序,加载此驱动程序后,将利用DriverManager的getConnection()建立毗连,此方法接收三个参数
- 编写SQL语句,创建PrepareStatement对象,
- 设置参数值,用pstmt.setXxx(第几行,值(可以用变量))
- 利用pstmt的executeUpdate()方法返回影响行数。
增删改代码:
- public class jdbc02 {
- public static void main(String[] args) {
-
- Connection connection = null;
- PreparedStatement pstmt = null;
- ResultSet rs = null;
- //1.加载驱动
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- //2.通过DriverManager创建Connection对象
- connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool02", "root", "root");
- //3.prepareStatement对象
- String sql = "update orders set customer_id=? where order_id = ?";
- pstmt = connection.prepareStatement(sql);
- //4设置参数值
- int customerId = 111;
- int orderId = 2;
- pstmt.setInt(1,customerId);
- pstmt.setInt(2,orderId);
- //5.执行操作
- int rowsAffected = pstmt.executeUpdate();
- //6. 检查是否有行受到影响
- if (rowsAffected > 0) {
- System.out.println("成功更新了" + rowsAffected + "条记录!");
- } else {
- System.out.println("没有找到指定的员工记录。");
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //7.关闭
- try {
- if (pstmt != null) {
- pstmt.close();
- }
- if (connection != null) {
- connection.close();
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
复制代码
PrepareStatement和Statement区别:
- Statement由方法createStatement()创建,该对象用于发送简单的SQL语句
- PreparedStatement由方法prepareStatement()创建,该对象用于发送带有一个或者多个输入参数的SQL语句,SQL语句利用“?”作为数据占位符利用setXxx()方法设置数据
四、对实体类数据封装查询的三种方式:
在表中,一张表是一个类,每一行数据是一个对象
实体类是SmbmsUser
封装方法到Userserver里
返回值
|
| 方法名
| 返回值类型
| 单行多列
| 根据id查询
| findUserById( )
| User
| 多行多列
| 直接select*查询
| findUserList( )
| List<User>
| 单行单列
| count(1)
| findUserCount( )
| int
| 注意:
- 在单行多利中创建实体类对象,只须要一个对象就可以装的下。在遍历值的时间,须要先用getXxx方法获取值,然后把它放到SetXxx()方法中。
- 查找多行多列里面,须要 用集合List<SmbmsUser>,这里面有多个对象,须要在while循环中创建SmbmsUser对象,然后在循环末端利用add()方法。在遍历值的时间,须要先用getXxx方法获取值,然后把它放到SetXxx()方法中。
- 在单行单列中,不须要遍历,直接用int接收SQL语句中的count()值。
1.查找单行多列:
我传入了一个id
- public SmbmsUser findUserById(int id){
- Connection connection = null;
- Statement stmt = null;
- ResultSet rs = null;
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- String url="jdbc:mysql://localhost:3306/javaweb_test";
- String username = "root";
- String pwd = "root";
- Connection conn = DriverManager.getConnection(url,username,pwd);
- String sql = "select * from smbms_user where id = "+id;
- stmt = conn.createStatement();
- rs = stmt.executeQuery(sql);
- SmbmsUser smbmsUser = null;
- while (rs.next()){
- smbmsUser = new SmbmsUser();
- rs.getString("userPassword");
- smbmsUser.setId( rs.getInt("id"));
- smbmsUser.setUserCode(rs.getString("userCode"));
- smbmsUser.setUserName(rs.getString("userName"));
- smbmsUser.setUserPassword( rs.getString("userPassword"));
- }
- return smbmsUser;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
复制代码
2.查找多行多列
- public List<SmbmsUser> findUserList(){
- Connection connection = null;
- Statement stmt = null;
- ResultSet rs = null;
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- String url="jdbc:mysql://localhost:3306/javaweb_test";
- String username = "root";
- String pwd = "root";
- Connection conn = DriverManager.getConnection(url,username,pwd);
- String sql = "select * from smbms_user where userRole is not null" ;
- stmt = conn.createStatement();
- rs = stmt.executeQuery(sql);
- List<SmbmsUser> smbmsUserList = new ArrayList<>();
- while (rs.next()){
- //这个是在里面创建对象
- SmbmsUser smbmsUser = new SmbmsUser();
- smbmsUser = new SmbmsUser();
- smbmsUser.setId( rs.getInt("id"));
- smbmsUser.setUserCode(rs.getString("userCode"));
- smbmsUser.setUserName(rs.getString("userName"));
- smbmsUser.setUserPassword( rs.getString("userPassword"));
- smbmsUserList.add(smbmsUser);
- }
- return smbmsUserList;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
复制代码
3.查找单行单列
- public int findUserCount( ) {
- Connection connection = null;
- Statement stmt = null;
- ResultSet rs = null;
- try {
- Class.forName("com.mysql.cj.jdbc.Driver");
- String url="jdbc:mysql://localhost:3306/javaweb_test";
- String username = "root";
- String pwd = "root";
- Connection conn = DriverManager.getConnection(url,username,pwd);
- String sql = "select count(*) countuser from smbms_user";
- stmt = conn.createStatement();
- rs = stmt.executeQuery(sql);
- int count = 0;
- //6.处理resultSet遍历集合
- while(rs.next()){
- count = rs.getInt("countuser");
- }
- return count;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return 0;
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |