Java 之JDBC基础原理

Jdbc的步骤

 1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar         1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
 2.右键-->Add As Library  添加为库

    1.Class.forName("com.mysql.jdbc.Driver");             注册驱动   会运行Driver 的静态代码块     

         加载驱动的字节码文件到内存,真正的注册在  Driver的 静态代码块中  
     2.Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");      获取数据库连接对象

          返回一个连接对象 ,  当是本地连接时  可以省略    jdbc:mysql:///db3
     3.String sql = "update account set balance = 500 where id = 1";           .定义sql语句
     4. Statement stmt = conn.createStatement();                  获取执行sql的对象 Statement
     5. int count = stmt.executeUpdate(sql);                     执行sql    

             1.executeUpdate执行    DML(insert、update、delete)语句、DDL(create,alter、drop)语句  返回值为受影响的行数

             2.executeQuery(String sql) : 执行DQL(select)语句   返回的是一个结果集对象

             3.execute可以执行所有语句

     6.System.out.println(count);           可以判断
     7. stmt.close();  conn.close();     释放资源

select DLL语句 

      1. ResultSet resultSet = statement.executeQuery(sql);        返回值是一个结果集,  开始光标指数据的上一行

       2. boolean  bool   =   resultSet.next()             判断下一行是否有数据  

      3. getXxx()           方法重载    填int 代表表的 列数 从1开始           填字符串 代表字段 名称

          int id = resultSet.getInt(1);                                    String name = resultSet.getString("name");
          int age = resultSet.getInt("age");                          String local = resultSet.getString("local");
          double salary = resultSet.getDouble("salary");     Date date = resultSet.getDate(6);  

封装JDBC工具类

public class JDBCUtils {
    private static String url;
    private static String user;
    private static String password;
    private static String driver;
    static {
        Properties properties = new Properties();
        ClassLoader classLoader = JDBCUtils.class.getClassLoader();
        InputStream resourceAsStream = classLoader.getResourceAsStream("jdbc.properties");
        try {
            properties.load(resourceAsStream);
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            password = properties.getProperty("password");
            driver = properties.getProperty("driver");
            Class.forName(driver);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();}}

    public static Connection getConnection() throws SQLException {
        return  DriverManager.getConnection(url, user, password);
      }
    关闭连接  关闭执行sql对象
    public static void close(Statement sta, Connection conn){
        if (sta!=null){
            try {
                sta.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }}
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();}}}
   重载可关闭 结果集
    public static void close(ResultSet set ,Statement sta, Connection conn){
        if (set!=null){
            try {
                set.close();
            } catch (SQLException e) {
                e.printStackTrace();}}

        if (sta!=null){
            try {
                sta.close();
            } catch (SQLException e) {
                e.printStackTrace();}}

        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();}}}}

   PreparedStatement:执行sql的对象
         1. SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题

         2.使用 PreparedStatement预编译sql 语句 解决安全问题  参数使用?作为占位符

            conn = JDBCUtils.getConnection();
            String sql = "select * from user where username= ? and password= ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, user);
            pstmt.setString(2, password);
            res = pstmt.executeQuery();
            return res.next();

 事务

        try {conn = JDBCUtils.getConnection();               在获取连接后手动开启事务,如果报错回退到这
               conn.setAutoCommit(false);      开启事务           

                 ......   

              conn.commit();}                     没有错提交

        catch (Exception e) {
            try {
                if(conn != null) {
                    conn.rollback();                 如果有错回滚
                }
            } catch (SQLException e1) {
                e1.printStackTrace();}
            e.printStackTrace();
         }finally {
            JDBCUtils.close(pstmt1,conn);
            JDBCUtils.close(pstmt2,null); }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值