Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。 客户端操作 MySQL 数据库的方式:
使用第三方客户端来访问 MySQL:SQLyog、Navicat 等使用 MySQL 自带的命令行客户端方式通过 Java 来访问 MySQL 数据库快速入门:
导入驱动的jar包 复制 jar 到项目的 libs 目录下;右键–>Add As Library注册驱动(DriverManager类)(操作数据库还需要具体的实现类,也就是数据库驱动。) public class Driver extends NonRegisteringDriver implements java.sql.Driver{ static{ try{ java.sql.DriverManager.registerDriver(new Driver()); }catch(SQLException E){ throw new RuntimeException("Can't register driver!"); } } public Driver() throws SQLException{ } }省略写:Class.forName("com.mysql.cj.jdbc.Driver");
获取数据库连接对象Connection接口(创建Satement或PrepareSatement对象) DriverManager 类中的静态方法 Connection getConnection (String url, String user, String password); connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/teng?serverTimezone=Asia/Shanghai","root", "123456"); 定义sql语句获取执行sql语句执行对象Statement creatStatement():创建向数据库发送 sql 的 statement 对象。 prepareStatement():创建向数据库发送预编译 sql 的 PrepareSatement 对象。 (对于Statement和PrepareStatement区别见另外一篇https://blog.csdn.net/Outengteng/article/details/108207681)执行 sql,接受返回结果 执行: Statement 接口 executeQuery(String sql) :用于向数据发送查询语句。 executeUpdate(String sql):用于向数据库发送 insert、update 或delete 语句。 返回结果: ResultSet(Jdbc 程序中的 ResultSet 用于代表 SQL 语句的执行结果。Resultset 封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。) getObject/String(int index): getObject/String(string columnName):任意数据类型/指定数据类型 next():移动到下一行 previous():移动到前一行 absolute(int row):移动到指定行 beforeFirst():移动 resultSet 的最前面。 afterLast():移动到 resultSet 的最后面。处理结果关闭资源 先开后关 public class JDBCDemo01 { public static void main(String[] args) { List<Emp> list = new ArrayList<Emp>(); Connection connection = null; Statement statement = null; ResultSet rs = null; try { //注册驱动 //com.mysql.cj.jdbc.Driver Class.forName("com.mysql.cj.jdbc.Driver"); //获取连接对象 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/teng?serverTimezone=Asia/Shanghai","root", "123456"); if (connection != null) { System.out.println("连接成功!"); } //操作sql语句---Statement对象 statement = connection.createStatement(); //查询 //String sql = "select * from emp"; String sql = "select * from emp where deptno = 10"; //添加 //String updatesql = "insert into emp values(1,'张三','学生',8888,'2020-08-21 10:53',8000,2500,10)"; //execute(String sql) -- boolean //System.out.println(statement.execute(sql)); //获取查询结果 executeQuery //ResultSet 结果集 接口 rs = statement.executeQuery(sql); /*int count = statement.executeUpdate(updatesql); System.out.println(count);*/ //jdbc 数据类型与 mysql 数据库类型进行对应 while (rs.next()) { //rs.getInt(columnIndex); /*int empno = rs.getInt(1); String ename = rs.getString(2); String job = rs.getString(3); int mgp = rs.getInt(4); Date hiredate = rs.getDate(5); double sal = rs.getDouble(6); double comm = rs.getDouble(7); int deptno = rs.getInt(8);*/ //rs.getInt(columnLabel); 通过字段名访问 int empno = rs.getInt("empno"); String ename = rs.getString("ename"); String job = rs.getString("job"); int mgp = rs.getInt("mgp"); Date hiredate = rs.getDate("hiredate"); double sal = rs.getDouble("sal"); double comm = rs.getDouble("comm"); int deptno = rs.getInt("deptno"); System.out.println(empno + "\t" + ename + "\t" + job + "\t" + mgp + "\t" + hiredate + "\t" + sal + "\t" + comm + "\t" + deptno); Emp emp = new Emp(empno, ename, job, mgp, hiredate, sal, comm, deptno); list.add(emp); //list.add(rs); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { 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(); } } } for (Object emp : list) { System.out.println(emp); } } }通过配置文件(db.properties)获取属性值:
Properties properties = new Properties(); properties.load(new FileInputStream("src/db.properties")); DRIVER = properties.getProperty("driver"); URL = properties.getProperty("url"); USERNAME = properties.getProperty("user"); PASSWORD = properties.getProperty("password"); Class.forName(DRIVER); connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);另外也可以将 JDBC 一些常用操作给提取出,形成JDBCUtil工具类:
public class JDBCUtil { private static String driver; private static String url; private static String user; private static String password; static { try { //创建Properties集合类 Properties pro = new Properties(); //获取src路径下文件的方式 ClassLoader classLoader = JDBCUtil.class.getClassLoader(); URL res = classLoader.getResource("db.properties"); String path = res.getPath(); //加载文件 pro.load(new FileReader(path)); //获取数据 值 driver = pro.getProperty("driver"); url = pro.getProperty("url"); user = pro.getProperty("user"); password = pro.getProperty("password"); //注册驱动 Class.forName(driver); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } /** * 获取连接 * @return Connection连接对象 * @throws SQLException */ public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, user, password); } /** * 释放资源 * @param rs * @param st * @param conn */ public static void close(ResultSet rs, Statement st, Connection conn) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (st != null) { try { st.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }