JDBC编程知识

这学期在学校学习了一门《Java Web程序设计》,其中就学了JDBC这种组件技术,别的暂且不说,就JDBC的使用,可是背了好久,最后没有考…
所谓JDBC,也就是Java Database Connectivity,就是来连接数据库的。对于使用编程语言来说,把不在IDE里进行SQL的操作转到IDE中完成。
JDBC,用Java程序来连接数据库,并进行相应的操作。

JDBC步骤:
1)加载JDBC驱动类
2)建立JDBC连接
3)执行SQL语句
4)返回执行结果
5)释放连接

这些步骤是在一些JDBC提供的组件下完成的,
DriverManager:加载JDBC驱动类
Connection:建立连接
Statement:执行SQL语句
Resultset:存放操作结果

那,今天就来聊一聊JDBC编程的具体细节过程

0、JDBC编程之前

首先,要下载 mysql-connect-javajar包,并将其导入你的项目中,才可以使用JDBC进行编程。
这里面要注意,这个jar包的版本要跟你的mysql的版本几乎持平,否则会有不可预知的差错。

1、加载JDBC驱动类

使用
Class.forName("com.mysql.jdbc.Driver");
进行数据库的类加载,这个语句表明加载的是MySQL的驱动类。

2、建立数据库连接

语句
Connection connection = DriverManager.getConnection(URL,root,password);
其中的三个参数都是String类型的,
URL:格式,jbdc:mysql://localhost:3306/数据库名;
比如,jdbc:mysql://localhost:3306/test;表明连接的是我的test库。对库进行连接,而不是连接表!
root:账户
password:密码
这三者无误后,就能能连接到数据库啦。

操作一下

public class App {
    static String url = "jdbc:mysql://localhost:3306/test";
    static String root = "root";
    static String password = "123456";
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(url, root, password);
        String sql = "select * from goods where num = 2";
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery(sql);
        /*
        使用预编译
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        ResultSet resultSet1 = preparedStatement.executeQuery();
         */
        while (resultSet.next()) {
             //我查找的是所有行
            String name = resultSet.getString("name");//后面这个name是goods表中的字段名
            String price = resultSet.getString("price");
            String num = resultSet.getString("num");
            String author = resultSet.getString("author");
            System.out.println(name + " " +price + " " + num + " "+ author);
        }
        resultSet.close();
        statement.close();
        connection.close();
        System.out.println("Hello World!");
    }
}

执行结果
在这里插入图片描述

对于其它的一些操作,都是由Connection这个类来完成的。

//设置事务的提交, true->自动提交,false->手动提交
connection.setAutoCommit(true);//设置成自动提交嘛,是的呢。
connection.setSavePoint();
SavePoint t1 = connection.setSavePoint("t1");//设置一个回滚点
connection.commit();//提交事务
connection.rollBack();
connection.rollBack("ti");//回滚
//设置隔离级别
connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
/*
几种隔离级别
Connection.TRANSACTION_READ_UNCOMMITTED,不可提交读
Connection.TRANSACTION_READ_COMMITTED,可提交读
Connection.TRANSACTION_REPEATABLE_READ,可重复读
Connection.TRANSACTION_SERIALIZABLE,可序列化
Connection.TRANSACTION_NONE,无
*/
3&4、执行SQL语句并得到结果(详细)

在我test库下有一张goods表,里面有 int 字段 num
记住这张表的字段顺序
在这里插入图片描述
对于执行SQL语句,有三个类可以进行处理,分别是
StatementPreparedStatementCallableStatement

Statement
普通的执行SQL语句,如

String sql = "select * from goods where num = 2";
Statement state = connection.createStatement();
//得到SQL结果
ResultSet resultSet = state.executeQuery(sql);

这个set是一个集合,它会将我的goods表中符合num = 2的项都返回,通过

while(resultSet.next()){
//我查找的是所有行
String name = resultSet.getString("name");//后面这个name是goods表中的字段名
String price = resultSet.getString("price");
String num = resultSet.getString("num");
String author = resultSet.getString("author");
/*
表明我现在查询了一行数据,当然了,你也可以查找你想知道的字段
*/
}

也可以

while(resultSet.next()){
String name = resultSet.getString(1);//name是goods表中第一个字段
String price = resultSet.getString(2);//第二个字段,price
String num = resultSet.getString(3);//第三个字段,num
String author = resultSet.getString(4);//第四个字段,author
/*
不清楚上面有表,从1开始而不是从0开始
*/
}

PreparedStatement预编译处理,推荐使用
使用预编译的一个好处就是可以解决MySQL注入性问题,所谓SQL注入问题,就是通过用户输入的参数拼接SQL时,通过改变SQL语义来访问数据库获取结果。
即非法攻击数据库,这样是不行的。

String sql = "select * from goods where num = ?";
PreparedStatement pre = connection.prepareStatement(sql);
pre.setString(1,String.valueOf(2));//int 转为 String
//然后再得到结果
ResultSet resultSet = pre.executeQuery();

pre.setString(1,String.valueOf(2)),这个1表示是第一个参数,不是从0开始的,切记!
比如

String sql = "select * from goods where num = ? and author = ?";
PreparedStatement pre = connection.prepareStatement(sql);
pre.setString(1,String.valueOf(2));
pre.setString(2,"许嵩");
//然后再得到结果
ResultSet resultSet = pre.executeQuery();

PreparedStatementStatement,有下面几个优势
a.防止SQL注入
b.执行效率高
PreparedStatement对象会分别将参数和SQL交给MySQL服务器检查,执行前会预编译,在编译期间SQL正确才交给服务器执行,否则直接返回。
c.好康,更加滴优美~

CallableStatement具有回调功能
大家都知道,一般程序是顺序执行的,但是对于具有回调功能的语句,只有被某个条件触发后才能执行。就比如支付时,你在某宝下单,在某某宝完成支付后,某宝才能成功支付。这就属于回调。由此可见回调功能在支付领域应用的比较多。
SQL语句:
在这里插入图片描述

还有一些力所能及的知识:

executeQuery();//返回查询的集合
execute();//返回一个 boolean 类型的结果
executeUpdate();//返回该操作影响的行数
5、释放资源

没得说
按照顺序

resultSet.close();
statement.close();
connection.close();

JDBC相关基础知识介绍完毕 -.-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值