应用程序不能直接连接数据库,需要通过数据库驱动进行连接,JDBC 就是 sun 公司为了简化开发人员的对数据库统一的操作,提供了一个 Java 操作数据库的规范,也就是 JDBC
下载 jdbc 包,版本自己选择
链接: https://mvnrepository.com/artifact/mysql/mysql-connector-java
1、创建测试数据库和Java普通项目
2、导入数据库驱动
新建一个 lib 目录将 .jar 拷贝到lib 目录中右击选择 add as library3、编写测试连接
package jdbc; import java.sql.*; /** * @Title: * @Package * @Description: 我的第一个 jdbc 程序 * @author: maze * @date 2020/11/11上午 10:37 */ public class test1 { public static void main(String[] args) throws ClassNotFoundException, SQLException { //1.加载驱动 Class.forName("com.mysql.jdbc.Driver"); // 固定写法 //2. 用户连接信息 /* 请注意:不建议在没有服务器身份验证的情况下建立SSL连接。 根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果不设置显式选项,则必须建立默认的SSL连接。 您需要通过设置useSSL=false显式地禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任存储 */ String url = "jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false"; String username = "root"; String password = "123456"; //3,连接成功,数据库对象 Connection connection = DriverManager.getConnection(url, username, password); //4. 执行 SQL 对象 Statement statement = connection.createStatement(); //5. 执行 SQL 对象去执行 SQL,可能存在结果,查看返回结果 String sql ="SELECT * FROM t_student"; ResultSet resultSet = statement.executeQuery(sql); //返回的结果集 // 输出结果 while(resultSet.next()){ System.out.print("id="+resultSet.getObject("stuId")+" "); System.out.print("name="+resultSet.getObject("stuName")+" "); System.out.print("password="+resultSet.getObject("passWord")+" "); System.out.print("gender="+resultSet.getObject("gender")+" "); System.out.println(); } //6. 释放连接 resultSet.close(); statement.close(); connection.close(); } }步骤总结
加载驱动连接数据库 DiverMarager获取执行 SQL 的对象 Stame获得返回的结果集释放连接DriverManager
Class.forName("com.mysql.jdbc.Driver"); Connection connection = DriverManager.getConnection(url, username, password); // connection 代表的是数据库 connection.commit(); // 提交 connection.rollback(); // 回滚 connection.setAutoCommit(); // 自动提交URL
String url = "jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false";statement 执行 SQL 对象
//4. 执行 SQL 对象 Statement statement = connection.createStatement(); //5. 执行 SQL 对象去执行 SQL,可能存在结果,查看返回结果 String sql ="SELECT * FROM t_student"; ResultSet resultSet = statement.executeQuery(sql); //返回的结果集 statement.executeQuery(); //查询操作返回集 statement.executeUpdate(); //更新、插入、删除、都是用这个,返回受影响的行数 statement.execute(); // 执行任何 SQL 语句ResultSet : 查询的结果集,封装了所有的查询结果
获得指定的数据类型
resultSet.getObject(); // 在不知道类型的情况下使用 resultSet.getString(); // resultSet.getInt(); // resultSet.getFloat(); // resultSet.getDate(); //遍历、指针
resultSet.beforeFirst();//移动到最前面 resultSet.afterLast();//移动到最后面 resultSet.next();//移动到下一个数据 resultSet.previous();//移动到前一行 resultSet.absoulte(row);//移动到指定行封装了增删查改接口,对数据库进行操作
package jdbc; import JavaSE.oop.Test; import java.sql.*; /** * @Title: * @Package * @Description: 我的第一个 jdbc 程序 * @author: maze * @date 2020/11/11上午 10:37 */ public class test1 { private String url; private String username; private String password; private Connection connection; // 连接对象 private Statement statement; // 执行对象 // 构造方法 public test1() throws Exception { Class.forName("com.mysql.jdbc.Driver"); // 固定写法 url = "jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false"; username = "root"; password = "123456"; //3,连接成功,数据库对象 connection = DriverManager.getConnection(url, username, password); //4. 执行 SQL 对象 statement = connection.createStatement(); } public static void main(String[] args) throws Exception { // 1.查询 new test1().select(); // 2. 插入信息 new test1().insert("安琪拉","121415hfs","女"); //3. 删除信息, 指定 stuId 号 new test1().delete(14); //4. 修改信息, 指定 stuId 号,进行修改 //new test1().update(7,"叶剑","12896d","男"); } public void update(int id,String name,String password,String gender) throws SQLException { // 1.拼装修改语句 String sql = "UPDATE t_student SET stuName='"+name+"',`password`='"+password+"',gender='"+gender+"' WHERE stuId="+id+";"; //2.发送 sql int num = statement.executeUpdate(sql); //3、处理返回结果 if(num > 0) { System.out.println("修改成功"); } //4、关闭连接资源 statement.close(); connection.close(); } public void delete(int id) throws Exception { // 1.拼装语句 String sql = "DELETE FROM t_student WHERE stuId="+id+";"; //2.发送sql int num = statement.executeUpdate(sql); //3、处理返回结果 if(num > 0) { System.out.println("删除成功"); } //5、关闭连接资源 statement.close(); connection.close(); } // 增加学生信息 public void insert(String name,String password,String gender) throws Exception { // 1.拼装语句 String sql = "INSERT INTO t_student (stuName,`passWord`,gender) VALUES"+ "('"+name+"','"+password+"','"+gender+"');"; //2.操作 sql int num = statement.executeUpdate(sql); //4、处理返回结果 if(num > 0) { System.out.println("添加成功"); } //5、关闭连接资源 statement.close(); connection.close(); } // 查询所有学生信息 public void select() throws Exception{ //1. 执行 SQL 对象去执行 SQL,可能存在结果,查看返回结果 String sql ="SELECT * FROM t_student"; ResultSet resultSet = statement.executeQuery(sql); //返回的结果集 //2.输出结果 while(resultSet.next()){ System.out.print("id="+resultSet.getObject("stuId")+" "); System.out.print("name="+resultSet.getObject("stuName")+" "); System.out.print("password="+resultSet.getObject("passWord")+" "); System.out.print("gender="+resultSet.getObject("gender")+" "); System.out.println(); } //3. 释放连接 resultSet.close(); statement.close(); connection.close(); } }提取工具类其实和封装差不多,封装是把经常写的代码封装到一个类或者方法中,提取工具类是把用户信息写到文件中,然后利用 IO 流去读取信息
步骤1:配置文件 db.properties
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/db-stu?useUnicode=true&characterEncoding=utf-8&useSSL=false username=root password=123456步骤2:封装工具类
package jdbc.utils; import java.io.InputStream; import java.sql.*; import java.util.Properties; /** * @Title: * @Package * @Description: 读取配置文件 db.properties * @author: maze * @date 2020/11/12上午 9:12 */ public class Jdbcutils { private static String driver = null; private static String url = null; private static String username = null; private static String password = null; static{ try{ InputStream inputStream = Jdbcutils.class.getClassLoader().getResourceAsStream("db.properties"); Properties properties = new Properties(); properties.load(inputStream); driver = properties.getProperty("driver"); url = properties.getProperty("url"); username = properties.getProperty("username"); password = properties.getProperty("password"); // 加载驱动 Class.forName(driver); } catch (Exception e) { e.printStackTrace(); } } // 获取链接 public static Connection getConnect() throws SQLException { return DriverManager.getConnection(url, username, password); } // 释放资源 public static void release(Connection co, Statement st, ResultSet rs) throws Exception { if(rs != null) { rs.close(); } if(st != null){ st.close(); } if(co != null){ co.close(); } } }步骤3:测试案例
插入数据
package jdbc.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * @Title: * @Package * @Description: 插入测试 * @author: maze * @date 2020/11/12上午 9:44 */ public class TestInsert { public static void main(String[] args) throws Exception { Connection connection = null; Statement statement = null; ResultSet resultset = null; try{ // 建立连接,获取 sql 执行对象 connection = Jdbcutils.getConnect(); statement = connection.createStatement(); String sql="INSERT INTO t_student(stuName,`passWord`,gender) VALUES ('马泽','312421798','男');"; int num = statement.executeUpdate(sql); if(num > 0){ System.out.println("插入成功"); } else{ System.out.println("插入失败"); } } catch (SQLException throwables) { throwables.printStackTrace(); }finally { Jdbcutils.release(connection,statement,resultset); } } }删除数据
package jdbc.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * @Title: * @Package * @Description: * @author: maze * @date 2020/11/12上午 11:06 */ public class TestDelete { public static void main(String[] args) throws Exception { Connection connection = null; Statement statement = null; ResultSet resultset = null; try{ // 建立连接,获取 sql 执行对象 connection = Jdbcutils.getConnect(); statement = connection.createStatement(); String sql="DELETE FROM t_student WHERE stuId=10"; int num = statement.executeUpdate(sql); if(num > 0){ System.out.println("删除成功"); } else{ System.out.println("删除失败"); } } catch (SQLException throwables) { throwables.printStackTrace(); }finally { Jdbcutils.release(connection,statement,resultset); } } }查询数据
package jdbc.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * @Title: * @Package * @Description: 查询数据库的数据 * @author: maze * @date 2020/11/12上午 11:12 */ public class TestSelect { public static void main(String[] args) throws Exception { Connection connection = null; Statement statement = null; ResultSet resultset = null; try{ // 建立连接,获取 sql 执行对象 connection = Jdbcutils.getConnect(); statement = connection.createStatement(); // 查询语句 String sql ="SELECT * FROM t_student"; ResultSet resultSet = statement.executeQuery(sql); //返回的结果集 // 输出结果 while(resultSet.next()){ System.out.print("id="+resultSet.getObject("stuId")+" "); System.out.print("name="+resultSet.getObject("stuName")+" "); System.out.print("password="+resultSet.getObject("passWord")+" "); System.out.print("gender="+resultSet.getObject("gender")+" "); System.out.println(); } } catch (SQLException throwables) { throwables.printStackTrace(); }finally { Jdbcutils.release(connection,statement,resultset); } } }修改数据
package jdbc.utils; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * @Title: * @Package * @Description: 修改数据库的数据 * @author: maze * @date 2020/11/12下午 14:09 */ public class TestUpdate { public static void main(String[] args) throws Exception { Connection connection = null; Statement statement = null; ResultSet resultset = null; try{ // 建立连接,获取 sql 执行对象 connection = Jdbcutils.getConnect(); statement = connection.createStatement(); String sql = "UPDATE t_student SET stuName='马泽',`password`='fjslk214i',gender='男' WHERE stuId=1"; int num = statement.executeUpdate(sql); if(num > 0){ System.out.println("修改成功"); } else{ System.out.println("修改失败"); } } catch (SQLException throwables) { throwables.printStackTrace(); }finally { Jdbcutils.release(connection,statement,resultset); } } }