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