数据库我们使用的管理软件是SQLyog,连接本地数据库的方法在上一篇中已经使用过,在此处不在赘述。我们首先建立一个user数据库,将其基字符集选择utf8,数据库排序规则选择utf8_general_ci。
之后在user数据库里面建立一张userinfo的表,引擎为InnoDB,字符集为utf8,核对为utf8_general_ci。表中有id,username,password三个字段,数据类型分别为int,varchar,varchar。将id作为主键,并且设置为自增。
创建好表之后,我们可以向里面添加一些初始的数据,至此数据库操作就完成了。
在使用java操作数据库的过程中,不可以直接操作,而是需要有以下几个过程来实现对数据库的实时操作。
1、加载驱动
2、创建连接
3、写sql
4、得到statement对象
5、执行sql得到结果集
6、处理结果集
7、关闭资源
打开IntelliJ IDEA软件,一路点击next按键,创建一个新项目。
我们需要在项目的根目录创建一个lib文件夹,将mysql-connector-java-5.1.36.jar这个jar包放入其中,这时候jar包还没有导入到项目,因此我们需要右击jar包,选择Add as Library,就可以将jar包添加到项目中。
在项目src下,我们创建我们的zhongruan文件夹,里面就是我们所需要的工作目录,在zhongruan中,有四个类,,一个bean类,一个dao类,一个util类,一个Test类。Test类包含有程序的入口函数。bean类是一些实体类,在这里包含有数据的实体类,如id、username、password以及它们的get与set函数、tostring函数。dao类中主要是有关数据库的增删查改的操作,我们将所有的操作从Test中以面向对象的方法实现在dao类中。util类主要是工具类,在我们此个项目中是用来连接数据库。
项目结构如下所示:
我们的项目中存在DBUtil类,用来实现与数据库的连接,因为在查询数据库,添加数据库等都需要与本地数据库连接,所以我们直接将其封装为一个对象,在需要连接的时候直接调用。
package zhongruan.util;
import java.sql.*;
public class DBUtil {
public static Connection getConnetction(){
Connection connection = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useSSL=true&characterEncoding=utf-8&user=root&password=123");
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
public static void close(ResultSet rs, Statement statement, Connection connection){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
我们项目中有UserInfo这一bean类,其中划分了属性,get与set,tostring和构造方法这四种。
package zhongruan.bean;
public class UserInfo {
private int id;
private String username;
private String password; //属性
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//get set方法
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
//tostring方法
}
dao类主要用来实现数据库的增添查改的功能,将每一个功能全都封装为一个对象,在使用的时候只需要调用UserInfoDao里面的实例即可。
查询数据由于每次只能获取一条,在获取下一条时就会将上一条覆盖,所以我们使用一个数组来储存每次获取到的UserInfo信息。
package zhongruan.dao;
import zhongruan.bean.UserInfo;
import zhongruan.util.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class UserInfoDao {
public List<UserInfo> findAll(){ //查询
ResultSet rs = null;
PreparedStatement statement = null;
Connection connection = null;
List<UserInfo> list = new ArrayList<>();
try {
connection = DBUtil.getConnetction();
String sql="select * from userinfo";
statement = connection.prepareStatement(sql);
rs = statement.executeQuery();
while (rs.next()){ //查询获取数据并且将其添加到一个数组中
UserInfo userInfo = new UserInfo();
userInfo.setId(rs.getInt(1));
userInfo.setUsername(rs.getString(2));
userInfo.setPassword(rs.getString(3));
list.add(userInfo);
}
} catch (Exception e){
e.printStackTrace();
} finally {
DBUtil.close(rs, statement, connection);
}
return list;
}
public void addInfo(){ //添加数据
PreparedStatement statement = null;
Connection connection = null;
try {
connection = DBUtil.getConnetction();
String sql1="insert into userinfo(username, password) values (?,?)";
statement = connection.prepareStatement(sql1);
statement.setString(1, "mk");
statement.setString(2, "mk");
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtil.close(null, statement, connection);
}
}
public void deleteInfo(){ //删除数据
PreparedStatement statement = null;
Connection connection = null;
try {
connection = DBUtil.getConnetction();
String sql2="delete from userinfo where username='mk'";
statement = connection.prepareStatement(sql2);
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtil.close(null, statement, connection);
}
}
public void refreshInfo(){ //更新数据
PreparedStatement statement = null;
Connection connection = null;
try {
connection = DBUtil.getConnetction();
String sql3="update userinfo set password = 'news' where username = 'qw'";
statement = connection.prepareStatement(sql3);
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBUtil.close(null, statement, connection);
}
}
}
在Test类中为函数的入口,其中实现具体功能的调用。
package zhongruan;
import zhongruan.dao.UserInfoDao;
public class Test {
public static void main(String[] args){
UserInfoDao userInfoDao = new UserInfoDao();
System.out.println("查询数据");
System.out.println(userInfoDao.findAll());
userInfoDao.addInfo(); //add user information
System.out.println("添加数据");
System.out.println(userInfoDao.findAll());
userInfoDao.deleteInfo(); //delete user information
System.out.println("删除数据");
System.out.println(userInfoDao.findAll());
userInfoDao.refreshInfo(); //refresh the user data from the database
System.out.println("更新数据");
System.out.println(userInfoDao.findAll());
}
}