**原生JDBC与预处理对象preparedStament*

本文介绍了如何使用原生JDBC进行数据的插入、更新和删除操作,并强调了在处理中文乱码时的注意事项。此外,文章还详细讲解了PreparedStatement的使用,包括其优势在于使用占位符提高SQL安全性及效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC的插入,删除,更新数据的方式类似,只需修改一下sql语句
@Test
public void testJDBC2() throws SQLException, ClassNotFoundException {
/**

  1. JDBC 实现的步骤
  2. JDBC 完成 记录的插⼊
  3. 1.注册驱动
  4. 2.获得连接
  5. 3.获得执⾏sql语句的对象
  6. 4.执⾏sql语句, 并返回结果
  7. 5.处理结果
  8. 6.释放资源
  9. 注意: 若插⼊中⽂出现乱码, 请设置编码
    ?useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
    /
    @Test
    public void testJDBC2() throws SQLException, ClassNotFoundException {
    /
    *
  10. JDBC 完成 记录的插⼊
  11. 1.注册驱动
  12. 2.获得连接
  13. 3.获得执⾏sql语句的对象
  14. 4.执⾏sql语句, 并返回结果
  15. 5.处理结果
  16. 6.释放资源
  17. 注意: 若插⼊中⽂出现乱码, 请设置编码
    ?useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai
    /
    Class.forName(“com.mysql.jdbc.Driver”);
    String url = “jdbc:mysql://localhost:3306/mydb?
    useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai”;
    Connection conn = DriverManager.getConnection(url, “root”,
    “root”);
    Statement stat = conn.createStatement();
    String sql = “insert into category(cname) values(‘测试’)”;
    int result = stat.executeUpdate(sql);
    System.out.println("result = " + result);
    stat.close();
    conn.close();
    }
    更新数据:String sql = “update category set cname=‘测试2’ where cid=4”;
    删除数据:String sql = “delete from category where cid=4”;
    查询:查询不一样的地方
    String sql = “select * from category where cid = 3”;
    ResultSet rs = stat.executeQuery(sql);
    (遍历可以采用while循环的方式)
    if (rs.next()) {
    int cid = rs.getInt(“cid”);
    String cname = rs.getString(“cname”);
    System.out.println("cid = " + cid + ",cname = " +cname);
    } else {
    System.out.println(“数据没有查到”);
    }
    rs.close();
    优化的工具类的方式
    先编写一个jdbc.properties配置⽂件
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mydb?
    useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    jdbc.user=root
    jdbc.password=root
    (名称可以自己随便起)
    编写工具类
    public class JDBCUtils {
    private static String driver;
    private static String url;
    private static String user;
    private static String password;
    static {
    try {
    //使⽤类加载器, 读取配置⽂件
    InputStream is =
    JDBCUtils2.class.getClassLoader().getResourceAsStream(“jdbc.properties”);
    Properties prop = new Properties();
    prop.load(is);
    driver = prop.getProperty(“jdbc.driver”);
    url = prop.getProperty(“jdbc.url”);
    user = prop.getProperty(“jdbc.user”);
    password = prop.getProperty(“jdbc.password”);
    //注册驱动
    Class.forName(driver);
    } catch (IOException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }
    /
    *
  18. 返回连接对象 Connection
    /
    public static Connection getConnection() throws SQLException {
    Connection conn = DriverManager.getConnection(url, user, password);
    return conn;
    }
    /
    *
  19. 释放资源
    /
    public static void close(ResultSet rs, Statement stat, Connection
    conn) throws SQLException {
    if (rs != null) {
    rs.close();
    }
    if (stat != null) {
    stat.close();
    }
    //看Connection来⾃哪⾥, 如果Connection是从连接池⾥⾯获得的, close()⽅法其
    实是归还; 如果Connection是创建的, 就是销毁
    if (conn != null) {
    conn.close();
    }
    }
    }
    使用工具类实现查询
    @Test
    public void testJDBC6() throws SQLException {
    /
    *
  20. 使⽤JDBC⼯具类, 完成查询所有分类
  21. 1.通过JDBC⼯具类, 获得连接
  22. 2.获得执⾏sql语句的对象
  23. 3.执⾏sql语句, 并返回结果
  24. 4.处理结果
  25. 5.释放资源
    */
    Connection conn = JDBCUtils.getConnection();
    Statement stat = conn.createStatement();
    ResultSet rs = stat.executeQuery(“select * from category”);
    while (rs.next()) {
    int cid = rs.getInt(“cid”);
    String cname = rs.getString(“cname”);
    System.out.println("cid = " + cid + ",cname = " + cname);
    }
    JDBCUtils.close(rs, stat, conn);
    }
    增加,删除,修改的方法与上面的原始jdbc类似,
    int result= stat.executeUpdate(sql语句);
    增加的语句:insert into 表名(键)values (值)
    修改的语句:update 表名 set 值 where 条件:
    删除的语句:delete from 表名 where 条件
    更新数据:String sql = “update category set cname=‘测试2’ where cid=4”;
    删除数据:String sql = “delete from category where cid=4”;
    PreparedStatement(实际主要使用这种方式)
    不同之处在于使用占位符?给定格式,再赋值
    String sql = “select * from users where username=? and
    password=?”;

    **
  26. PreparedStatement pstat = conn.prepareStatement(sql);

**
pstat.setString(1,“admin”);
pstat.setString(2,“1234”);

其余内容与一样
//查询操作
@Test
public void jdbcTest() throws SQLException {
//1.通过⼯具类 获取 Connection对象
Connection conn = JDBCUtils.getConnection();
//2.创建 ⽤于执⾏sql语句的对象 PreparedStatement , 同时指定sql语句
String sql = “select * from users where username=? and
password=?”;
PreparedStatement pstat = conn.prepareStatement(sql);
//3.为sql语句中的 每个? 号 赋值
pstat.setString(1,“admin”);
pstat.setString(2,“1234”);
//4.执⾏sql语句
ResultSet rs = pstat.executeQuery();
//5.处理 执⾏sql语句后的 结果
while(rs.next()){
int uid = rs.getInt(“uid”);
String username = rs.getString(“username”);
String password = rs.getString(“password”);
System.out.println(uid + "== " + username + " === " +
password);
}
//6.释放资源
JDBCUtils.close(rs, pstat, conn);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值