数据库操作
《零基础学Java》
-
数据库操作
-
数据库基础
数据库是一种存储结构,允许使用各种格式 输入、处理、检索 数据,且不用在每次需要数据时重新输入数据。
-
select 语句:
select语句用于查询数据表中的数据。
select 语句 语法:
select 所选字段列表 from 数据表名 where 条件表达式 group by 字段名 having 条件表达式 order by 字段名
-
insert 语句:
insert语句用于向数据表中插入新数据。
insert 语句 语法:
insert into 表名[(字段1) , (字段2)] valuse(属性值1 , 属性值2)
-
update 语句:
update语句用于修改数据表中的数据。
update 语句 语法:
update 数据表名 set 字段名 = 新的字段值 where 条件表达式
-
delete 语句:
delete语句用于删除数据表中的数据。
delete 语句 语法:
delete from 数据表名 where 条件表达式
-
-
连接数据库
访问数据库的步骤:首先加载驱动程序(仅需要在第一次访问数据库时加载一次),然后每次访问数据时创建一个Connection对象,然后接着执行SQL语句,最后完成数据库操作后,依次销毁前面所创建的Connection对象、释放数据的链接。
连接数据库 实例:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Demo { public static void main(String[] args) { try { Class.forName("com.mysql.cj.jdbc.Driver");// 加载数据库驱动 String url = "jdbc:mysql://127.0.0.1:3306/java_learn";// 数据库地址 String userName = "root";// 数据库用户名 String passord = "asd123";// 数据库密码 Connection con = DriverManager.getConnection(url,userName,passord);// 连接数据库 System.out.println(con); con.close();// 关闭数据库 } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); } } }
-
数据查询
数据的查询主要通过 Statement接口(执行SQL语句) 和 ResultSet接口(存储查询结果) 实现。
Statement接口中的方法:
方法 介绍 next(); 指针向下一行。 first(); 指针回到第一行。 last(); 指针回到最后一行。 ResultSet接口中的方法:
返回类型:
getInt();
getDouble();
getString();
getObject();
重载方法:
getString(String 列名);
getString(int 第几列);
数据查询 实例:
import java.sql.*; public class Demo1 { public static void main(String[] args) { Connection connection = null;// 声明Connection对象(连接接口) Statement statement = null;// 声明Statement对象(发送SQL接口) ResultSet resultSet = null;// 声明ResultSet对象(结果集接口) try { Class.forName("com.mysql.cj.jdbc.Driver");// 加载驱动程序 connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java_learn", "root", "asd123");// 与数据库连接 statement = connection.createStatement();// 创建Statement对象 resultSet = statement.executeQuery("select * from java_learn.java_1433");// 执行SQL语句 while (resultSet.next()) {// 判断resultSet有没有下一行 int id = resultSet.getInt("id");// 获取列名为id的值 String name = resultSet.getString(2);// 获取第2列的值 String sex = resultSet.getString("sex");// 获取列名为sex的值 String birthday = resultSet.getString(4);// 获取第4列的值 System.out.println("编号=" + id + " 姓名=" + name + " 性别=" + sex + " 生日=" + birthday); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); } finally {// 依次关闭数据库连接资源 if (resultSet != null) { try { resultSet.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(); } } } } }
-
动态查询
在程序中不断向数据库发送 SQL语句 ,会增加数据库中 SQL解释器 的负担,从而降低 SQL语句 的执行速度。为了解决这个问题,可以使用 Connection对象 的 prepareStatement(String sql)方法 对 SQL语句 进行预处理 , 将这个命令封装在 PreparedStatement对象 中,再通关调用 PreparedStatement对象 的对应方法执行底层的命令,就可以减轻SQL解释器的负担。
在SQL进行预处理时,可以使用 通配符 " ? " 来代替任何值:
PreparedStatement preparedStatement = connection.prepareStatement("select * from java_learn.java_1434 where name = ?"); preparedStatement.setString(1,"name");
动态查询 实例:
import java.sql.*; public class Demo2 { public static void main(String[] args) { Connection connection = null;// 声明Connection对象(连接接口) try { Class.forName("com.mysql.cj.jdbc.Driver");// 加载驱动程序 connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java_learn", "root", "asd123");// 与数据库连接 String sql = "select * from java_learn.java_1434 where name like ? and id = ?";// SQL语句 PreparedStatement preparedStatement = connection.prepareStatement(sql);// 执行SQL语句 preparedStatement.setString(1,"小%"); preparedStatement.setInt(2,1);// 将数据库中id为1的值返回给第二个通配符 ResultSet resultSet = preparedStatement.executeQuery(); System.out.println("id\tname"); while (resultSet.next()){ System.out.println(resultSet.getInt(2)+"\t"+resultSet.getString(1)); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); } finally {// 依次关闭数据库连接资源 if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
-
添加、修改、删除记录
Java中可以通过 PreparedStatement对象 动态地对数据表中原有数据进行修改操作,并通过 executeUpdate()方法 进行更新语句的操作。
添加、修改、删除记录 实例:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class Demo3 { public static void main(String[] args) { Connection connection = null; Statement statement = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/java_learn","root","asd123"); statement = connection.createStatement(); // region 插入数据 String sql1 = "insert into java_learn.java_1435(id,name) values('12','大明')";// 插入id,name (id:12、name:大明) int result1 = statement.executeUpdate(sql1);// 执行修改权限的SQL System.out.println("有多少行记录被修改:"+result1); // endregion // region 修改数据 String sql2 = "update java_learn.java_1435 set name = '中明' where id = 12";// 修改 id为12 的 name为中明 int result2 = statement.executeUpdate(sql2); System.out.println("有多少行记录被修改:"+result2); // endregion // region 删除数据 String sql3 = "delete from java_learn.java_1435 where id = 12";// 删除id为12的值(整一行) int result3 = statement.executeUpdate(sql3); System.out.println("有多少行记录被修改:"+result3); // endregion } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException throwables) { throwables.printStackTrace(); }finally { if(statement!=null){ try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }