一、数据库编程一般过程
图为数据库编程的一般过程,其中查询(Read)过程最多需要7个步骤,修改(C插入、U 更新、D删除)过程最多需要5个步骤。这个过程采用了预编译语句对象进行数据操作,所以有可能进 行绑定参数。
在编程之前先交代一下config.properties文件:
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/JAVA user=root password=199911 useSSL=false verifyServerCertificate=false
准备好的数据库
二、数据查询操作
(1)有条件查询
代码如下:
import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/3/2 * @time : 3:48 下午 */ //不使用自动资源管理 public class CRUDSample1 { // 连接数据库 static String url; // 创建properties对象 static Properties info = new Properties(); // 1.驱动程序加载,放在静态代码块中,在静态代码块中读取属性文件内容到Properties对象和加载驱动程序,这两个操作只需执行一次 static { // 获得属性文件输入流 InputStream inputStream = CRUDSample1.class.getClassLoader().getResourceAsStream("config.properties"); try { // 加载属性文件内容到Properties对象 info.load(inputStream); // 从属性文件中读取URL url = info.getProperty("url"); // 从属性文件中读取driver String driverClassname = info.getProperty("driver"); // 驱动程序加载 Class.forName(driverClassname); System.out.println("驱动程序加载成功"); } catch (IOException e) { System.out.println("加载属性文件失败"); e.printStackTrace(); } catch (ClassNotFoundException e) { System.out.println("驱动程序加载失败"); e.printStackTrace(); } } //主函数 public static void main(String[] args) { // 查询数据 read(); } // 数据查询操作 public static void read(){ Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 2.创建数据库连接 conn = DriverManager.getConnection(url,info); System.out.println("数据库连接成功"); // 3.创建语句对象,返回PreparedStatement对象 // 这里查询的是数据库中id大于2的人的姓名和年龄 pstmt = conn.prepareStatement("select name,age from xinxi_tb where id > ? order by id"); // 4.绑定参数 /** * 绑定参数时需要注意两个问题:绑定参数顺序 和 绑定参数的类型 * 绑定参数索引是 从1开始的,而不是从0开始的。 * 根据绑定参数的类型不同选择对应的set方法。 */ pstmt.setInt(1,3); // 5.执行查询 rs = pstmt.executeQuery(); // 6.遍历结果集 while (rs.next()){ /**注意点:列名对应的数据类型,rs.getX就对应什么,例如(name: %s,rs.getString("name"或者为 1 )) *rs.getX(可以设置为columnindex = (查找的列的索引,从1开始索引),或columnLabel = "列名") */ System.out.printf("name: %s,age: %d\n",rs.getString(1),rs.getInt("age")); } } catch (SQLException e) { e.printStackTrace(); // 7.释放资源,这里也可以选择自动资源管理 }finally { if (rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null){ try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null){ try { conn.close(); }catch (SQLException e) { e.printStackTrace(); } } } } }
运行结果:
驱动程序加载成功 数据库连接成功 name: 雷军,age: 43 name: 马云,age: 56 name: 马化腾,age: 49
(2)无条件查询
代码如下:
import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/3/2 * @time : 6:01 下午 */ //使用自动资源管理系统 public class CRUDSample2 { // 连接数据库 static String url; // 创建properties对象 static Properties info = new Properties(); // 1.驱动程序加载,放在静态代码块中,在静态代码块中读取属性文件内容到Properties对象和加载驱动程序,这两个操作只需执行一次 static { // 获得属性文件输入流 InputStream inputStream = CRUDSample2.class.getClassLoader().getResourceAsStream("config.properties"); try { // 加载属性文件内容到Properties对象 info.load(inputStream); // 从属性文件中读取URL url = info.getProperty("url"); // 从属性文件中读取driver String driverClassname = info.getProperty("driver"); // 驱动程序加载 Class.forName(driverClassname); System.out.println("驱动程序加载成功"); } catch (IOException e) { System.out.println("加载属性文件失败"); e.printStackTrace(); } catch (ClassNotFoundException e) { System.out.println("驱动程序加载失败"); e.printStackTrace(); } } //主函数 public static void main(String[] args) { // 查询最大的用户id System.out.println(readMaxUserID()); } // 查询最大的用户id public static int readMaxUserID(){ int maxid = 0; try ( // 2.创建数据库连接 Connection conn = DriverManager.getConnection(url,info); // 3.创建语句对象 PreparedStatement pstmt = conn.prepareStatement("select max(id) from xinxi_tb"); // 4。执行查询 ResultSet rs = pstmt.executeQuery() ){ // 打印数据库连接信息 System.out.println("数据库连接成功"); // 5.遍历结果集 if (rs.next()){ maxid = rs.getInt(1); } } catch (SQLException e) { e.printStackTrace(); } return maxid; } }
运行结果:
驱动程序加载成功 数据库连接成功 6
三、数据插入
代码如下:
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Properties; /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/3/2 * @time : 6:15 下午 */ //使用自动资源管理系统 public class CRUDSample3 { // 连接数据库 static String url; // 创建properties对象 static Properties info = new Properties(); // 1.驱动程序加载,放在静态代码块中,在静态代码块中读取属性文件内容到Properties对象和加载驱动程序,这两个操作只需执行一次 static { // 获得属性文件输入流 InputStream inputStream = CRUDSample2.class.getClassLoader().getResourceAsStream("config.properties"); try { // 加载属性文件内容到Properties对象 info.load(inputStream); // 从属性文件中读取URL url = info.getProperty("url"); // 从属性文件中读取driver String driverClassname = info.getProperty("driver"); // 驱动程序加载 Class.forName(driverClassname); System.out.println("驱动程序加载成功"); } catch (IOException e) { System.out.println("加载属性文件失败"); e.printStackTrace(); } catch (ClassNotFoundException e) { System.out.println("驱动程序加载失败"); e.printStackTrace(); } } //主函数 public static void main(String[] args) { // 数据插入操作 create(); } public static void create(){ try ( // 2.创建数据库连接 Connection conn = DriverManager.getConnection(url,info); // 3.创建语句对象 PreparedStatement pstmt = conn.prepareStatement("insert into xinxi_tb (id, name, age) values (?,?,?)"); ){ // 打印数据库连接信息 System.out.println("数据库连接成功"); // 4.绑定参数 pstmt.setInt(1,6); pstmt.setString(2,"马化腾"); pstmt.setInt(3,49); // 5.执行修改 // 行executeUpdate()方法执行SQL语句,该 方法与查询方法executeQuery()不同。executeUpdate()方法返回的是整数,成功影响的记录数, 即成功插入记录数。 int affectedRows = pstmt.executeUpdate(); System.out.printf("成功插入%d条数据\n",affectedRows); } catch (SQLException e) { e.printStackTrace(); } } }
这里要根据自己数据库的实际情况来修改代码,才能运行
四、数据更新
代码如下:
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Properties; /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/3/2 * @time : 6:40 下午 */ //使用自动资源管理系统 public class CRUDSample4 { // 连接数据库 static String url; // 创建properties对象 static Properties info = new Properties(); // 1.驱动程序加载,放在静态代码块中,在静态代码块中读取属性文件内容到Properties对象和加载驱动程序,这两个操作只需执行一次 static { // 获得属性文件输入流 InputStream inputStream = CRUDSample4.class.getClassLoader().getResourceAsStream("config.properties"); try { // 加载属性文件内容到Properties对象 info.load(inputStream); // 从属性文件中读取URL url = info.getProperty("url"); // 从属性文件中读取driver String driverClassname = info.getProperty("driver"); // 驱动程序加载 Class.forName(driverClassname); System.out.println("驱动程序加载成功"); } catch (IOException e) { System.out.println("加载属性文件失败"); e.printStackTrace(); } catch (ClassNotFoundException e) { System.out.println("驱动程序加载失败"); e.printStackTrace(); } } //主函数 public static void main(String[] args) { // 数据更新操作 update(); } public static void update(){ try ( // 2.创建数据库连接 Connection conn = DriverManager.getConnection(url,info); // 3.创建语句对象 PreparedStatement pstmt = conn.prepareStatement("update xinxi_tb set name = ? where id = ?"); ){ // 打印数据库连接信息 System.out.println("数据库连接成功"); // 4.绑定参数 pstmt.setString(1,"雷军"); pstmt.setInt(2,4); // 5.执行修改 int affectedRows = pstmt.executeUpdate(); System.out.printf("成功更新%d条数据\n",affectedRows); } catch (SQLException e) { e.printStackTrace(); } } }
这里要根据自己数据库的实际情况来修改代码,才能运行
五、数据删除
代码如下:
import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Properties; /** * @author : 蔡政洁 * @email :caizhengjie888@icloud.com * @date : 2020/3/2 * @time : 6:49 下午 */ //使用自动资源管理系统 public class CRUDSample5 { // 连接数据库 static String url; // 创建properties对象 static Properties info = new Properties(); // 1.驱动程序加载,放在静态代码块中,在静态代码块中读取属性文件内容到Properties对象和加载驱动程序,这两个操作只需执行一次 static { // 获得属性文件输入流 InputStream inputStream = CRUDSample2.class.getClassLoader().getResourceAsStream("config.properties"); try { // 加载属性文件内容到Properties对象 info.load(inputStream); // 从属性文件中读取URL url = info.getProperty("url"); // 从属性文件中读取driver String driverClassname = info.getProperty("driver"); // 驱动程序加载 Class.forName(driverClassname); System.out.println("驱动程序加载成功"); } catch (IOException e) { System.out.println("加载属性文件失败"); e.printStackTrace(); } catch (ClassNotFoundException e) { System.out.println("驱动程序加载失败"); e.printStackTrace(); } } //主函数 public static void main(String[] args) { // 数据删除操作 delete(); } public static void delete(){ try ( // 2.创建数据库连接 Connection conn = DriverManager.getConnection(url,info); // 3.创建语句对象 PreparedStatement pstmt = conn.prepareStatement("delete from xinxi_tb where id = ?"); ){ // 打印数据库连接信息 System.out.println("数据库连接成功"); // 4.绑定参数 pstmt.setInt(1, 3); // 5.执行修改 int affectedRows = pstmt.executeUpdate(); System.out.printf("成功删除%d条数据\n",affectedRows); } catch (SQLException e) { e.printStackTrace(); } } }
这里要根据自己数据库的实际情况来修改代码,才能运行