码迷,mamicode.com
首页 > 数据库 > 详细

JDBC基本知识

时间:2017-05-19 22:16:02      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:into   cat   获取数据   cti   trace   优点   ace   取数   set   

JDBC对数据库操作的六个基本步骤:
    //1.注册数据库驱动
            
    //2.获取数据库连接

    //3.获取传输器对象

    //4.利用传输器传输SQL到数据库执行,获取结果集对象
        
    //5.遍历结果集,获取结果数据

    //6.关闭资源(这里低层是将连接还回数据源中)

 

Statement和PreparedStatement都可以作为执行sql语句的传输器。它们存在父子关系;PreparedStatement是Statement 父级。
在使用Statement传输器时容易被用户输入sql关键字后导致后台sql被破坏,即sql注入攻击。安全性并不高。


PreparedStatement优点:
            (1)可以防止sql注入攻击, 采用预编译机制, 先将sql语句的主干发送数据库, 数据库编译后就确定了sql语句的语意, 如果后面参数中再包含sql关键字或者是特殊字符, 也只会当作普通的字符来处理!!!
            (2)通过方法来设置参数, 省去了拼接sql语句的麻烦.
            (3)能够尽最大可能来提高效率. PreparedStatement发送的sql语句编译后就被数据库缓存下来了, 再次执行时, 如果和缓存中的匹配就会使用缓存中的语句, 不再编译, 直接执行. statement发送的sql语句是先拼接好再发送给数据库, 由于参数不同整条sql语句也就不同, 所以每次都需要编译.

Statement对数据库的增删查改:

增加数据:

 1 public static void add(Connection conn,Statement stat,ResultSet rs){
 2         try {
 3             //注册mysql驱动
 4             Class.forName("com.mysql.jdbc.Driver");
 5             //建立连接
 6             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1","root","admin");
 7             //创建传输器
 8             stat = conn.createStatement();
 9             //操作数据
10             int rows = stat.executeUpdate("insert into account values(null,‘张三‘,88888888)");
11             System.out.println("添加了"+rows+"条");
12         } catch (Exception e) {
13             e.printStackTrace();
14         }finally{
15             JDBCutils.closeResou(conn, stat,rs);
16         }
17     }

查看数据:

 1 public static void check(Connection conn,Statement stat,ResultSet rs){
 2         
 3         try {
 4             //注册mysql驱动
 5             Class.forName("com.mysql.jdbc.Driver");
 6             //建立连接
 7             conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1","root","admin");
 8             //创建传输器
 9             stat = conn.createStatement();
10             //操作数据
11             rs = stat.executeQuery("select name 名字 from account where money = 500;");
12             while(rs.next()){
13                 System.out.println(rs.getString("名字"));
14             }
15             
16         } catch (SQLException e) {
17             e.printStackTrace();
18         }finally{
19             JDBCutils.closeResou(conn, stat, rs);
20         }
21         
22     }

PreparedStatement对数据的增删查改:

增加数据:

public static void add(Connection conn,PreparedStatement ps){
        //注册驱动
        try {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            
            Class.forName("com.mysql.jdbc.Driver");
            
            conn = DriverManager.getConnection("jdbc:mysql:///mydb1","root","admin");
            
            String sql = "insert into account values(null,?,?) ";
            
            ps = conn.prepareStatement(sql);
            
            ps.setString(1, "李达康");
            
            ps.setDouble(2, 1000);
            
            int rows = ps.executeUpdate();
            
            System.out.println("添加了:"+rows);
            
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException();
        }finally{
            JDBCutils.closeResou(conn, ps, null);
        }
    }

删除数据:

public static void del(Connection conn,PreparedStatement ps){
        
        try {
            Connection conn = null;
            
            PreparedStatement ps = null;
            
            ResultSet rs = null;
            
            Class.forName("com.mysql.jdbc.Driver");
            
            conn = DriverManager.getConnection("jdbc:mysql:///mydb1","root","admin");
            
            String sql="delete from account where id=?";
            
            ps = conn.prepareStatement(sql);
            
            ps.setInt(1, 10);
            
            int rows = ps.executeUpdate();
            
            System.out.println("删除了"+rows);
            
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            JDBCutils.closeResou(conn, ps, null);
        }
        
    }

查数据:

public static void check(Connection conn,PreparedStatement ps,ResultSet rs){
        try {
            Connection conn = null;
            
            PreparedStatement ps = null;
            
            ResultSet rs = null;
            
            Class.forName("com.mysql.jdbc.Driver");
            
            conn = DriverManager.getConnection("jdbc:mysql:///mydb1","root","admin");
            
            String sql="select id from account where name=?";
            
            ps = conn.prepareStatement(sql);
            
            ps.setString(1,"童旭平");
            
            rs = ps.executeQuery();
            
            while(rs.next()){
                
                System.out.println(rs.getInt("id"));
                
            }
            
        } catch (Exception e) {
            e.printStackTrace();
            
        }finally{
            JDBCutils.closeResou(conn, ps, rs);
        }
    }
    

 

JDBC基本知识

标签:into   cat   获取数据   cti   trace   优点   ace   取数   set   

原文地址:http://www.cnblogs.com/tongxuping/p/6880288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!