数据库实验IDEA编程Java程序实现连接数据库以及增删改查JDBC

IDEA编程Java程序实现连接数据库以及增删改查JDBC

IDEA的mysql环境配置建议参考该博客:戳我

我用的是java11和此博客的配置略有出入,不过一般的问题都可以百度解决

这是我实验用的数据库
在这里插入图片描述

完整项目的结构,共5个类,1个配置文件
不使用配置文件可直接跳到1.DBUtil类
在这里插入图片描述

下面是我的代码

0.配置文件database.properties及读取类Config

database.properties
src文件夹下new->ResoureceBundle,文件名设置为database即可
具体可参考:IDEA配置文件

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf-8
user=root
pwd=你的密码

Config类

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Config {
    Properties properties=new Properties();
    InputStream is=null;
    private static Config config=null;
    private Config(){
        is=Config.class.getClassLoader().getResourceAsStream("database.properties");
        try {
            properties.load(is);
            is.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    public synchronized static Config getInstance(){
        if(config==null){
            config=new Config();
        }
        return config;
    }
    public String getValue(String key){
        return properties.getProperty(key);
    }
}

1.连接mysql数据库的类DBUtil

要测试是否连接成功,再随便搞一个类写个Main方法调用就可以了,或者在下一个类中测试
1.不使用配置文件的方法

import java.sql.*;
public class DBUtil {
    public static String username="root";
    public static String password="你的密码";
    public static PreparedStatement pstm=null;
    protected static Connection con=null;

    private static String url="jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf-8";
    public static Connection getConn(){

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            con=DriverManager.getConnection(url,username,password);
            System.out.println("连接成功");
        }catch (Exception e){
            e.printStackTrace();
        }
        return con;
    }
    public PreparedStatement getPs(){
        return pstm;
    }

    public void closeCon(ResultSet rs,PreparedStatement pstm,Connection con) throws Exception{
        if(rs!=null){
            rs.close();
        }
        if(pstm!=null){
            pstm.close();
        }
        if(con!=null){
            con.close();
        }
    }
}


2.使用配置文件的方法

import java.sql.*;
public class DBUtil {
    public static String username=Config.getInstance().getValue("user");
    public static String password=Config.getInstance().getValue("pwd");
    public static PreparedStatement pstm=null;
    protected static Connection con=null;

    private static String url=Config.getInstance().getValue("url");
    public static Connection getConn(){

        try {
            Class.forName(Config.getInstance().getValue("driver"));
            con=DriverManager.getConnection(url,username,password);
            System.out.println("连接成功");
        }catch (Exception e){
            e.printStackTrace();
        }
        return con;
    }
    public PreparedStatement getPs(){
        return pstm;
    }

    public void closeCon(ResultSet rs,PreparedStatement pstm,Connection con) throws Exception{
        if(rs!=null){
            rs.close();
        }
        if(pstm!=null){
            pstm.close();
        }
        if(con!=null){
            con.close();
        }
    }
}

2.数据表中的数据User类

我java学的不是很好,大概就这个意思哈
因为id我设置的是自增的,所以构造函数里没写id

public class User {
    int id;
    String username;
    String pwd;

    public User(String username, String pwd) {
        User.this.username=username;
        User.this.pwd=pwd;
    }
}

3.实现增删改查函数的Lab3类

这里封装的不是很好,可以把tablename再改进一下
强烈建议使用prepareStatement,但要注意占位符会给变量加上引号,所以有些地方不适合用占位符?
注意:查找的结果集ResultSet需要单独释放

可以先写个增加的函数浅试一下,再继续写其他三个

import java.sql.*;
public class Lab3 {

    static DBUtil db=new DBUtil();
    protected static PreparedStatement pstm=db.getPs();;
    protected static Connection con= db.getConn();
//    protected static ResultSet rs=null;

    //增
    public static void insertU(User newUser,String tableName) throws Exception{
        String sql_insert="insert into "+tableName+"(username,pwd) values(?,?)";
//        System.out.print(newUser.username);
        //state.executeUpdate(sql_insert);
        pstm=con.prepareStatement(sql_insert);
        pstm.setString(1,newUser.username);
        pstm.setString(2,newUser.pwd);
        int r=pstm.executeUpdate();
        System.out.println("插入成功");
    }
    //删
    public static void deleteU(int id,String tableName) throws Exception{
        PreparedStatement pstm=null;
        String sql_delete="delete from "+tableName+" where id="+Integer.toString(id);
        pstm=con.prepareStatement(sql_delete);
        int r=pstm.executeUpdate();
        System.out.println("删除成功");
    }
    //改
    public static void updateU(int id,User uUser,String tableName)throws Exception{
        String sql_update="update "+tableName+" set username=?,pwd=? where id="+Integer.toString(id);
        pstm=con.prepareStatement(sql_update);
        pstm.setString(1,uUser.username);
        pstm.setString(2,uUser.pwd);
        int r=pstm.executeUpdate();
        System.out.println("修改成功");
    }
    //查
    public static void selectU(int id_begin,int id_end,String tabele_name)throws Exception{
        String sql_update="select username,pwd from "+tabele_name+" where id between "+id_begin+" and "+id_end;
        pstm=con.prepareStatement(sql_update);
        ResultSet rs=pstm.executeQuery(sql_update);
        while (rs.next()){
            System.out.println(rs.getString(1)+" "+rs.getString(2));
        }
        System.out.println("查询成功");
        db.closeCon(rs,pstm,con);
    }
    public static void closeDB(){
        try {
            db.closeCon(null,pstm,con);
            System.out.println("关闭");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

4.主函数MainDB类

因为一直到写完增加之前我都不知道我到底会写个什么出来,所以类名都起的很随意。。

public class MainDB {
    public static void main(String[] args) throws Exception {
    	DBUtil db1=new DBUtil();
        User user1=new User("test3","1234567");
        User user2=new User("update","218808");
        Lab3 lab3=new Lab3();
        lab3.insertU(user1,"lab");
        lab3.deleteU(6,"test");
        lab3.updateU(3,user2,"test");
        lab3.selectU(2,4,"test");
        lab3.closeDB();
    }
}


参考资料:
https://blog.youkuaiyun.com/qq_36528734/article/details/93646928?spm=1001.2014.3001.5502
https://blog.youkuaiyun.com/weixin_34111790/article/details/93307147?spm=1001.2014.3001.5502
https://blog.youkuaiyun.com/qq_40356457/article/details/83057215?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164965554316780274155343%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164965554316780274155343&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-2-83057215.142v7pc_search_result_cache,157v4control&utm_term=IDEA%E6%95%B0%E6%8D%AE%E5%BA%93%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&spm=1018.2226.3001.4187

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值