Java JDBC的简单实现

2023-07-20 14:21:19 浏览数 (2)

1、基本jdbc的代码实现

代码语言:javascript复制
/*
   基本jdbc操作
 */

import java.sql.*;

public class JdbcDemo {
    public static final String URL = "jdbc:mysql://localhost:3306/test";
    public static final String USER = "root";
    public static final String PASSWORD = "root";
    public static final String SELECT_SQL = "SELECT * FROM t_order";
    public static final String UPDATE_SQL = "INSERT into t_role VALUES(3,'jiwei','kaishi','')";

    public static void main(String[] args) {
        // 1、导入MySQL或者其他数据库驱动包
        Connection con = null;
        ResultSet rs = null;
        Statement statement = null;

        try {
            // 2、加载驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            // 3、获取数据库连接
           con = DriverManager.getConnection(URL, USER, PASSWORD);
                //自动提交事务改为手动提交
                con.setAutoCommit(false);
            // 4、获取执行sql的小火车-statement对象
           statement = con.createStatement();
                // 预编译的小火车:提前装载sql
                //PreparedStatement pst = con.prepareStatement(SELECT_SQL);
                //pst.executeQuery();
            // 5、执行sql,拿到结果集
            rs = statement.executeQuery(SELECT_SQL);
            //int i = statement.executeUpdate(UPDATE_SQL);
            // 6、遍历结果集,获取数据
            while (rs.next()) {
                System.out.println(rs.getString(1));
                System.out.println(rs.getString(2));
            }
            //提交事务  没问题,提交吧
            con.commit();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            //数据回滚
            if (con !=null){
                try {
                    con.rollback();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }finally {
            // 7、 释放资源,后调用的先关闭;关闭之前先判断对象是否存在
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (statement != null) {
                try {
                    statement.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
}

2、内置Api一览

连接对象——Connection

客户端与数据库的操作都是基于Connection进行交互的。

代码语言:javascript复制
// 创建运送sql的小火车~
Statement statement = Connection.createStatement();
PreparedStatement pst = con.prepareStatement(SELECT_SQL);

// 事务
con.setAutoCommit(false);
con.commit();// 提交
con.rollback();	// 回滚

小火车——Statement

将sql语句运输到数据库。

代码语言:javascript复制
// 查询
statement.executeQuery(SELECT_SQL)
// 增删改
statement.executeUpdate(UPDATE_SQL)
// 执行
statement.execute(SQL)
// 批处理(导入)
statement.addBatch(); 
statement.executeBatch();
statement.clearBatch();

结果集——ResultSet

ResultSet维护了一个数据行的游标,调用ResultSet.next(),可以让游标指向具体行,获取数据。

(ps:工作时验证,调用ResultSet.next(),结果集中才有数据,而非执行sql时)

代码语言:javascript复制
// 获取指定字段/行的数据
rs.getString(1)//第一个字段
rs.next() //对结果集滚动查看
// 遍历结果集
if 1条数据一下
while 循环遍历多条

3、JDBC的细节

PreparedStatement的优势:

​ 同样是小火车,比Statement的绿皮火车强大多了!

代码语言:javascript复制
1、 Statement编译SQL时,比较古板,变量必须要用分隔符’  ‘隔开,而PreparedStatement可以使用占位符,写起来简单多了;  最关键能够防止SQL注入问题!!!
2、 Statement需要频繁编译SQL,而PreparedStatement可以进行预编译,将SQL存储起来,能极大提升效率;

0 人点赞