JDBC学习总结1(JDBC基础)

001.JDBC

1.JDBC:java database connectivity  ;   java连接数据库

简单来说,jdbc就是一组规范;将对所有关系型数据库的操作都抽象出来的规范;
作用:采用统一的方式来操作各种数据库;

2.如何通过jdbc来访问数据库; 

JDBC中常用的接口和实现类;
    DriverManager:驱动程序管理器,用来管理驱动,并获得连接;
    Connection:连接;代表java与数据库的一个连接;
    Statement :声明;用来向数据库发送sql;
3.使用jdbc访问数据的步骤

加载驱动 ;

            Class.forName("com.mysql.jdbc.Driver");

获得连接;
            Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/books","root","tiger");
创建声明
            Statement st=conn.createStatement();
执行sql
            st.execute(sql);
            st.executeUpdate();
关闭资源
            st.close();
            conn.close();

代码如下:

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Test {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		//1.加载驱动
		Class.forName("com.mysql.jdbc.Driver");
		//2.获得连接
        //String url:jdbc:子协议:子名称
		Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "tiger");
		//3.创建声明
		Statement st=conn.createStatement();
		//4.执行sql
		String sql="insert into tb_book values(null,'1984',32,'乔治·奥威尔')";
		st.execute(sql);
		//5.关闭资源
		st.close();
		conn.close();
	}

}

002.Statement方法

1.DriverManager类
    作用:管理驱动,并且可以获得数据库连接;
    方法:
        public static Connection getConnection(url,userName,password);

创建一个类,将加载驱动放在静态块里,获得连接定义为静态方法,代码如下:

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JdbcUtil {
	
	static String url="jdbc:mysql://localhost:3306/test";
	static String userName="root";
	static String password="tiger";
	
	//加载驱动	
	static {
			try {
				Class.forName("com.mysql.jdbc.Driver");
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	//获得连接
		public static Connection getConnection() {
			try {
				return DriverManager.getConnection(url,userName,password);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return null;
		}
		
}

关于关闭资源:java1.7之后的try可以:

String sql="";

try (Connection conn=JdbcUtil.getConnection();Statement st=conn.createStatement()){
      st.execute(sql);
}

无论是否产生异常,在try执行后会自动关闭资源(包括网络、流等可关闭的资源)

最终代码如下:

package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Test {

	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		String sql="select * from tb_book";
		try (Connection conn=JdbcUtil.getConnection();Statement st=conn.createStatement()){
		      st.execute(sql);
		}
	}

}


2.Connection
    代表与数据库的连接;连接用完一定要立即关闭;
    方法:
        createStatement():创建声明;
        preparedStatement(); 创建预编译的声明;
        
        setAutoCommit():事务是否为自动提交;
        commit;
        rollback:控制事务;        
3.Statement (声明)
    作用:用来执行各种sql
    方法:
            boolean execute(sql);
                  所有语句都可执行;执行语句后是否存在结果集;
            int executeUpdate(sql);
                  受影响的记录数量; 

            ResultSet executeQuery();

003.ResultSet

ResultSet
    Result代表结果集
        .next():移动光标,如果有下一条记录则返回true,否则返回false; 
        .get<Type>(int): 根据列号获得当前记录的一个字段的值,并将值转换成<Type>类型,
        .get<Type>(String):根据列名查询出当前记录的字段值,并转换成<Type>类型
        .close():关闭资源;

004.PreparedStatement

1.什么是sql注入;
    通过传递一个sql 片段来破坏原有的sql语名,及达到sql攻击的目的; 
2.PreparedStatment 接口;
    它是Statment的子接口,是预编译的Statment ;此接口的特点;
①解决sql注入的问题;
②为不同的数据类型赋值更加方便;
③同一个sql执行多次时,性能更好;

建议:如果sql中带参数,则建议使用preparedSstatement;

3.使用ps的步骤;
            String sql="select * from miaosha_user where userid=? and password=?";
            //定义预编译的ps; 用?代表可变的参数;
            PreparedStatement ps=conn.prepareStatement(sql);            
            //给通配符赋值;
            ps.setString(1, name);
            ps.setString(2, passwd);
            //执行sql;
            ResultSet rs=ps.executeQuery();
4.ps的方法;
    set<Type>(int,Object):给指定位置的通配符赋值;
    executeQuery();
    executeUpdate();
    execute();  
            以上三个方法,都没有参数;

005.日期类型

关于日期类型的映射;
    java.util.Date;    
        在jdbc中,表示java中时间可以使用以下三个类型,这三个类型都是java.util.Date 的子类;并且都在java.sql包中;
    Date:只表示日期;
    Time:只表示时间
    Timestamp:表示一个精确的时间(日期+时间)    

006.事务控制

1.关于事务的处理;
    登录;
        表:用户信息表;
                uid,nickname,password.login_time,login_count,amount;
              登录日志;
                logid,uid,login_time,score;
                
2.在jdbc中如何控制事务?
    在jdbc中通过Connection来控制事务;
        三个方法;
        setAutoCommit(false);

        commit():提交
        rollback():回退; 

        示例;
        Connection conn=JdbcUtil.getConnection();
        conn.setAutoCmmit(false);

        try{
            ps.execute();...
            .....();
            conn.commit();
        }catch(Exception e){
            conn.rollback();
        }finally{
            conn.close();
        }

007.元数据

元数据(MetaData)
    用来描述数据的数据;
        用来描述数据的含义的一些信息;
     jdbc为我们提供了多种元数据;主要有;
        表示数据库连接的元数据;
            DatabaseMetaData ;  conn.getMetaData();
        表示结果集的元数据;
            ResultSetMetaData result.getMetaData();
            方法有;
                getColumnCount():获得结果集的列数;
                getColumnLabel():获得列名
                getColumnType():获得列的数据类型;    

008.大对象的处理

jdbc对大数据的处理;
    思路;
        1、使用Connection.createBlob()创建一个blob对象;
        2、获得这个blob 对象的输出流;setBinaryStream(1);
        3、向流中写入字节;
        4、通过ps.setBlob()将二进制存在数据库中;

            //创建一个Blob类型;
            Blob blob=conn.createBlob();            
            //获得blob的输出流;
            OutputStream os=blob.setBinaryStream(1);
            //此处省略向os中写入字节的代码
            ps.setBlob(3, blob);

009.大对象的读取       010.返回生成的主键

如何获得数据库生成的主键 
    通过一个重载的prepareStatement(sql,int);来设置是否返回由数据库生成的主键 ;然后再使用ps.getGenereatedKeys()来获得包含主键的结果集; 
    PreparedStatement ps=conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)
    ps.execute();
    //获得生成的主键;
    ResultSet keys=ps.getGeneratedKeys();
    keys.next();
    System.out.println("生成的主键是:"+keys.getInt(1)); 
总结
    元数据 ;MetaData; 
    大对象;
        BLOB:binary Large Object; 
    返回生成的主键 ; 
        事务:
    作业;注册功能;
            受教育经历;

猜你喜欢

转载自blog.csdn.net/Sunhongyu51/article/details/85781611