JDBC连接数据库(详细步骤)

JDBC连接数据库

总结了JDBC连接数据库具体步骤的的实现

JDBC连接数据库的步骤

  1. 注册驱动
  2. 获取连接
  3. 获取数据库操作对象
  4. 执行sql语句
  5. 处理查询结果集
  6. 释放资源

步骤的具体实现

注册驱动

注册驱动时,需要导入MySQL的驱动包mysql-connector-java-5.1.32.jar包,通过这个包才能时java程序能够连上数据库。如果导入后不能连接上数据库,可能是因为数据库的版本太高,需要新一级的驱动包mysql-connector-java-8.0.24.jar包。

具体实现

Class.forName(com.mysql.jdbc.Driver)  //一般通过反射来注册驱动

获取连接

获取连接时,一般需要获得数据库的url,用户名,和密码然后通过Connection类获取连接

具体实现

// url表示数据的url地址 url: jdbc:mysql://访问的地址:3306/数据库名 3306是MySQL的默认端口
// user表示数据库的用户名 user: 用户名
// user表示数据库的密码 password: 密码
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url,user,password);

获取数据库操作对象

获取数据库操作对象可以通过StatementPreparedStatement两种方式来获取数据库操作对象。
Statement: 操作数据库时是直接编译SQL语句,是一致拼接字符串的方式来拼接SQL语句,这种方式来操作数据库对象,容易造成SQL注入现象。
PreparedStatement: 操作数据库时,是先将SQL语句预编译一遍,然后将值注入进来,这样不易造成SQL注入。
虽然Statement易造成SQL注入现象,但是在有些需求时,还是会用到Statement操作数据库。例如查询出来的数据需要动态输入是否排序时就需要Statement实现

具体实现

Statement stmt = conn.createStatement(); // Statement方式获取数据库操作对象
PreparedStatement ps = conn.prepareStatement(sql);  //PreparedStatement方式获取,预编译SQL语句

执行SQL语句

如果是执行增删改(DML)语句就需要使用**executeUpdate()方法,如果执行的是查询(DQL)语句就需要使用executeQuery()**方法,使用查询语句才会有结果集返回。

具体实现

String sql = "select e.ename,e.sal from emp e";  //DQL语句
stmt.executeQuery(sql);  //Statement方式
ps.executeQuery();  //PreparedStatement方式 因为先执行了SQL语句所以在这就不用再传入sql了


String sql = "update emp set sal = sal-1000 where empno=?"; // DQL语句 PreparedStatement方式
//PreparedStatement中下标没有0所以从1开始往后添加第一个要注入的值就是1第二给为2依次往后推
ps.setInt(1,7369); //将值注入进SQL语句中 因为已经执行过SQL语句了,这里只需将值传入就行


String sql = "update emp set sal = sal-1000 where empno= "+num+""; // DQL语句 Statement方式
stmt.executeUpdate(sql);

//注意ps和stmt是由上一步获取数据库连接对象获得的对象

插入的方法

要导入数据是什么类型就用set什么类型的方法

处理查询结果集

查询(DQL)语句才会有结果集,一般将结果集用ResultSet类封装

具体实现

String sql = "select ename,sal from emp";
ResultSet rs = stmt.executeQuery(sql);  //接收返回的结果集
ResultSet rs = ps.executeQuery();
while(rs.next()){  //rs.next()表示将光标往下一行读取下面一行的数据
	//根据字段名来读取数据
	rs.getString("ename"); //获取查询出来的ename 数据拿到了后续要怎么操作就看自己的需求了,这里就不做演示
	rs.getDouble("sal");  //获取查询出来的sal

	//根据下标来读取数据
	rs.getString(1); //获取查询出来的ename
	rs.getDouble(2);//获取查询出来的sal
}

释放资源

释放资源时,需要先进行判断是否存在这个资源,然后再将这个资源关闭,一般是从后往前关闭,先创建的后关闭。

