方法一:

结构:

MySQL数据库和表

表结构:

注:id为自增

数据库配置文件:

drive=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/
database=student
user=root
password=123456

连接数据库jar包

把数据库的连接和关闭抽成一个工具类,这样方便后续的工作:

package com.test;import java.sql.*;
import java.util.Properties;public class JDBCUtil {public static String drive;public static String url;public static String database;public static String user;public static String password;private static Connection cn;static {Properties properties=new Properties();try {properties.load(JDBCUtil.class.getResourceAsStream("jdbc.properties"));drive = properties.getProperty("drive");url = properties.getProperty("url");database = properties.getProperty("database");user = properties.getProperty("user");password = properties.getProperty("password");} catch (Exception e) {e.printStackTrace();}}//连接测试public static Connection connetion(){try {//注册驱动Class.forName(drive);//连接数据库cn= DriverManager.getConnection(url+database,user,password);} catch (Exception e) {e.printStackTrace();}return cn;}//释放资源public static void Rease(Connection cn, Statement st, ResultSet rt){clossCT(cn);clossSM(st);clossRS(rt);}//关闭connection连接public  static void clossCT(Connection connection){if (connection!=null){try {connection.close();} catch (SQLException throwables) {throwables.printStackTrace();}finally {connection=null;}}}//关闭Statement连接public  static void clossSM(Statement st){if (st!=null){try {st.close();} catch (SQLException throwables) {throwables.printStackTrace();}finally {st=null;}}}//关闭ResultSet连接public  static void clossRS(ResultSet rs){if (rs!=null){try {rs.close();} catch (SQLException throwables) {throwables.printStackTrace();}finally {rs=null;}}}
}

对数据库的增删改查弄成一个接口:

package imp;import student.Stu;import java.util.List;public interface update {/***查询所有*/public List<Stu> allStu();/*** 查询单个*/public Stu singleStu(int id);/*** 添加信息*/public void addStu(Stu stu);/*** 更新信息*/public void updateStu(Stu stu);/*** 删除信息*/public void deleteStu(int id);}

实现接口对数据库的相关操作:

