今天小编给大家分享一下怎么使用JDBC连接数据库并执行SQL语句的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
JDBC(Java Database Connectivity)是Java程序与数据库进行交互的一种标准接口,它提供了一种简单的方式来连接和操作数据库。在使用JDBC之前,需要先了解以下几个概念:
JDBC Driver:JDBC驱动程序是一个Java类,用于将Java应用程序与特定数据库管理系统(DBMS)连接。JDBC驱动程序分为四种类型:JDBC-ODBC桥接驱动程序、本地API驱动程序、网络协议驱动程序和本地协议驱动程序。
Connection:Connection是一个JDBC接口,用于连接到数据库。在Java程序中,通过Connection接口的实现类来实现与数据库的连接。
Statement:Statement是一个JDBC接口,用于向数据库发送SQL语句并执行它们。在Java程序中,通过Connection对象创建Statement对象。
ResultSet:ResultSet是一个JDBC接口,用于表示从数据库中检索到的结果集。ResultSet对象通过Statement对象的executeQuery()方法返回。
下面是一个简单的JDBC连接示例:
import java.sql.*;
public class JDBCDemo {
public static void main(String[] args) {
try {
// 加载JDBC驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
// 执行SQL查询
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
System.out.println(rs.getInt(1) + ", " + rs.getString(2) + ", " + rs.getString(3));
}
// 关闭数据库连接
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
在实际开发中,我们通常会抽取出一个JDBC工具类来封装JDBC相关操作,以方便代码的重用和维护。下面是一个简单的JDBC工具类示例:
import java.sql.*;
public class JDBCUtils {
private static final String URL = "jdbc:mysql://localhost:3306/mydb";
private static final String USER = "root";
private static final String PASSWORD = "password";
static {
try {
// 加载JDBC驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection conn = null;
try {
// 建立数据库连接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void release(ResultSet rs, Statement stmt, Connection conn) {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Statement是JDBC中最基本的操作方式,它用于向数据库发送SQL语句并执行它们。下面是一个使用Statement进行CRUD操作的示例:
import java.sql.*;
public class StatementCRUD {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
stmt = conn.createStatement();
// 插入数据
String sql = "INSERT INTO users (name, age) VALUES ('Tom', 18)";
stmt.executeUpdate(sql);
// 更新数据
sql = "UPDATE users SET age = 20 WHERE name = 'Tom'";
stmt.executeUpdate(sql);
// 删除数据
sql = "DELETE FROM users WHERE age = 20";
stmt.executeUpdate(sql);
// 查询数据
sql = "SELECT * FROM users";
rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getInt(1) + ", " + rs.getString(2) + ", " + rs.getInt(3));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
}
}
下面是一个使用PreparedStatement进行CRUD操作的示例:
import java.sql.*;
public class PreparedStatementCRUD {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
// 插入数据
String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "Tom");
pstmt.setInt(2, 18);
pstmt.executeUpdate();
// 更新数据
sql = "UPDATE users SET age = ? WHERE name = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 20);
pstmt.setString(2, "Tom");
pstmt.executeUpdate();
// 删除数据
sql = "DELETE FROM users WHERE age = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 20);
pstmt.executeUpdate();
// 查询数据
sql = "SELECT * FROM users";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1) + ", " + rs.getString(2) + ", " + rs.getInt(3));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, pstmt, conn);
}
}
}
Dao(Data Access Object)模式是一种用于封装数据访问逻辑的设计模式。它将数据访问逻辑与业务逻辑分离开来,使得代码更易于维护和扩展。下面是一个使用Dao模式进行CRUD操作的示例:
import java.sql.*;
public class UserDAO {
private static final String INSERT_SQL = "INSERT INTO users (name, age) VALUES (?, ?)";
private static final String UPDATE_SQL = "UPDATE users SET age = ? WHERE name = ?";
private static final String DELETE_SQL = "DELETE FROM users WHERE age = ?";
private static final String SELECT_SQL = "SELECT * FROM users";
public void insert(User user) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = JDBCUtils.getConnection();
pstmt = conn.prepareStatement(INSERT_SQL);
pstmt.setString(1, user.getName());
pstmt.setInt(2, user.getAge());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.release(null, pstmt, conn);
}
}
public void update(User user) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = JDBCUtils.getConnection();
pstmt = conn.prepareStatement(UPDATE_SQL);
pstmt.setInt(1, user.getAge());
pstmt.setString(2, user.getName());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.release(null, pstmt, conn);
}
}
public void delete(int age) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = JDBCUtils.getConnection();
pstmt = conn.prepareStatement(DELETE_SQL);
pstmt.setInt(1, age);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.release(null, pstmt, conn);
}
}
public List<User> selectAll() {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List<User> userList = new ArrayList<>();
try {
conn = JDBCUtils.getConnection();
pstmt = conn.prepareStatement(SELECT_SQL);
rs = pstmt.executeQuery();
while (rs.next()) {
User user = new User();
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setAge(rs.getInt(3));
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, pstmt, conn);
}
return userList;
}
}
public class User {
private int id;
private String name;
private int age;
// 省略getter、setter方法
}
PreparedStatement是一种预编译的Statement,它可以通过占位符的方式来替换SQL语句中的参数,避免了SQL注入的危险。下面是一个使用PreparedStatement进行CRUD操作的示例:
import java.sql.*;
public class PrepareStatementCRUD {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = JDBCUtils.getConnection();
// 插入数据
String sql = "INSERT INTO users (name, age) VALUES (?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "Tom");
pstmt.setInt(2, 18);
pstmt.executeUpdate();
// 更新数据
sql = "UPDATE users SET age = ? WHERE name = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 20);
pstmt.setString(2, "Tom");
pstmt.executeUpdate();
// 删除数据
sql = "DELETE FROM users WHERE age = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 20);
pstmt.executeUpdate();
// 查询数据
sql = "SELECT * FROM users";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt(1) + ", " + rs.getString(2) + ", " + rs.getInt(3));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, pstmt, conn);
}
}
}
以上就是“怎么使用JDBC连接数据库并执行SQL语句”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://blog.csdn.net/inchat/article/details/130295139