具体实现

 		 	if (rs != null){
                try{
                    rs.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if (stmt != null){
                try{
                    stmt.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }
            if (conn != null){
                try{
                    conn.close();
                }catch (SQLException e){
                    e.printStackTrace();
                }
            }

总结

一般来说,获取数据连接时数据库的url,用户名,密码,驱动类型一般写在db.properties配置文件中,因为这样以后数据库信息更改之后易于维护。并且将获取数据连接,释放资源一般封装在一个工具类DBUtlis类中,封装之后就不会经常性的写重复的代码,下面展示一个完整的JDBC连接操作。

db.properties配置文件的编写

项目结构

db.properties配置文件需要写在resourses包中

driver=com.mysql.jdbc.Driver   //驱动类型
url=jdbc:mysql://localhost:3306/test   //url
user=root  //数据库用户名
password=123456  //数据库密码

DBUtils文件的编写

// 数据库工具类
public class DBUtils {
    //工具类中的构造方法一般都是私有化的,为什么?
    //构造方法私有化是为了防止new对象
    private DBUtils(){}
    //类加载时绑定属性资源文件 通过次类来绑定db.properties文件以此来获取db.properties文件中的信息
    private static ResourceBundle bundle = ResourceBundle.getBundle("resources/db");
    //注册驱动
    static {
        try {
            Class.forName(bundle.getString("driver"));  
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    //获取数据库连接对象
    public static Connection getConnection() throws SQLException {
        String url = bundle.getString("url");  //获取url
        String user = bundle.getString("user"); //获取数据库用户名
        String password = bundle.getString("password"); //获取数据库密码
        Connection conn = DriverManager.getConnection(url,user,password);
        return conn;
    }
    
    //释放资源
    public static void close(Connection conn, Statement stmt, ResultSet rs){
        if (rs != null){
            try{
                rs.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
        if (stmt != null){
            try{
                stmt.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
        if (conn != null){
            try{
                conn.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
    }
}

测试类的编写

这里用PreparedStatementa来操作对象

// 测试DBUtils
public class JDBCTest05 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = DBUtils.getConnection();
            String sql = "select ename,sal from emp where ename like ?";
            ps = conn.prepareStatement(sql);
            ps.setString(1,"%s%");
            rs = ps.executeQuery();
            while (rs.next()){
                System.out.println(rs.getString("ename")+","+rs.getDouble("sal"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtils.close(conn,ps,rs);
        }
    }
}

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,以下是使用 JDBC 连接数据库实现增删改查的示例代码: ```java import java.sql.*; public class JDBCExample { static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase"; // 数据库连接地址 static final String USER = "username"; // 数据库用户名 static final String PASS = "password"; // 数据库密码 public static void main(String[] args) { Connection conn = null; Statement stmt = null; try { // 注册 JDBC 驱动 Class.forName("com.mysql.jdbc.Driver"); // 打开链接 System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL, USER, PASS); // 执行查询 System.out.println("Creating statement..."); stmt = conn.createStatement(); String sql; sql = "SELECT id, name, age FROM users"; ResultSet rs = stmt.executeQuery(sql); // 处理结果集 while (rs.next()) { // 获取数据 int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); // 显示数据 System.out.print("ID: " + id); System.out.print(", Name: " + name); System.out.println(", Age: " + age); } rs.close(); // 执行插入 System.out.println("Inserting records into the table..."); sql = "INSERT INTO users (name, age) VALUES ('Tom', 25)"; stmt.executeUpdate(sql); // 执行更新 System.out.println("Updating records in the table..."); sql = "UPDATE users SET age = 26 WHERE name = 'Tom'"; stmt.executeUpdate(sql); // 执行删除 System.out.println("Deleting records from the table..."); sql = "DELETE FROM users WHERE name = 'Tom'"; stmt.executeUpdate(sql); // 再次查询 System.out.println("Querying the table again..."); sql = "SELECT id, name, age FROM users"; rs = stmt.executeQuery(sql); // 处理结果集 while (rs.next()) { // 获取数据 int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); // 显示数据 System.out.print("ID: " + id); System.out.print(", Name: " + name); System.out.println(", Age: " + age); } rs.close(); // 关闭资源 stmt.close(); conn.close(); } catch (SQLException se) { // 处理 JDBC 错误 se.printStackTrace(); } catch (Exception e) { // 处理 Class.forName 错误 e.printStackTrace(); } finally { // 关闭资源 try { if (stmt != null) stmt.close(); } catch (SQLException se2) { } // 什么都不做 try { if (conn != null) conn.close(); } catch (SQLException se) { se.printStackTrace(); } } System.out.println("Goodbye!"); } } ``` 以上示例代码演示了使用 JDBC 连接数据库,并执行查询、插入、更新和删除操作。需要注意的是,需要在代码中替换数据库连接地址、用户名和密码,以及编写对应的 SQL 语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值