JDBC(使用JDBC对数据库进行增删改查)
JDBC(使用JDBC对数据库进行增删改查)
statement对象
在java中要完成对数据的增加、删除、改动和查看,就需要通过statement对象向数据库发送增删改差语句。statement对象在JDBC三种就是用于向数据库发送SQL语句。
statement对象的executeUpdate方法可以向数据库发送增、删、改语句,执行之后返回数据库中发生改动行数的整数。
-
代码实现使用executeUpdate(String sql)方法完成数据添加操作;
Connection conn = DriverManager.getConnection(url, user, password); Statement st = conn.createStatement(); String sql = "insert into user(….) values(…..) "; int num = st.executeUpdate(sql); if(num>0){System.out.println("插入成功!!!");}
-
代码实现使用executeUpdate(String sql)方法完成数据修改操作;
Connection conn = DriverManager.getConnection(url, user, password); Statement st = conn.createStatement(); String sql = "update user set name=‘’ where name=‘’"; int num = st.executeUpdate(sql); if(num>0){System.out.println("修改成功!!!");}
-
代码实现使用executeUpdate(String sql)方法完成数据删除操作;
Connection conn = DriverManager.getConnection(url, user, password); Statement st = conn.createStatement(); String sql = "delete from user where id=1; int num = st.executeUpdate(sql); if(num>0){System.out.println("删除成功!!!");}
statement对象的executeQuery方法可以向数据库发送查询语句,执行后返回代表查询结果的ResultSet对象。
-
代码实现使用executeQuery(String sql)方法完成数据查询操作;
Connection conn = DriverManager.getConnection(url, user, password); Statement st = conn.createStatement(); ResultSet res = sta.executeQuery( "select Studentno,StudentName,Sex,GradeId from student"); while(rs.next()){//根据获取列的数据类型,分别调用rs的相应方法映射到java对象中,如: System.out.println(res.getObject("Studentno")); System.out.println(res.getObject("StudentName")); System.out.println(res.getObject("Sex")); System.out.println(res.getObject("GradeId")); }
使用java编写JdbcUtils工具类
-
在mysql中创建一个数据库,新建数据表
create database `school`; use `school`; create table `student`( `id` int primary key, `name` varchar(40), `password` varchar(40), `email` varchar(60), `birthday` date );
-
新建web项目,导入MySQL数据库驱动;
-
创建db.properties文件,在db.properties中编写MySQL数据库的连接信息;
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/school user=root password=123456
-
编写一个JdbcUtils工具类,用于连接数据库,获取数据库连接和释放数据库连接;
package com.david.utils; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; 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{ //读取db.properties文件中的数据库连接信息 InputStream in=JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"); Properties prop = new Properties(); prop.load(in); //获取数据库连接驱动 driver = prop.getProperty("driver"); //获取数据库连接URL地址 url = prop.getProperty("url"); //获取数据库连接用户名 username = prop.getProperty("username"); //获取数据库连接密码 password = prop.getProperty("password"); //加载数据库驱动 Class.forName(driver); }catch (Exception e) { throw new ExceptionInInitializerError(e); } } public static Connection getConnection() throws SQLException{ return DriverManager.getConnection(url, username,password); } public static void release(Connection conn,Statement st,ResultSet rs{ if(rs!=null){ try{ //关闭存储查询结果的ResultSet对象 rs.close(); }catch (Exception e) { e.printStackTrace(); } rs = null; } if(st!=null){ try{ //关闭负责执行SQL命令的Statement对象 st.close(); }catch (Exception e) { e.printStackTrace(); } } if(conn!=null){ try{ //关闭Connection数据库连接对象 conn.close(); }catch (Exception e) { e.printStackTrace(); } } } }
-
利用工具类中的方法和statement对象进行增删改查
import org.junit.Test; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; public class JdbcCRUDByStatement { @Test public void insert(){ Connection conn = null; Statement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); st = conn.createStatement(); String sql = "insert into student(id,name,password,email,birthday) values(4,'jack','12','[email protected]','1998-02-20')"; int num = st.executeUpdate(sql); if(num>0){ System.out.println("插入完成"); } }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); }} @Test public void delete(){ Connection conn = null; Statement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = "delete from student where id=4"; st = conn.createStatement(); int num = st.executeUpdate(sql); if(num>0){ System.out.println("删除完成"); } }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); } @Test public void update(){ Connection conn = null; Statement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = "update student set name='David',email='[email protected]' where id=10"; st = conn.createStatement(); int num = st.executeUpdate(sql); if(num>0){ System.out.println("更新完成"); } } }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); } } @Test public void find(){ Connection conn = null; Statement st = null; ResultSet rs = null; try{ conn = JdbcUtils.getConnection(); String sql = "select * from student where id=10"; st = conn.createStatement(); rs = st.executeQuery(sql); if(rs.next()){ System.out.println(rs.getString("name")); } }catch (Exception e) { e.printStackTrace(); }finally{ JdbcUtils.release(conn, st, rs); } } }
PreparedStatement对象
PreperedStatement是Statement的子类,它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象而言PreperedStatement类可以避免SQL注入的问题。Statement会使数据库频繁编译SQL,有些情况下会造成数据库缓冲区溢出。PreparedStatement可对SQL进行预编译,提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。
推荐阅读
-
java使用DOM对XML文档进行增删改查操作实例代码
-
AngularJS中如何使用$http对MongoLab数据表进行增删改查
-
可编辑树Ztree的使用(包括对后台数据库的增删改查)
-
jdbc连接sql server2017进行简单的增、删、改、查操作
-
jsp+servlet+jdbc实现对数据库的增删改查
-
Java通过JDBC连接数据库的三种方式!!!并对数据库实现增删改查
-
asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行
-
Nano Framework之添加H2数据库并使用JDBC进行持久层开发
-
java JDBC连接数据库 实现数据的增删改查
-
使用IDEA对Oracle数据库进行简单增删改查操作