admin管理员组

文章数量:1122954

JDBC

JDBC 访问数据库的步骤

  1. 注册和加载驱动(可以省略)
  2. 获取连接
  3. Connection 获取 Statement 对象
  4. 使用 Statement 对象执行 SQL 语句
  5. 返回结果集
  6. 释放资源

API下的Statement

Statement类

  • JDBC 访问数据库的步骤
  • API下的Statement
  • 一. Statement 作用
  • 二. Statement 的方法
  • 三. 使用步骤
    • 1.DML
    • 2.DDL
    • 3.DQL
  • 四. 案例(重点)


一. Statement 作用

代表一条语句对象,用于发送 SQL 语句给服务器,用于执行静态 SQL 语句并返回它所生成结果的对象。

二. Statement 的方法

方法名描述
int excuteUpdate(sql)执行DML ,DDL语句 返回值DML语句影响行数,但是DQL语句执行后也可能返回0
ResultSet executeQuery(String sql)执行DQL语句 返回值:ResultSet结果集对象

三. 使用步骤

1.DML

代码如下(示例):

package Web.JDBCDemo;import org.junit.Test;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class JDBCDemo3 {@Testpublic void testDML() throws Exception {//1. 注册驱动//Class.forName("com.mysql.jdbc.Driver");//2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化书写String url = "jdbc:mysql:///db1?useSSL=false";String username = "root";String password = "1234";Connection conn =DriverManager.getConnection(url, username, password);//3. 定义sqlString sql = "update account set money = 3000where id = 1";//4. 获取执行sql的对象 StatementStatement stmt = conn.createStatement();//5. 执行sqlint count = stmt.executeUpdate(sql);//执行完DML语句,受影响的行数//6. 处理结果//System.out.println(count);if (count > 0) {System.out.println("修改成功~");} else {System.out.println("修改失败~");}//7. 释放资源stmt.close();conn.close();}
}

2.DDL

代码如下(示例):

```java
package Web.JDBCDemo;import org.junit.Test;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;public class JDBCDemo3 {@Testpublic void testDML() throws Exception {//1. 注册驱动//Class.forName("com.mysql.jdbc.Driver");//2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化书写String url = "jdbc:mysql:///db1?useSSL=false";String username = "root";String password = "1234";Connection conn =DriverManager.getConnection(url, username, password);//3. 定义sqlString sql = "create table db2";//4. 获取执行sql的对象 StatementStatement stmt = conn.createStatement();//5. 执行sqlint count = stmt.executeUpdate(sql);//执行完DDML语句,受影响的行数//6. 处理结果是0,也是很有可能创建成功//System.out.println(count);//7. 释放资源stmt.close();conn.close();}
}

注意:以后开发很少使用java代码操作DDL语句


3.DQL

  1. ResultSet接口(结果集对象)的
    • 作用:封装了DQL查询语句的结果,对结果集进行遍历,取出每一条记录
    • ResultSet 接口中的方法
方法名说明
boolean next()1. 游标向下移动 1行 /// 2. 返回 boolean 类型,如果还有下一条记录,返回 true,否则返回 false
数据类型 getXxx()1. 通过字段名,参数是 String 类型。返回不同的类型 ///2. 通过列号,参数是整数,从 1 开始。返会不同的类型

  1. 常用数据类型转换表

  2. 确保数据库中有 3 条记录,查询所有的账户表里面的信息
    例题:将account表中数据通过java代码实现打印出来

  @Testpublic void testDQL() throws Exception {Class.forName("com.mysql.jdbc.Driver");//2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化书写String url = "jdbc:mysql:///db1?useSSL=false";String username = "root";String password = "o676448";Connection conn = DriverManager.getConnection(url, username, password);//4. 获取执行sql的对象 StatementStatement stmt = conn.createStatement();//5. 执行sqlResultSet count = stmt.executeQuery("select *from account");//执行完DML语句,受影响的行数//6. 处理结果/** Statement类:ResultSet executeQuery(String sql)	执行DQL语句 返回值:ResultSet结果集对象ResultSet接口:boolean next()	1. 游标向下移动 1行 /// 2. 返回 boolean 类型,如果还有下一条记录,返回 true,否则返回 false数据类型 getXxx()	1. 通过字段名,参数是 String 类型。返回不同的类型 ///2. 通过列号,参数是整数,从 1 开始。返会不同的类型                    */while (count.next()){//通过列名获取int id = count.getInt("id");String name = count.getString("name");double money = count.getDouble("money");/*通过索引获取   注意:从1开始count.getInt("1");count.getString("2");count.getDouble("3");*/System.out.println(id);System.out.println(name);System.out.println(money);System.out.println("----------------");}//7. 释放资源count.close();stmt.close();conn.close();}

例题分析:

四. 案例(重点)

  • 需求:查询account账户表数据,封装为Account对象中,并且存储到ArrayList集合中

  • 问题分析
    查询account账户表数据,封装为Account对象中,并且存储到ArrayList集合中

    1. 定义实体类Account

    2. 查询数据,封装到Account对象中

    3. 将Account对象存入ArrayList集合中

  • 代码实现:

account类

package Web.pojo;public class account {private int id;private String name;private  double money;public account() {}public account(int id, String name, double money) {this.id = id;this.name = name;this.money = money;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}@Overridepublic String toString() {return "account{" +"id=" + id +", name='" + name + '\'' +", money=" + money +'}';}
}

ResultDemo类

 @Testpublic void testDQL() throws Exception {Class.forName("com.mysql.jdbc.Driver");//2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化书写String url = "jdbc:mysql:///db1?useSSL=false";String username = "root";String password = "o676448";Connection conn = DriverManager.getConnection(url, username, password);//4. 获取执行sql的对象 StatementStatement stmt = conn.createStatement();//5. 执行sqlResultSet count = stmt.executeQuery("select *from account");//执行完DML语句,受影响的行数//6. 处理结果/** Statement类:ResultSet executeQuery(String sql)	执行DQL语句 返回值:ResultSet结果集对象ResultSet接口:boolean next()	1. 游标向下移动 1行 /// 2. 返回 boolean 类型,如果还有下一条记录,返回 true,否则返回 false数据类型 getXxx()	1. 通过字段名,参数是 String 类型。返回不同的类型 ///2. 通过列号,参数是整数,从 1 开始。返会不同的类型                    *//*** 建立ArrayList集合*/ArrayList<account> arr = new ArrayList<account>();while (count.next()){/*** 新建account类存储信息*/account at = new account();//通过列名获取int id = count.getInt("id");String name = count.getString("name");double money = count.getDouble("money");/*     通过索引获取   注意:从1开始int anInt = count.getInt("1");String string = count.getString("2");double aDouble = count.getDouble("3");
*/at.setId(id);at.setName(name);at.setMoney(money);/***  把account类装入集合中*/arr.add(at);}System.out.println(arr);//7. 释放资源count.close();stmt.close();conn.close();}

本文标签: JDBC