1.java database connection java数据库链接
首先导入相关jar包mysql-connector-java-5.1.36.jar
1)在项目下创建一个lib文件夹,再将下载好的mysql-connector-java-5.1.36.jar放入改文件夹下
2)右键lib,点击Add as Library…
**2.创建一个自己的数据库,本次实验中创建数据库为user,创建一张表为userinfo。**如图
期间发生了一个小插曲,由于我的数据库版本太低,导致连接的时候报错。数据库是mysql,目前似乎MySQL5.5这样的版本比较稳定,各大软件的兼容性较好。
由于增删改查均需要在连接数据库的情况下进行,因此数据库链接是通用的步骤。
另外,由于进行数据库操作后,为了防止数据库不能及时关闭影响性能,我们将数据库的关闭程序放入finally语句中。这个也是通用步骤
!!!因此将数据库连接和数据库的关闭方法都封装在until包中
public static Connection DBcon(){
Connection connection=null;
PreparedStatement statement=null;
try{
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建连接
connection = DriverManager.getConnection
("jdbc:mysql://127.0.0.1:3305/user?useSSL=true&" +
"characterEncoding=utf-8&user=" +
"root&password=1234");
}catch(Exception e){
e.printStackTrace();
}finally {
return connection;
}
}
1)其中第一点加载驱动是固定写法,mysql、Oracle等都有各自的写法。我的数据库是MySQL。
2)第二点创建连接,jdbc:mysql://后面那串地址是本地数据库的地址,端口号一般默认为3306,但是我采用的是3305端口,这个按照自己的来。
地址后面的user是自己要连接数据库的名字;user=root中的root是我连接数据库的用户名,password=1234中的1234是我数据库的密码(这三点都根据实际情况来即可)
2.数据库关闭
public static void CloseDB( Connection connection,PreparedStatement statement,ResultSet rs){
if(rs!=null){
try {
rs.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();
}
}
System.out.println("已关闭数据库服务!");
}
这个没有什么技巧,根据判断需要关闭的把它关闭即可
!!!注意到这两个方法都是static方法,是由于DBunitl这个类并没有实际涵义,为了调用时不用老是创建该类的对象,于是将其写成静态方法以方便调用
为了更好的封装和操作数据库,我们将数据表与实体类相关联。此处定义了实体类UserInfo与数据表userinfo相对应
package com.zhongruan.bean;
public class UserInfo {
private int id;
private String name;
private String password;
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "user{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
DAO层,Data Access Object,专门用来封装我们对于实体类的数据库的访问,就是增删改查,不加业务逻辑。
文件结构如下,我们定义dao,并定义userinfodao类
注意先初始化自己的数据库。
1.查找
/查询数据库,返回所有表中所有记录
public List findall(){
List list=new ArrayList<>();
Connection connection=null;
PreparedStatement statement=null;
ResultSet rs=null;
try {
connection = DBuntil.DBcon();
System.out.println("创建连接成功");
//3.写sql
String sql="select * from userinfo";
//4.得到statement对象
statement = connection.prepareStatement(sql);
//5.执行sql得到结果集
rs = statement.executeQuery();
//6.处理结果集
while (rs.next()){
UserInfo userInfo=new UserInfo();
userInfo.setId(rs.getInt(1));
userInfo.setName(rs.getString(2));
userInfo.setPassword(rs.getString(3));
list.add(userInfo);
}
//7.关闭资源
} catch (Exception e) {
e.printStackTrace();
}finally {
DBuntil.CloseDB(connection,statement,rs);
}
return list;
}
2.增加
//插入记录
public static void insert(){
Connection connection=null;
PreparedStatement statement=null;
//1.连接数据库
try {
connection = DBuntil.DBcon();
System.out.println("创建连接成功");
//2.写sql
String sql="insert into userinfo(name,password) values (?,?)";
statement=connection.prepareStatement(sql);
statement.setString(1,"xiaoming");
statement.setString(2,"123456");
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBuntil.CloseDB(connection,statement,null);
}
}
3.修改
//修改更新记录
public static void update(){
Connection connection=null;
PreparedStatement statement=null;
try {
connection=DBuntil.DBcon();
String sql="update userinfo set name=?,password=? where id=?";
statement=connection.prepareStatement(sql);
statement.setString(1,"gyx");
statement.setString(2,"666");
statement.setInt(3,2);
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBuntil.CloseDB(connection,statement,null);
}
}
4.删除
//删除记录
public static void delete(){
Connection connection=null;
PreparedStatement statement=null;
try {
connection=DBuntil.DBcon();
String sql="delete from userinfo where id=3";
statement=connection.prepareStatement(sql);
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DBuntil.CloseDB(connection,statement,null);
}
}
package com.zhongruan;
import com.until.DBuntil;
import com.zhongruan.bean.UserInfo;
import com.zhongruan.dao.UserInfoDao;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) throws SQLException {
UserInfoDao userInfoDao=new UserInfoDao();
//查
List list=userInfoDao.findall();
System.out.println(list);
//增
userInfoDao.insert();
List list1=userInfoDao.findall();
System.out.println(list1);
//改
userInfoDao.update();
List list2=userInfoDao.findall();
System.out.println(list2);
//删
userInfoDao.delete();
List list3=userInfoDao.findall();
System.out.println(list3);
}
}
可以根据需要注释掉,一个个单独测试。