package imp;import com.test.JDBCUtil;
import student.Stu;import java.sql.*;
import java.util.ArrayList;
import java.util.List;public class Realize implements update{@Overridepublic List<Stu> allStu() {Connection cn=null;Statement st=null;ResultSet rs=null;List<Stu> stus=new ArrayList<>();try {//连接数据库cn=JDBCUtil.connetion();//获取数据库集合st=cn.createStatement();rs=st.executeQuery("select * from stu");while (rs.next()){Stu stu=new Stu();stu.setId(rs.getInt("id"));stu.setName(rs.getString("name"));stu.setSex(rs.getString("sex"));stu.setGrade(rs.getInt("grade"));stu.setPhoneNumber(rs.getString("phoneNumber"));stus.add(stu);}} catch (Exception throwables) {throwables.printStackTrace();}JDBCUtil.Rease(cn,st,rs);return stus;}@Overridepublic Stu singleStu(int id) {Connection cn=null;Statement st=null;ResultSet rs=null;List<Stu> stus =new ArrayList<>();Stu stu=new Stu();try {//连接数据库cn=JDBCUtil.connetion();//获取数据库集合st =cn.createStatement();String sql="select  * from stu where id='"+id+"'";rs=st.executeQuery(sql);if (rs.next()){stu.setId(rs.getInt("id"));stu.setName(rs.getString("name"));stu.setSex(rs.getString("sex"));stu.setGrade(rs.getInt("grade"));stu.setPhoneNumber(rs.getString("phoneNumber"));}} catch (Exception throwables) {throwables.printStackTrace();}JDBCUtil.Rease(cn,st,rs);return stu;}@Overridepublic void addStu(Stu stu) {Connection cn=null;PreparedStatement pst=null;ResultSet rs=null;try {//cn = JDBCUtil.connetion();//insert into stu() values('d','sd');String sql="insert into stu(name,sex,grade,age,phoneNumber) " + "values(?,?,?,?,?)";//获取数据库集合pst=cn.prepareStatement(sql);pst.setString(1,stu.getName());pst.setString(2,stu.getSex());pst.setInt(3,stu.getGrade());pst.setString(4,stu.getAge());pst.setString(5,stu.getPhoneNumber());int i = pst.executeUpdate();if (i >0) {System.out.println("插入成功");}else{System.out.println("插入失败");}} catch (Exception throwables) {throwables.printStackTrace();}JDBCUtil.Rease(cn,pst,rs);}@Overridepublic void updateStu(Stu stu) {Connection cn=null;PreparedStatement pst=null;ResultSet rs=null;try {//cn = JDBCUtil.connetion();//insert into stu() values('d','sd');String sql="update stu set name =?,sex=?,grade=?,age=?,phoneNumber=? where id=?";//获取数据库集合pst=cn.prepareStatement(sql);pst.setString(1,stu.getName());pst.setString(2,stu.getSex());pst.setInt(3,stu.getGrade());pst.setString(4,stu.getAge());pst.setString(5,stu.getPhoneNumber());pst.setInt(6,stu.getId());int i = pst.executeUpdate();if (i >0) {System.out.println("更新成功");}else{System.out.println("更新失败");}} catch (Exception throwables) {throwables.printStackTrace();}JDBCUtil.Rease(cn,pst,rs);}@Overridepublic void deleteStu(int id) {Connection cn=null;PreparedStatement pst=null;ResultSet rs=null;try {//cn = JDBCUtil.connetion();//insert into stu() values('d','sd');String sql="delete from stu where id=?";//获取数据库集合pst=cn.prepareStatement(sql);pst.setInt(1,id);int i = pst.executeUpdate();if (i >0) {System.out.println("删除成功");}else{System.out.println("删除失败");}} catch (Exception throwables) {throwables.printStackTrace();}JDBCUtil.Rease(cn,pst,rs);}
}

进行一下单元测试:

package imp;import org.junit.Test;
import student.Stu;import java.util.List;public class ReaTest {//查询所有学生信息@Testpublic void getAllStu(){Realize realize=new Realize();List<Stu> stuList = realize.allStu();for (Stu stu1 : stuList) {System.out.println(stu1);}}//查询单个学生信息@Testpublic void getsingleStu(){Realize realize=new Realize();Stu stu = realize.singleStu(3);System.out.println(stu);}//插入学生信息@Testpublic void setAddStu(){Stu stu=new Stu("小景景","男",90,"23","1551585582");Realize realize=new Realize();realize.addStu(stu);}//更改学生信息@Testpublic void  setUpdateStu(){Stu stu=new Stu("小景景景景","男",90,"23","1551585582",12);Realize realize=new Realize();realize.updateStu(stu);}//删除学生信息@Testpublic void setDeleteStu(){Realize realize=new Realize();realize.deleteStu(7);}}

实体类:

package student;public class Stu {private int id;private String name;private String sex;private int grade;private String age;private String phoneNumber;public Stu() {}public Stu( String name, String sex, int grade, String age, String phoneNumber) {this.name = name;this.sex = sex;this.grade = grade;this.age = age;this.phoneNumber = phoneNumber;}public Stu( String name, String sex, int grade, String age, String phoneNumber,int id) {this.id = id;this.name = name;this.sex = sex;this.grade = grade;this.age = age;this.phoneNumber = phoneNumber;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}@Overridepublic String toString() {return "Stu{" +"id=" + id +", name='" + name + '\'' +", sex='" + sex + '\'' +", grade=" + grade +", age='" + age + '\'' +", phoneNumber='" + phoneNumber + '\'' +'}';}
}

相关代码和jar包链接:https://pan.baidu.com/s/1ZzGboMwfCqvOAKJb02b2Ag 提取码:67ua

方法二:

通过连接池进行连接,限制访问数据库的人数:

结构:

连接池jar包:  commons-dbutils-1.3.jar
druid-1.1.9.jar

数据库配置文件:

#<!-- 初始化连接 -->
initialSize=10#最大连接数量
maxActive=50

数据库的连接和关闭也变了:

package com.qidi.utils;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
import java.util.Properties;/*** @author 白世鑫* @title: JdbcUtils* @projectName Tomcat* @description:* @date 2020/8/27  9:42 上午*/
public class JdbcUtils {private static DruidDataSource dataSource;static {try {Properties properties = new Properties();properties.load(JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"));dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {e.printStackTrace();}}/*** 从数据库连接池中获取数据库连接* @return*/public static Connection getConn(){Connection conn = null;try {conn = dataSource.getConnection();} catch (SQLException throwables) {throwables.printStackTrace();}return conn;}/*** 关闭数据库连接*/public static void close(Connection conn){if (conn != null) {try {conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}}}}

连接池自带一些方法可以对数据库的增删改查:

package com.qidi.dao.impl;import com.qidi.utils.JdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;public abstract class BaseDao {private QueryRunner queryRunner = new QueryRunner();/*** 执行 inset update delete 语句的方法* @param sql       要执行的 sql 语句* @param args      要执行的 sql 语句的参数值* @return          受影响的行数*/public int update(String sql,Object... args){Connection conn = JdbcUtils.getConn();try {return queryRunner.update(conn, sql, args);} catch (SQLException throwables) {throwables.printStackTrace();} finally {JdbcUtils.close(conn);}return -1;}/*** 返回查询 JavaBean 的方法* @param type* @param sql       要执行的 sql 语句* @param args      执行的 sql 语句的参数值* @param <T>       返回 JavaBean 的泛型* @return          返回 null 说明查询失败*/public <T>T queryForOne(Class<T> type,String sql,Object... args){Connection conn = JdbcUtils.getConn();try {return queryRunner.query(conn,sql,new BeanHandler<T>(type),args);} catch (SQLException throwables) {throwables.printStackTrace();} finally {JdbcUtils.close(conn);}return null;}/*** 返回多个 JavaBean 的方法* @param type* @param sql* @param args* @param <T>* @return*/public <T>List<T> queryForList(Class<T> type, String sql, Object... args){Connection conn = JdbcUtils.getConn();try {return queryRunner.query(conn,sql,new BeanListHandler<>(type),args);} catch (SQLException throwables) {throwables.printStackTrace();} finally {JdbcUtils.close(conn);}return null;}
}

定义对数据库操作的接口:

package com.qidi.dao;import com.qidi.pojo.User;public interface UserDao {/*** 通过用户名查询用户信息* @param username* @return 如果正常返回,说明用户名已存在,如果返回null,说明用户名可用.*/public User queryByUsername(String username);/*** 通过用户名和密码查询用户信息* @param username* @param password* @return  如果正常返回,说明可以登录,否则登录失败.*/public User queryByUsernameAndPassword(String username,String password);/*** 保存用户信息* @param user* @return  如果返回-1说明保存失败*/public int saveUser(User user);}

实现接口:

package com.qidi.dao.impl;import com.qidi.dao.UserDao;
import com.qidi.pojo.User;public class UserDaoImpl extends BaseDao implements UserDao {@Overridepublic User queryByUsername(String username) {String sql = "select id,username,password,email from t_user where username=?";return queryForOne(User.class, sql, username);}@Overridepublic User queryByUsernameAndPassword(String username, String password) {String sql = "select id,username,password,email from t_user where username=? and password=?";return queryForOne(User.class,sql,username,password);}@Overridepublic int saveUser(User user) {String sql = "insert into t_user(username,password,email) values(?,?,?)";return update(sql,user.getUsername(),user.getPassword(),user.getEmail());}
}

可以通过上面的发现比方法一方便了,很多!

项目  架包分享    架包 在web libs下:链接:https://pan.baidu.com/s/1tGs0Tq2Pi-nx8QAkSGMpCw 提取码:p1re

idea 2020.1 连接MySQL数据库的两种方法相关推荐

  1. c 连接mysql数据库_C++连接mysql数据库的两种方法

    现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用access和sql server比较多.通过网上的一些资料和自己的摸索,大致清楚了C++连接m ...

  2. cad与连接mySQL数据库_C++连接mysql数据库的两种方法

    现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用access和sql server比较多.通过网上的一些资料和自己的摸索,大致清楚了C++连接m ...

  3. cpp 怎么连接mysql_C++连接mysql数据库的两种方法

    现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用access和sql server比较多.通过网上的一些资料和自己的摸索,大致清楚了C++连接m ...

  4. 连接MySQL数据库的两种方式

    连接MySQL数据库的两种方式 一.通过sqlyog连接 二.通过命令行连接数据库: 命令行连接! 1.mysql -u root -p123456 #连接数据库2.update mysql.user ...

  5. mysql+数据库连接标识_新人必看!连接到MySQL数据库的两种方法

    原标题:新人必看!连接到MySQL数据库的两种方法 使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysq ...

  6. 使用VC连接Access数据库的两种方法

    以前的时候用VC写了两种连接Access数据库的方法,为了方便以后查找把这两种方法做一下简单的介绍.Windows平台的数据接口标准有ODBC.OLE DB.ADO和Borland的BDE接口,ODB ...

  7. vb 通过php连接mysql数据库连接_PHP连接MySQL数据库的几种方法

    1.最简单的方式-mysql(面向过程) $con = mysql_connect("localhost","root","password" ...

  8. PHP连接MySQL数据库的几种方法

    1.最简单的方式-mysql(面向过程) <?php $con = mysql_connect("localhost","root","pass ...

  9. java 连接 Access数据库的两种方法

    1:不使用WINDOW的建立数据源方法 直接在JAVA代码内部与Access数据库连接 注意:jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};这里 ...

最新文章

  1. 近900000条if-then关系图谱,让神经网络“懂”常识推理
  2. 建立循环单链表(尾插法)
  3. sfdisk命令的使用技巧
  4. 【Linux基础】 diff命令的参数详解和实例
  5. 在Win7中怎样打开摄像头?
  6. java统计空间占用_JVM —— Java 对象占用空间大小计算
  7. 前端学习(484):html之实体
  8. TextBox只输入数字和event.keyCode的键码值
  9. 自定义filter中配置不被过滤的资源
  10. 链式延迟执行DOME
  11. 计算机社团技术部部长述职报告,社团部长个人工作总结(精选6篇)
  12. java 字符串 字节数组_字符串到字节数组,字节数组到Java中的字符串
  13. 有限域:基本性质和特征
  14. mysql开机启动_MySQL开机自动启动的设置方法
  15. k8s calico 插件错误:Calico node 'node4' is already using the IPv4 address 172.19.0.1.
  16. 我爱淘冲刺阶段站立会议2每天任务3
  17. net start命令的使用
  18. C语言实现简单的电梯控制系统
  19. Cannot create directory: /home/lrh/.vim/view.
  20. 以太坊区块链入门之实现简单DApp开发

热门文章

  1. proteus7.7+Keil2仿真80C51控制流水灯
  2. 华为防火墙区域和地址规划:
  3. Iaas-openstack从入门到精通
  4. 黑苹果无法连接wifi
  5. 程序员代码中的希腊字母表示
  6. 我的 5 年 Android 学习之路,那些年一起踩过的坑
  7. TaintDroid 剖析之 DVM 变量级污点跟踪(下篇)
  8. 微信小程序如何实现搜索功能
  9. View与ViewGroup
  10. Eagle电路板绘制