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

Posted yuwenS.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
        }
    }
}

以上是关于JDBC连接数据库(详细步骤)的主要内容,如果未能解决你的问题,请参考以下文章

c与数据库连接的详细步骤

JSP中使用JDBC连接MySQL数据库的详细步骤

怎么用sqlserver连接远程数据库,详细步骤,谢谢各位

JDBC连接数据库详细教程指南

JDBC连接数据库的7个步骤

详细解析java JDBC实现增删改查