• JDBC基础


    ?serverTimezone=UTC//设置时区<The server time zone value 'ä¸­å›½æ ‡å‡†æ—¶é—´' is unrecognized or represents more than one time zone>
    net stop mysql//mysql关闭指令
    net start mysql//mysql开启数据库指令
    

    java连接数据库使用JDBC
    java.sql.,javax.sql.这两个包只是接口类

    1. java连接数据库:

    1.1. 构建连接

    1. 注册驱动

    2. 确定对岸目标

    try {
    			Class.forName("com.mysql.cj.jdbc.Driver");
    			System.out.println("注册驱动成功!");
    		} catch (ClassNotFoundException e1) {
    			System.out.println("注册驱动失败!");
    			e1.printStackTrace();
    		}
    
            String url="jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
            Connection conn = null;
            //构建Java和数据库之间的桥梁:URL,用户名,密码
                conn = DriverManager.getConnection(url, "root", "1234567");
    

    1.2. 执行操作

    1. 使用Statement语句:
      • executeQuery()执行select语句,返回结果放在ResultSet
      • 使用executeUpdate()执行insert/update/delete,返回修改的行数
      • 一个statement对象一次只能执行一个命令
    2. 返回结果集
    Statement stmt = conn.createStatement(); 
    System.out.println("创建Statement成功!"); 
    ResultSet rs = stmt.executeQuery("select bookname from t_book order by bookid");
    
    Statement stmt = conn.createStatement(); 
    System.out.println("创建Statement成功!");        
    //执行SQL语句
    int result = stmt.executeUpdate(sql);
    

    1.3. 释放连接

                Connection.close();//关闭
                rs.close();//关闭结果集
                stmt.close();//关闭语句
    
    
    import java.sql.*;
    
    public class SelectTest {
        public static void main(String[] args){
        	
        	//构建Java和数据库之间的桥梁介质
            try{            
                Class.forName("com.mysql.cj.jdbc.Driver");
                System.out.println("注册驱动成功!");
            }catch(ClassNotFoundException e1){
                System.out.println("注册驱动失败!");
                e1.printStackTrace();
                return;
            }
            
            String url="jdbc:mysql://localhost:3306/test?serverTimezone=UTC";
            Connection conn = null;
            try {
            	//构建Java和数据库之间的桥梁:URL,用户名,密码
                conn = DriverManager.getConnection(url, "root", "1234567");
                
                //构建数据库执行者
                Statement stmt = conn.createStatement(); 
                System.out.println("创建Statement成功!");      
                
                //执行SQL语句并返回结果到ResultSet
                ResultSet rs = stmt.executeQuery("select bookid, bookname, price from t_book order by bookid");
                            
                //开始遍历ResultSet数据
                while(rs.next())
                {
                	System.out.println(rs.getInt(1) + "," + rs.getString(2) + "," + rs.getInt("price"));
                }
                
                rs.close();
                stmt.close();
                
            } catch (SQLException e){
                e.printStackTrace();
            }
            finally
            {
            	try
            	{
            		if(null != conn)
            		{
                		conn.close();
                	}
            	}
            	catch (SQLException e){
                    e.printStackTrace();
            	}        	
            }
        }
    }
    

    2. JDBC事务处理

    关闭自动提交,实现多语句同一事务

    • connection.setAutoCommit(false);关闭自动提交
    • connection.commit();提交事务
    • connection.rollback();回滚事务,如果被提交就不可以回滚。
    • 保存点机制
      • connection.setSavepoint();
      • connection.roolback(Savepoint);
    // 构建Java和数据库之间的桥梁:URL,用户名,密码
    			conn = DriverManager.getConnection(url, "root", "1234567");
    			conn.setAutoCommit(false);
    
    			insertBook(conn, "insert into t_book values(101, 'aaaa', 10)");
    			insertBook(conn, "insert into t_book values(102, 'bbbb', 10)");
    			insertBook(conn, "insert into t_book values(103, 'cccc', 10)");
    			Savepoint phase1 = conn.setSavepoint(); //设置一个保存点
    			insertBook(conn, "insert into t_book values(104, 'cccc', 10)");
    			insertBook(conn, "insert into t_book values(105, 'cccc', 10)");
    			conn.rollback(phase1);  //回滚到phase1保存点,即上面2行无效
    			conn.commit();
    

    3. PreparedStatement(预编译)

    PreparedStatement是Statement接口的子接口,其实现在JDBC驱动类中, 属于预处理操作,与直接使用Statement不同,PreparedStatement在操作时,是预先在数据表中准备好了一条SQL语句,但是此SQL语句的具体内容暂时不设置,而是之后在进行设置。

    • 可以更为安全的执行SQL,防止注入攻击
    • 防止繁琐的字符串拼接和
    • 直接设置对象而不需要转换为字符串
    • PreparedStatement使用预编译速度相对Statement快的多

    3.1 常用方法


    1:executeQuery():在此PreparedStatement对象中执行SQL语句,并返回该查询生成的ResultSet对象。

    2:executeUpdate():在此PreparedStatement对象中执行SQL语句,该语句必须是一个SQL数据操作语言(Date Manipulation Language,DML)语句,比如insert、update、delete语句;或者是无返内容的SQL语句,比如DDL语句。

    3:execute():在此PreparedStatement对象中执行SQL语句,该语句可以是任何种类的SQL语句

    4:getMetaData():获取包含有关ResultSet对象列信息的ResultSetMetaData对象,ResultSet对象将在此执行PreparedStatement对象时返回。

    5:getParameterMetaData():获取此PreparedStatement对象的参数的编号、类型和属性


    注意:

    • 注意sql语句的空格,SQL语句换行加空格
    • 使用?时应注意设置参数
    //使用setstring()时字符串不用加单引号
    /////////////////////////////////////数据库插入语句/////////////////////////////////
                String sql = "insert into t_book(bookid,bookname,price) values(?,?,?)";
                
                //构建数据库执行者
                PreparedStatement pstmt = conn.prepareStatement(sql);
                
                //执行SQL语句
                int bookid = 10;
                String bookName = "Effective Java";
                int price = 50;
                
                pstmt.setInt(1, bookid);
                pstmt.setString(2, bookName);
                pstmt.setInt(3, price);
                
                int result = pstmt.executeUpdate();
    ////////////////////////////////////数据库模糊查询语句//////////////////////////////////////
                String sql = " select * from mall  where name like ? ";
                PreparedStatement preparedStatement = connection.prepareStatement(sql);
    
                preparedStatement.setString(1,"%"+s+"%");
                ResultSet resultSet = preparedStatement.executeQuery();
    /////////////////////////////////////数据库查询语句//////////////////////////////////////////
                String sql = " select * from mall  where name =? ";
                PreparedStatement preparedStatement = connection.prepareStatement(sql);
    
                preparedStatement.setString(1,s);
                ResultSet resultSet = preparedStatement.executeQuery();
    
                while (resultSet.next()){
                    Shopping shopping = new Shopping();
                    shopping.setId(resultSet.getInt(1));
                    shopping.setName(resultSet.getString(2));
                    shopping.setTime(resultSet.getString(3));
                    stringArrayList.add(shopping);
                }
    ////////////////////////////////////数据库删除语句///////////////////////////////////////////
                String sql = "" +
                        " delete from mall " +
                        " where id=? ";
                PreparedStatement preparedStatement = connection.prepareStatement(sql);
    
                preparedStatement.setInt(1,i);
    
                preparedStatement.execute();
    ////////////////////////////////////数据库插入语句////////////////////////////////////////////
                String sql = "" +
                        "insert into mall" +
                        "(id,name,time)" +
                        "values(?,?,?)";
                PreparedStatement preparedStatement = connection.prepareStatement(sql);
    
                preparedStatement.setInt(1,shop.getId());
                preparedStatement.setString(2,shop.getName());
                preparedStatement.setString(3,shop.getTime());
    
                preparedStatement.execute();
    /////////////////////////////////////数据库更新语句///////////////////////////////////////////
                String sql = "" +
                        " update  mall " +
                        " set name=?,time=? " +
                        " where id=? ";
                PreparedStatement preparedStatement = connection.prepareStatement(sql);
    
                preparedStatement.setString(1,shop.getName());
                preparedStatement.setString(2,shop.getTime());
                preparedStatement.setInt(3,shop.getId());
    
                preparedStatement.executeUpdate();
    

    批量提交数据

    //构建Java和数据库之间的桥梁:URL,用户名,密码
                conn = DriverManager.getConnection(url, "root", "123456");
                
                String sql = "insert into t_book(bookid,bookname,price) values(?,?,?)";
                
                //构建数据库执行者
                PreparedStatement pstmt = conn.prepareStatement(sql);
                
                //执行SQL语句
                
                String bookName = "aaaaaaaaaaaaaaaa";
                int price = 50;
                
                //values(1, 'Effective Java', 50)
                for(int i=200;i<210;i++)
                {
                	pstmt.setInt(1, i);
                    pstmt.setString(2, bookName);
                    pstmt.setInt(3, price);
                    pstmt.addBatch();
                }            
                
                pstmt.executeBatch();
                            
                pstmt.close();
    

    4. ResultSet(语句返回结果集)

    查询数据库时,返回的是一个二维的结果集,需要用到ResultSet来遍历结果集,获取每一行的数据。

    • ResultSet.next():ResultSet游标最初位于第一行之前,也就是第0行;第一个对方法的调用接下来使第1行成为当前行。

    • 使用这个方法进行时,判断这一位是否有值如果有值返回true,没有值返回false,如果为true将游标向下移一位

    • ResultSet.getString(columnlabel),或者getString(columnindex),可以传入返回结果集的序号顺序或者数据库列名

    5. ResultSetMetaData

    可以获取resultset返回的属性(如,每一行的名字类型),使用ResultSetMetaData解析ResultSet:

    • getColumnCount(),返回结果的列数
    • getColumnClassName(i),返回第i列的数据的java类名
    • getColumnTypeName(i),返回第i列的数据库类型名称
    • getColumnType(i),返回第I列的SQL类型
    //构建Java和数据库之间的桥梁:URL,用户名,密码
                conn = DriverManager.getConnection(url, "root", "123456");
                
                //构建数据库执行者
                Statement stmt = conn.createStatement(); 
                System.out.println("创建Statement成功!");      
                
                //执行SQL语句并返回结果到ResultSet
                ResultSet rs = stmt.executeQuery("select bookid, bookname, price from t_book order by bookid");
                            
                //获取结果集的元数据
                ResultSetMetaData meta = rs.getMetaData(); 
                int cols = meta.getColumnCount(); 
                for(int i=1;i<=cols;i++)
                {
                	System.out.println(meta.getColumnName(i) + "," + meta.getColumnTypeName(i));
                }
                
                rs.close();
                stmt.close();
    
  • 相关阅读:
    UVA 1557
    基于角色的权限设计(二)
    用DirectShow实现视频採集-流程构建
    oracle中schema指的是什么?
    GCC 命令行具体解释
    希尔排序
    单点登录SSO的实现原理
    济南最新公交线路一览(BRT)
    编写你自己的单点登录(SSO)服务
    C和指针 (pointers on C)——第五章:操作符和表达式
  • 原文地址:https://www.cnblogs.com/innndown/p/12360653.html
Copyright © 2020-2023  润新知