目录
一、实验目的
- 熟悉使用JDBC来进行数据库应用程序的设计
- 熟悉通过JDBC接口编程访问数据库并对数据库进行操作
二、实验内容
创建一个名为Books的数据库,并在其中建立一个名为book_message的表,字段包括书名、作者、出版社、出版时间和价格。编写一个应用程序,实现对该数据库中数据的添加、修改、删除和查询功能。
源代码:
实验运行截图:
三、实验小结
1、JDBC是java程序用来连接数据库的一种机制,由连接数据库的各种类构成。
2、java程序连接各种数据库系统只是连接方式上有所不同,连接和操作所使用的类的方法都是一样的。MySql为例其步骤如下:
2.1首先从数据库官网上下载java程序用来连接数据库的驱动程序即连接器(*.jar),并将其导入到程序项目中。
2.2使用Class.ForName(“com.mysql.cj.jdbc.Driver”)方法加载数据库驱动程序。
2.3DriverManager.getConnection(“jdbc:mysql://IP地址:端口号/数据库名?user=用户名&password=密码&useSSL=true&serverTimezone=GMT&characterEncoding=utf-8”)方法获取Connection类的连接对象如con。
2.4使用con.createStatement(int type, int concurrency)方法获取Statement类的语句对象如stmt。其中type形参用来决定在查询结果集中游标的滚动方法,concurrency形参用来决定是否可以用查询得到的结果集来更新(修改)数据库中的表。其中type的取值如下:
- ResultSet.TYPE_FORWORD_ONLY: 结果集的游标只能向下移动。
- ResultSet.TYPE_SCROLL_INSENSITIVE: 结果集游标可以随意移动,数据库数据发生变化,结果集中的数据不变。
- ResultSet.TYPE_SCROLL_SENSITIVE: 结果集游标可以随意移动,数据库数据发生变化,结果集中的数据同步变化(*经测试发现,不起作用! 但有的文献说只对修改字段值起作用)。
concurrency的取值如下:
-
ResultSet.CONCUR_READ_ONLY: 结果集是只读的,不能通过修改结果集中的数据来更新数据中数据(不能用结果集来修改数据库表中的数据)。
-
ResultSet.CONCUR_UPDATABLE: 可以通过对结果集字段值的修改来修改对应数据库表中的该字段(可以通过结果集来修改表中的数据)。
2.5然后使用stmt.executeQuery(sql)方法执行查询语句返回ResultSet类的结果集对象,使用while(next())循环可遍历结果集中的每行记录。使用stmt.execUpdate(sql)方法来执行增删改语句并返回受影响的整形行数。
说明:
- 结果集对象使用rs.getXxx(列号|字段名)方法获取该行指定字段列的值。rs.getString(列号|字段名)方法不管该字段的值是何种数据类型都可以被转化为字符串的形式输出。
- 结果集对象使用rs.getMetaData()可以获取当前结果集ResultSetMetaData类的元数据对象如metaData。然后元数据对象调用metaData.getColumnCount()获取结果集的总列数。metaData.getColumnCount(int i)获取结果集指定索引的列名。
3、默认情况下,查询得到的结果集对象游标在第一行之前并不在第一行记录上,可以使用方法来移动游标的位置(游标类似于文件指针,游标指向某行只能获取某行各字段的值)如:
rs.next()-------游标向下移动一行,如果移动到了最后行之后或首行之前则返回false。
rs.absolute(int row)------将游标移动到指定的行记录,如果移动到首行之前或最后行之后则返回false。
rs.beforeFirst()---------将游标移动到首行之前。
rs.afterLast()------------将游标移动到最后行之后。
rs.getRow()---------获取游标当前指向的行号,第一条记录行号就是1,依次类推。
4、预处理语句就将普通的sql语句编译处理成数据库系统能够直接执行的底层指令,然后在交给数据库系统进行处理,以此来提高sql语句的执行效率。其使用步骤如下:
- con.prepareStatement(String sql)方法将普通sql语句编译成底层sql指令并将其保存在PreparedStatement类的对象中如prestmt。
- 然后就可以使用prestmt.executeQuery()方法执行查询操作;prestmt.executeUpdate()方法执行增删改操作。
说明:在sql参数中可以使用英文的”?”通配符来代替字段的值,只要在执行数据库操作之前给定通配符具体的值就可以如:prestmt.setXxx(1,value)等。从左到右第一个”?”号就是1,以此类推。
5、事务就是为了完成某项需求而组成的sql语句的集合。事务处理要么事务中的sql语句全部执行成功、要么全部都不执行。其步骤如下:
- 连接对象使用setAutoCommint(false)方法关闭自动提交模式(使对数据库的操作不会立刻生效)
- 连接对象使用commit()方法提交事务(使前面事务对数据库的操作立即生效)
- 使用try-catch()语句块来处理事务在提交过程中执行失败(即在catch中连接对象调用rollback()方法撤销前面事务所做的所有对数据库受影响的操作类似于撤销)。
@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!