(三)数据库篇:增删改等操作的封装,小白的学习之路第3步

增删改等操作的封装

一、准备工作数据库。

首先我们先在mysql中建立一个first的数据库,并建立一张表。建表语句如下:

create table `tb_user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

二、实现JDBC。

新建一个项目jdbc1,建立一个com.dao.UserDao类,并建立一个addUser方法。下面我们通过jdbc连接数据,并执行一条插入语句,在数据库中插入一个新的用户。根据上一节讲的步骤一步一步完成。

前提条件:导入相关的驱动包。

因为我们现在连接的是mysql数据库,所以我们应该改mysql的驱动包,导入项目中。mysql的jdbc驱动包,大家可以上网查询并下载。这方面的资料非常多。

步骤一、加载JDBC驱动程序:

在连接数据库之前,首先要通过反射技术加载想要连接的数据库的驱动到Java虚拟机,这通过java.lang.Class类的forName静态方法forName(String className)实现。

public void addUser(String userName) {
try {
// 1、通过反射加载驱动。
Class.forName("com.mysql.jdbc.Driver");

//继续操作...

} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

步骤二、创建数据库的连接

要操作数据库,首先必须要先连接数据库,使用java.sql.DriverManager获得一个Connection连接对象,该对象就代表一个数据库的连接。

使用DriverManager的getConnectin(String url,String username,String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。用户名和密码直接写上就可以了,关键是连接数据库的路径,不同数据库的写法是不一样的。

连接URL定义了连接数据库时的协议、子协议、数据源标识。

书写形式:协议:子协议:数据源标识

  • 协议:在JDBC中总是以jdbc开始
  • 子协议:是桥连接的驱动程序或是数据库管理系统名称。
  • 数据源标识:标记找到数据库来源的地址与连接端口。

例如MySql的连接URL如下:

jdbc:mysql://localhost:3306/myDB?useUnicode=true&characterEncoding=utf8。表示连接的数据库是myDB,地址是localhost,端口是3306,一般连接mysql还需要指定编码,这是使用的是utf8编码。

接着上面的代码实现,获得一个Connection对象,实现代码如下:

// 1、通过反射加载驱动。
Class.forName("com.mysql.jdbc.Driver");
// 2、通过驱动管理类建立一个连接 不同数据url写法是不同 ip端口 数据
Connection connection = DriverManager.getConnection(
"jdbc:mysql://192.168.11.144/first?useUnicode=true&characterEncoding=utf8","root", "123456");

步骤三、创建一个Statement。

要执行SQL语句,还必须获得java.sql.Statement实例,Statement实例分为以下3种类型:

  • 执行静态SQL语句。通常通过Statement实例实现。
  • 执行动态SQL语句。通常通过PreparedStatement实例实现。
  • 执行数据库存储过程。通常通过CallableStatement实例实现。
这里我们先使用Statement对接即可。实现代码如下:
//3、通过Connect建立Statement
Statement statement=connection.createStatement();

步骤四、执行SQL语句

要执行sql语句一般需要使用两个方法即可:executeQuery 、executeUpdate。其中executeQuery用户查询操作,而增删改等更新数据库的操作都是使用executeUpdate,这里我们要插入一行数据,所以先使用executeUpdate就可以了。有关查询操作,我们下一节再讲解。

(1)ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。

(2)int executeUpdate(String sqlString):用于执行insert、update或delete语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等,其返回值是返回影响行数。一般执行失败影响行数就为0。

这里我们需要插入一条数据,实现代码如下:

//先定义sql语句。
String sql="insert into tb_user(user_name) values('"+userName+"')";
//受影响的行数
int result= statement.executeUpdate(sql);
if(result>0){
System.out.println("执行成功");
}else{
System.out.println("执行失败");
}

步骤五、释放连接资源

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:

  1. 关闭ResultSet对象,如果有就关闭。
  2. 关闭Statement
  3. 关闭Connection连接对象
//5、释放资源。
statement.close();
connection.close();

三、实现删除和修改操作

有了上面的操作基础,事实上有关数据库的更新操作都是这个步骤的,仅仅是执行的sql语句不同而已,增删改操作我们可以很快实现了,完成参考代码如下:

public void addUser(String userName) {
try {
// 1、通过反射加载驱动。
Class.forName("com.mysql.jdbc.Driver");
// 2、通过驱动管理类建立一个连接 不同数据url写法是不同 ip端口 数据
Connection connection = DriverManager.getConnection(
"jdbc:mysql://192.168.11.144/first?useUnicode=true&characterEncoding=utf8","root", "123456");
// 3、通过Connect建立Statement
Statement statement = connection.createStatement();
// 4、通过Statement执行sql语句
String sql = "insert into tb_user(user_name) values('" + userName + "')";
// 受影响的行数
int result = statement.executeUpdate(sql);
if (result > 0) {
System.out.println("执行成功");
} else {
System.out.println("执行失败");
}
// 5、释放资源。
statement.close();
connection.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 根据用户id删除数据
public void delUser(int uid) {
try {
// 1、通过反射加载驱动。
Class.forName("com.mysql.jdbc.Driver");
// 2、通过驱动管理类建立一个连接 不同数据url写法是不同 ip端口 数据
Connection connection = DriverManager.getConnection(
"jdbc:mysql://192.168.11.144/first?useUnicode=true&characterEncoding=utf8","root", "123456");
// 3、通过Connect建立Statement
Statement statement = connection.createStatement();
// 4、通过Statement执行sql语句
String sql = "delete from tb_user where user_id=" + uid;
// 受影响的行数
int result = statement.executeUpdate(sql);
if (result > 0) {
System.out.println("执行成功");
} else {
System.out.println("执行失败");
}
// 5、释放资源。
statement.close();
connection.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 根据用户id,更新用户名称
public void updateUser(int uid, String userName) {
try {
// 1、通过反射加载驱动。
Class.forName("com.mysql.jdbc.Driver");
// 2、通过驱动管理类建立一个连接 不同数据url写法是不同 ip端口 数据
Connection connection = DriverManager.getConnection(
"jdbc:mysql://192.168.11.144/first?useUnicode=true&characterEncoding=utf8","root", "123456");
// 3、通过Connect建立Statement
Statement statement = connection.createStatement();
// 4、通过Statement执行sql语句
String sql = "update tb_user set user_name='" + userName
+ "' where user_id=" + uid;
// 受影响的行数
int result = statement.executeUpdate(sql);
if (result > 0) {
System.out.println("执行成功");
} else {
System.out.println("执行失败");
}
// 5、释放资源。
statement.close();
connection.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

后台 私我 01 面肥拿走,,,记得 转发或评论 一下 就好,谢谢支持95后的码农

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();