1.JDBC连接数据库进行增删改查操作的步骤
1.1加载驱动类 :
有两种写法,
第一种方式: DriverManager.registerDriver(new com.mysql.jdbc.Driver());
第二种方式:Class.forName("com.mysql.jdbc.Driver"); 目前绝大多数人都是教第二种方式,原因就是效率高,稳定。要会第二种方式 第一种方式了解即可而且第一种方式主要try/catch。在第二种方式的时候 驱动包版本比你电脑MySQL的配置高了话,要加cj 。如:Class.forName("com.mysql.cj.jdbc.Driver");
2.获取连接 :
Connection conn=DriverManager.getConnection("jdbc:mysql://(要访问的数据库机IP,访问自己电脑就是localhost)localhost: 数据库端口号/数据库名","数据库账号","数据库密码"); 有的会在数据库名后面加上 serverTimezone=UTC & useUnicode=true & characterEncoding=utf-8 来解决相关的需求serverTimezone=UTC是指定时区时间为世界统一时间。 useUnicode=true 是指是否使用Unicode字符集,赋值为true。 characterEncoding=utf-8 是指顶字符编码格式为UTF8。
3.获取数据库操作对象:
Statement stmt=conn.createStatement();
4.执行sql语句(包括增删改查等)返回结果集。
String sql="select * from 表名"; 将sql语句写成字符串 ResultSet rs=stmt.executeQuery(sql); 将字符串转换成为数据库语言并将查询结果返回。
5.释放资源
conn.close(); stmt.close(); 注意释放资源需要写到finally中,且需要处理异常。
2.JDBC的增删改查
2.1查询操作
上面的操作是连接数据库实现相关功能的基本操作,下面直接上运行代码截图和代码👇👇👇
查询所有数据将并且将username显示出来。
代码
package day1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class jdbcTest { public static void main(String[] args) throws Exception { Connection conn=null; //获取连接 Statement ps=null;//获取对象驱动 ResultSet rs=null; try { Class.forName("com.mysql.jdbc.Driver"); //注册驱动 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8","root","199817");//获取连接(连接数据库) //设置事务隔离级别 conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); //开始事务关闭自动提交机制 以下代码不在自动提交 conn.setAutoCommit(false); //获取数据库操作对象 String sql="select username from tb_user"; ps=conn.prepareStatement(sql); rs=ps.executeQuery(sql); //处理结果集 while(rs.next()) { String enam=rs.getString("username"); //getstring应该跟字符集内的名字 System.out.println(enam); } //执行完成 应该手动提交 conn.commit(); }catch(SQLException e) { System.out.println("出现异常了"); } finally { //释放资源 if(conn!=null) try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(ps!=null) try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } if(rs!=null) try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
2.2更新操作
将李四的密码改为999999的代码和运行成功的结果图
package day1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class jdbcTest { public static void main(String[] args) { Connection conn=null; //获取连接 PreparedStatement ps=null;//获取对象驱动 int rs=0; try { Class.forName("com.mysql.jdbc.Driver"); //注册驱动 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8","root","199817");//获取连接(连接数据库) //开始事务关闭自动提交机制 以下代码不在自动提交 conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); conn.setAutoCommit(false); //获取数据库操作对象 String sql="update tb_user set userpwd=? where username=?"; ps=conn.prepareStatement(sql); //给?赋值 ps.setString(2,"李四"); ps.setString(1,"999999"); //执行sql语句 rs=ps.executeUpdate(); //再次给?赋值 System.out.println(rs); conn.commit(); } catch(Exception e){ //若在以上事务发生异常,则回滚。 if(conn!=null) { try { conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } finally { if(ps!=null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
2.3增加操作
新增账户:小红 密码666666 下面是代码和结果图
package day1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class jdbcTest { public static void main(String[] args) { Connection conn=null; //获取连接 PreparedStatement ps=null;//获取对象驱动 int rs=0; boolean log=false; try { Class.forName("com.mysql.jdbc.Driver"); //注册驱动 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8","root","199817");//获取连接(连接数据库) //开始事务关闭自动提交机制 以下代码不在自动提交 conn.setAutoCommit(false); //获取数据库操作对象 String sql="insert into tb_user(username,userpwd) values(?,?)"; ps=conn.prepareStatement(sql); //给?赋值 ps.setString(1,"小红"); ps.setString(2,"666666"); //执行sql语句 rs =ps.executeUpdate(); System.out.println(rs); //执行完成 应该手动提交 conn.commit(); } catch(Exception e){ //若在以上事务发生异常,则回滚。 if(conn!=null) { try { conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } finally { if(ps!=null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
2.4删除操作
删除李四的账号和密码,下面是代码和运行截图
package day1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class jdbcTest { public static void main(String[] args) { Connection conn=null; //获取连接 PreparedStatement ps=null;//获取对象驱动 int rs=0; boolean log=false; try { Class.forName("com.mysql.jdbc.Driver"); //注册驱动 conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8","root","199817");//获取连接(连接数据库) String sql="delete from tb_user where username=?"; ps=conn.prepareStatement(sql); ps.setString(1,"李四"); //执行sql语句 rs=ps.executeUpdate(); System.out.println(rs); } catch(Exception e){ } finally { if(ps!=null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn!=null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }