jdbcAPI
本文最后更新于 196 天前,其中的信息可能已经有所发展或是发生改变。

JDBC的API

1.DriverManager类

2.Connection类

驱动管理类和连接对象


package JDBCTest;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.sql.Statement;
 /*
 API:解析
  */
 public class JDBCTest2 {
     public static void main(String[] args) throws Exception {
         //driverManager类(驱动管理类)
         //1.注册驱动 2.获取数据库连接
         //2.语法---jdbc:mysql://ip地址(域名):端口号/数据库名?参数键值对1&参数键值对2;
         //细节;如果连接是本机的mysql服务器,并且mysql(服务默认端口是3306)则
         //url可以简写为jdbc:mysql:///数据库名称。。。。。;
         /*
         Connection类(连接对象)
         1.执行sql对象 2.管理事物
         普通执行sql对象:statement createStatement();
         预编译sql的执行sql对象:防止sql注入 statement preparedstatement(sql);
         事务管理
          */
         //复习sql事务知识:开启事务:begin/start transaction 提交事务:commit 回滚事务:rollback
         //用异常处理机制用jdbc处理事务问题
         //获取连接
         String url="jdbc:mysql:///xu?useSSL=false";//useSSL=false是取消警告红色
         //xu是数据库名
         String username="root";//用户
         String password="123456";
         Connection conn= DriverManager.getConnection(url,username,password);
         String sql1="update user set money=2000 where username='张三'";
         String sql2="update user set money=3000 where username='李四'";
         Statement stmt=conn.createStatement();
         try {
             //开启事务
             conn.setAutoCommit(false);//手动开启
             int count1=stmt.executeUpdate(sql1);
             System.out.println(count1);
             int b=3/0;//制造异常
             int count2=stmt.executeUpdate(sql2);
             System.out.println(count2);
            //提交事务
            conn.commit();
        } catch (Exception e) {
             //回滚事务
             conn.rollback();
             e.printStackTrace();
        }
         stmt.close();
         conn.close();
         //执行结果:修改的两个数据都没有发生改变,是一个事务。要么都执行成功,要么都执行失败
 
    }
 }

3.statement类

4.resultSet类

 package JDBCTest;
 import java.sql.*;
 public class JDBCTest3 {
     public static void main(String[] args) throws Exception {
         /*
         执行sql语句:
         int executeUpdate(sql);执行DML语句,DDL语句
         返回值:DML语句影响的行数   DDL语句执行后,执行成功也可能返回0
           String sql="create 数据库"
         ResultSet executeQuery(sql):执行DQL语句(查询语句)
         返回值:resultSet 结果集对象--该语句就是封装查询语句查询结果
         resultSet类
         boolean next(); (1)将光标从当前位置向前移动一行 (2) 判断当前行是否为有效行
         true 为有效行(当前行有点数据) false 为无效行
           xxx getxxx();获取数据
           数据类型:int getint(参数); String getstring(参数)
           参数:int :列的编号,从1开始 String :列的名称
           使用步骤:
           while(rs.next()){
           //获取数据; re.getxxx(参数);
           }
          */
         //演示查询语句,并且通过集合的方式打印在控制台
         //获取连接
         String url="jdbc:mysql:///xu?useSSL=false";
         String username="root";
         String password="123456";
         Connection conn= DriverManager.getConnection(url,username,password);
         //定义sql语句
         String sql="select *from user";
         //获取执行sql的对象
         Statement stmt=conn.createStatement();
         //
        ResultSet rs= stmt.executeQuery(sql);//执行语句改变,因为是查询语句,要返回结果集
         //用结果集接收到查询到的sql语句
         while(rs.next()){//判断,遍历所有数据
             String name=rs.getString(1);
                 //String Name=rs.getString("username");,直接写表头文字也可以
             String Password=rs.getString(2);
              int money=rs.getInt(3);
             System.out.println(name);
             System.out.println(Password);
             System.out.println(money);
             System.out.println("-----------------");
        }
         //释放资源
         rs.close();
         stmt.close();
         conn.close();
 //idea快捷键 ctrl+shift+向下  
         移动某一行向下
    }
 }

5.resultSet案例


package JDBCTest;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.Statement;
 import java.util.ArrayList;
 /*
 resultSet案例:
 查询user表,封装为user对象,并且查询获取,存储到ArrayList集合当中去;
  */
 public class JDBCTest4 {
    public static void main(String[] args) throws Exception{
        ArrayList <user> list=new ArrayList<>();
        String url="jdbc:mysql:///xu?useSSL=false";
        String userName="root";
        String passWord="123456";
        Connection conn= DriverManager.getConnection(url,userName,passWord);
        String sql="select *from user";
        Statement stmt=conn.createStatement();
        ResultSet rs=stmt.executeQuery(sql);
        while(rs.next()){
            user u=new user();
            String a=rs.getString(1);
            String b=rs.getString(2);
            int c=rs.getInt(3);
            u.setUsername(a);
            u.setPassword(b);
            u.setMoney(c);
            list.add(u);
 
        }
        System.out.println(list);
        rs.close();
        stmt.close();
        conn.close();
    }
 }
 //user类:
 class user{
    private String username;
    private String Password;
    private int money;
    public user(String username, String password, int money) {
        this.username = username;
        Password = password;
        this.money = money;
    }
    public user() {
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return Password;
    }
    public void setPassword(String password) {
        Password = password;
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }
    @Override
    public String toString() {
        return
                "[" +"username='" + username + '\'' +
                ", Password='" + Password + '\'' +
                ", money=" + money+"]" ;
    }
 }

preparedStatement类

 package JDBCTest;
 import java.sql.*;
 /*
 preparedStatement类:
 作用:通过预编译sql语句并执行,预防sql注入问题
 sql注入:是通过操作输入来修改实现定义好sql语句,以达到执行代码对服务器进行攻击的方法
 防止sql注入问题方法:
 1.获取preparedStatement对象,通过String sql=
 "select *from user where username=?and password=";
 通过Connection对象获取,并传入对应的sql语句
 preparedStatement pstmt=conn.prepareStatement(sql);
 2.设置参数值
 对象:
 setXxx(参数1,参数2):给?赋值
 3.执行sql
 execteUpdate();(这里就不需要传递sql语句)
 preparedStatement类:
 好处 1.性能好 2.防止sql注入,将敏感词字符进行转义
 开启预编译:String url=.......&useserverprestmts=truE
  */
 public class JDBCTest5 {
    public static void main(String[] args) throws Exception{
        /*
        String url="jdbc:mysql:///xu?useSSL=false";
          String username="root";
          String password="123456";
        Connection conn= DriverManager.getConnection(url,username,password);
        //接受用户输入的账户和密码
        String name="张三";
        String word="12346";//最终会登陆失败---密码错误
        String sql="select *from user where username='"+name+"' and password='"+word+"'";
        Statement stmt=conn.createStatement();
        ResultSet rs=stmt.executeQuery(sql);
        if(rs.next()){
            System.out.println("登陆成功");
        }
        else {
            System.out.println("登陆失败");   //快捷键ctrl+shift+下移动某一行向下τ
        }
        rs.next();
        stmt.close();
        conn.close();
          */
        //防止sql注入
        String url="jdbc:mysql:///xu?useSSL=false";
        String username="root";
        String password="123456";
        Connection conn= DriverManager.getConnection(url,username,password);
        //接受用户输入数据
        String name="张三";
        String word="123456";
        //编写sql语句
        String sql="select *from user where username=? and password=? ";
        //获取pstmt对象
        PreparedStatement pstmt=conn.prepareStatement(sql);
        //设置?的值
        pstmt.setString(1,name);
        pstmt.setString(2,word);//这里设置?的值
        //执行sql语句
        ResultSet rs=pstmt.executeQuery();//这里不用传入sql语句
        if(rs.next()){
            System.out.println("登陆成功!");
        }
        else {
            System.out.println("登陆失败!");
        }
        //释放资源
        rs.close();
        pstmt.close();
        conn.close();
    }
 }

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