JDBC的增删改查
今天是实习的第二天,我学了JDBC的增删改查,现在做个笔记留作纪念。
数据库的创建与设置
数据库这里,我使用的mysql-5.5.58版本,直接用公司发的安装包下载,安装到自己的电脑上。
创建一个second数据库(本应该是JDBC数据库,为了自己使用方便命名为second)
创建成功后,右键表,创建新表,数据格式如下图所示
自己在表中添加数据
至此,数据库部分初步设置完成。
IDEA代码的编写
我们常用的JDBC接口和类都在java.sql包中。
Connection接口、Statement接口、PreparedStatement接口、DriverManager类以及ResultSet接口是这次用到的。
Connection接口代表与特定的数据库的连接,在连接上下文中进行SQL语句并返回结果。
Statement接口用于已经建立连接的基础上向数据发送SQL语句。在JDBC中有3种Statement对象,分别是Statement、PreparedStatement和CallableStatement。Statement用于执行不带参数的简单的SQL语句;PreparedStatement继承了Statement,用来执行动态的SQL语句;CallableStatement继承了PreparedStatement,用于执行对数据库存储的过程中的调用。
PreparedStatement接口用来动态地执行SQL语句。通过PreparedStatement实例执行的动态的SQL语句,将被预编译并保存到PreparedStatement实例中,从而可以实现反复执行SQL语句。当向数据库发送一个SQL语句,数据库中的SQL解释器负责把SQL语句生成底层的内部命令,然后执行该命令,完成相关的数据操作。如果不断的向数据库提交SQL语句,肯定会增加数据库中SQL解释器的负担,影响执行速度。
DriverManager类用来管理数据库中的所有驱动程序。他是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动程序之间建立联系。通过getConnection(String url,String user,String password)方法建立连接。
ResultSet接口类似于临时表,用来暂时存放数据库查询操作所获得的结果集。ResultSet的实例具有指向当前数据行的指针,指针开始的位置在第一条记录的前面,通过next()方法可将指针向下移。
接下来的重点就是IDEA里面编写相关的实现代码了。
JDBC的工作流程有以下7个步骤:
- 加载驱动
- 创建连接
- 写sql
- 得到statement对象
- 执行sql,得到结果集
- 处理结果集
- 关闭资源
1、加载驱动
在主函数中声明
ResultSet resultSet = null;
PreparedStatement statement =null;
Connection connection = null;
给定初值为null。
2、创建连接
try{
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/second?useSSL=true&characterEncoding=utf-8&user=root&password=xiaoli0312");
System.out.println("创建连接成功"); //提示连接成功
}
//mysql的地址根据自己电脑确定,second是我自己的数据库名称,使用其他数据库可以对应修改;password是安装mysql时设置的密码,根据个人情况而定。
3-6部分将分为查询、添加、删除、更改四个部分叙述:
查询:
写sql语句,用于选择user表,然后得到数据,将数据显示到处理页
//3.写SQL
String sql="select * from user";
//4.得到statement对象
statement = connection.prepareStatement(sql);
//5.执行sql,得到结果集
resultSet = statement.executeQuery();
//6.处理结果集
while(resultSet.next()){
System.out.println(resultSet.getInt(1));
System.out.println(resultSet.getString(2));
System.out.println(resultSet.getString(3));
}
增加
我是添加一个username为zhangyi,密码为53573的新用户,ID通过mysql自增自动生成。
//3.写sql
String sql = "insert into user(username,password)values(?,?)";
//4.得到statement对象
statement = connection.prepareStatement(sql);
statement.setString(1,"zhangyi");
statement.setString(2,"53573");
statement.executeUpdate();
删除
将ID为2的对象删除
//3.写sql
String sql = "delete from user where id = ?";
//4.得到statement对象
statement = connection.prepareStatement(sql);
statement.setInt(1,2);
statement.executeUpdate();
得到的结果为
证明已经删除完成
更改
我的是将ID为1的信息的username改成zhangqi
//3.写sql
String sql = "update user set username = ? where id = ?";
//4.得到statement对象
statement = connection.prepareStatement(sql);
statement.setString(1,"zhangqi");
statement.setInt(2,1);
statement.executeUpdate();
结果如下:
上面代码中的“?”都是留给下面自己按需输入对应值的。
7、关闭资源
对于不同的功能,分别关闭相对应的定义了的资源。
在查询中,因为初始化了connection、statement、resultset三个变量,所以需要全部关闭,另外三个功能只有statement和connection两个,所以只需要将if(resultSet!=null){……}里面的内容删去即可
finally {
if (resultSet!=null) {
try {
resultSet.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
if (statement!=null){
try{
statement.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
if (connection!=null){
try{
connection.close();
}catch (SQLException e) {
e.printStackTrace();
}
}
以上就是实习第二天所做的全部事情了。
参考文档:
https://blog.csdn.net/SSY_1992/article/details/88355481