怀宁县建设局网站,域名和网址,西安做网站微信公司,汕头seo托管JDBC编程基础 JDBC介绍创建JDBC项目的步骤1.引入依赖2.注册驱动3.获取数据库连接4.获取sql执行对象 JDBC 常用 API 详解sql执行对象PreparedStatement作用 事务管理结果集对象 JDBC项目demo测试 JDBC介绍
每个数据库都会提供一组API来支持程序员实现自己客户端#xff0c;自己… JDBC编程基础 JDBC介绍创建JDBC项目的步骤1.引入依赖2.注册驱动3.获取数据库连接4.获取sql执行对象 JDBC 常用 API 详解sql执行对象PreparedStatement作用 事务管理结果集对象 JDBC项目demo测试 JDBC介绍
每个数据库都会提供一组API来支持程序员实现自己客户端自己根据需求来完成一些具体的增删查改的功能。但数据库也有很多种例如 Oracle、MySQL、SQL Server 等。显然这些不同的数据库是出自不同的厂商之手而对于数据库 API 的约定并没有一个业界统一的标准。 Java 这种跨平台的语言就弄了一个大统一的方案就叫JDBC。也就是说Java约定了一组API称为 JDBC这组 API 里面就包含了一些类和一些方法通过这些类和方法来实现数据库的基本操作。再由各个厂商提供各自的数据驱动包来和 JDBC 的 API 对接。程序员只需要掌握这一套 JDBC API 就可以操作各种各样的数据库了。
创建JDBC项目的步骤
1.引入依赖
依赖仓库
选择和自己数据库版本相同的连接依赖。 dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.30/version/dependency2.注册驱动
不是必须的在较新的 JDBC 版本中使用Class.forName(com.mysql.cj.jdbc.Driver);注册驱动已经不是必需的步骤。在较旧的 JDBC 版本例如 JDBC 3.0 及之前的版本中手动加载驱动是必须的因为在那些版本中驱动的加载不是由DriverManager自动完成的。
在 JDBC 4.0 及更高版本中Java引入了服务提供者机制Service Provider Mechanism其中DriverManager的registerDriver方法能够自动识别和加载可用的 JDBC 驱动。因此对于新的 MySQL Connector/J 驱动不再需要显式地调用Class.forName(com.mysql.cj.jdbc.Driver);。
Class.forName(com.mysql.cj.jdbc.Driver);//mysql8.0
Class.forName(com.mysql.jdbc.Driver);//mysql8.0以前3.获取数据库连接
String url jdbc:mysql://localhost:3306/test;
String user root;
String password 120125hzy.;
Connection conn DriverManager.getConnection(url, user, password);4.获取sql执行对象
//获取执行sql对象 Statement
Statement stmt conn.createStatement();//处理结果集
ResultSet rs null;rsstmt.executeQuery(sql);//executeQuery 执行select语句
rsstmt.executeUpdate(sql);//executeUpdate 执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL数据定义语言语句例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数int指示受影响的行数即更新计数。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句executeUpdate 的返回值总为零。
rsstmt.execute(sql);//方法execute可用于执行任何SQL语句返回一个boolean值表明执行该SQL语句是否返回了ResultSet。如果执行后第一个结果是ResultSet则返回true否则返回false。但它执行SQL语句时比较麻烦通常我们没有必要使用execute方法来执行SQL语句而是使用executeQuery或executeUpdate更适合但如果在不清楚SQL语句的类型时则只能使用execute方法来执行该SQL语句了。JDBC 常用 API 详解
sql执行对象
Statement createStatement()普通执行sql对象。PreparedStatement prepareStatement(sql)预编译sql的执行sql对象防止sql注入可以多次执行只需变更参数值。CallableStatement prepareCall(sql)执行存储过程的对象。
执行sql语句 int executeUpdate(sql)执行DML,DDL语句返回DML语句影响的行数DDL语句执行后成功也可能返回0。 ResultSet executeQuery(sql)执行DQL语句返回值ResultSet 结果集对象。
PreparedStatement作用
预编译sql语句并执行预防sql注入
// 获取 PreparedStatement 对象
// sql语句中的参数值使用?占位符替代
String sql select * from user where uesrname ? and password ?;
// 通过Connection对象获取并传入对应的sql语句
PreparedStatement pstmt conn.prepareStatement(sql);
/* 设置参数值
PreparedStatement对象setXxx(参数1,参数2):给?赋值Xxx数据类型如setInt(参数1,参数2);参数参数1:?的位置编号从1开始参数2:?的值*/
pstmt.setString(1, zs);
pstmt.setInt(2,123);// 执行sql
pstmt.executeQuery(); // 不需要传递sql事务管理
setAutoCommit(boolean autoCommit)开启事务true为自动提交事务false为手动。commit()提交事务。rollback()回滚事务。
结果集对象
ResultSet封装了DQL查询语句的结果。
获取查询结果
boolean next()将光标向后移动一行判断当前行是否为有效行xxx getXxx(参数)获取数据 xxx数据类型如 Int getInt(参数) String getString(参数)。参数 int列的编号从1开始String 列名。
JDBC项目demo
JDBC连接类
public class JDBC {static Connection connection null;/*static { 高版本不是必须的为了兼容性可以写try {Class.forName(com.mysql.cj.jdbc.Driver);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}*/private JDBC() {}public static Connection getConnection() {try {String url jdbc:mysql://localhost:3306/test;String user root;String password 120125hzy.;connection DriverManager.getConnection(url, user, password);} catch (SQLException e) {System.out.println(数据库连接失败);e.printStackTrace();}System.out.println(数据库连接成功);return connection;}public static void close() {try {if (connection ! null !connection.isClosed()) {connection.close();System.out.println(数据库关闭成功);}} catch (SQLException e) {System.out.println(数据库关闭失败);e.printStackTrace();}}
}
实体类 User
public class User {private int id;private String name;private Double balance;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 getBalance() {return balance;}public void setBalance(Double balance) {this.balance balance;}Overridepublic String toString() {return User{ id id , name name \ , balance balance };}
}Dao 层
public class UserDao {public static ListUser select() {Connection conn JDBC.getConnection();try {PreparedStatement ps conn.prepareStatement(select * from user2);ResultSet resultSet ps.executeQuery();ListUser ans new ArrayList();while (resultSet.next()) {User user new User();user.setId(resultSet.getInt(id));user.setName(resultSet.getString(name));user.setBalance(resultSet.getDouble(balance));ans.add(user);}return ans;} catch (SQLException e) {throw new RuntimeException(e);} finally {JDBC.close();}}public static User selectByID(Integer id) {Connection conn JDBC.getConnection();try {PreparedStatement ps conn.prepareStatement(select * from user2 where id ?);ps.setInt(1, id);ResultSet resultSet ps.executeQuery();User user new User();while (resultSet.next()) {user.setId(resultSet.getInt(id));user.setName(resultSet.getString(name));user.setBalance(resultSet.getDouble(balance));}return user;} catch (SQLException e) {throw new RuntimeException(e);} finally {JDBC.close();}}public static String updateByID(User user) {Connection conn JDBC.getConnection();try {PreparedStatement ps conn.prepareStatement(update user2 set name ?, balance ? where id ?);ps.setString(1, user.getName());ps.setDouble(2, user.getBalance());ps.setInt(3, user.getId());int i ps.executeUpdate();return i 0 ? 成功 : 失败;} catch (SQLException e) {throw new RuntimeException(e);} finally {JDBC.close();}}
}测试
查询所有 Testpublic void test01(){// 查询所有ListUser users UserDao.select();for (User user : users){System.out.println(user);}}根据id查询 Testpublic void test02() {// 根据id查询User user UserDao.selectByID(1);System.out.println(user);}根据id修改 Testpublic void test03() {// 根据id修改User user new User();user.setId(1);user.setName(李逍遥);user.setBalance(2000.00);System.out.println(UserDao.updateByID(user));// 根据id查询user UserDao.selectByID(1);System.out.println(user);}