欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDBC章节总结

程序员文章站 2022-04-19 23:52:33
...

1.接口可以降低程序的耦合度,提高程序的扩展力*

答:如果需要扩展接口功能的时候,直接创建一个实现接口功能的对象就可以了。

2.JDBC是一套专门用来操作数据库的接口*

见名知意,java databases connection java 虚拟机与数据库之间的连接,需要通过Statement接口来实现

3.程序员只需要面向通用的JDBC接口调用方法即可完成数据的增删改查,而不需要关系底层具体的数据库是什么品牌。*
Connection conn = DriverManager.getConnection(url,user,password) ,建立与数据库的连接,获得实现类的对象,
再通过这个连接对象获得实现mysql语句的对象
Statement stat = conn.createStatement();
增 stat.executeUpdate(sql)insert into 某一行数据 create table users .


查 stat.executeQuery(sql)

理解

4.数据库厂家负责编写JDBC接口的实现类,这些类被打成jar包,并且发布,这些jar包称为驱动。*

知道

5.开发JDBC程序之前,需要从数据库官网下载相关驱动jar包,然后将其配置到环境变量classpath当中。*

理解是一套规范,用相同的规范访问不同数据库,Oracle,通过接口连接  ,数据库厂家提供实现类对象。这些对象封装成一个接口。

6.能够独立的编写出JDBC的6步骤吗?*
step 1: 注册驱动 Driver driver = new com.mysql.jdbc.Driver();
DriverManager.registerDriver(Driver);

    step  2:建立数据库的连接  String user = "root";
			String  password= "root";
			String url = "jdbc:mysql://192.168.148.8:3306/bjpowernode";
		  Connection conn=Driver.Manager.getConnection(url,user,password);

    step  3:通过连接生成sql语句的对象,也就是实现Statement接口的对象。
                    Statement stat=  conn.createStatement();  

        step 4:执行对sql语句的操作
	       DDL。
		String	sql = "create table users  = (
			 uid  int(3),     primary key
			 uname  varchar(4) 
			  sex    char(1)   unique
			
			)";
			        
				int i= stat.executeUpdate(sql);
					system.out.println("输出计时器i"+i);

		DQL
		String sql = "select * from emp where sal between 1600 and  3000";

				 Resultset res = stat.executeQuery(sql);	

					
		DML
		 String sql = "insert into emp values = (9003,Str_to_date('2018-06-27','%y-%m-%d')";
					int i= stat.executeUpdate(sql);
					system.out.println("输出计时器i"+i);

	    step  5:遍历查询结果,获得ReseultSet结果集。(只有执行DQL时候才会有这一步)
				where(res.next()){
				 int empno = res.getInt("empnno");
				 String ename = res.getString("ename");
				
				}
				system.out,println(empno+","+ename+"");
					 
		
		
		
		step  6:关闭数据库。
		  if( res !=null){
			res.close();
		  }
		  if(stat!=null){
			stat.close();
		  }
		  if(conn!=null){
			conn.close();
		  }

7.Class.forName(“com.mysql.jdbc.Driver”)完成驱动注册的原理是什么?*

   通过反射得到对象实质上都是一些字节码文件存在于jar包中。

8.JDBC当中所有的下标都是从1开始的。*

占位符下标从1开始。

9.连接数据库的信息:driver /url /user/ password建议配置到属性文件中。*
怎么配置?
是为了降低代码的耦合度才把这些常用的操作做成配置文件。
三步走:创建io流InputStream inputstream = 运行时类.class.getClassload().getResourceAsStream(“config.properties”);
加载流properties.load(inputstream);
调用getProperty();方法。

10.能够对查询结果集进行遍历,以字符串的形式取出,或者以指定的类型取出,通过查询结果集当中的列名称可以取,也可以通过列索引取。*

题6有解释

11.什么是SQL注入,导致SQL注入的根本原因是什么?*
输入错误的用户名和密码竟然登陆成功了。

  1. and or 的优先级影响,2.statement需要拼接sql语句。

12.使用PreparedStatement可以防止SQL注入,是因为预编译的数据库操作对象会将SQL语句进行预编译,即使用户提供的信息中含有SQL关键字,但由于这些关键字没有参与编译过程,固然是不起作用的。*

理解

13.PreparedStatement比Statement效率高,并且PreparedStatement是类型安全的。*
1.Statement需要拼接SQL语句,会导致SQL注入攻击,preparedStatement不会。
2.Statement在执行多个SQL语句的时候,编译一次,执行一次。在编译在执行。 效率低
PreparedStatement编译一次,执行多次。效率高。(后面会讲到。)

14.使用PreparedStatement给占位符赋值的时候,占位符?,不能使用单引号括起来。*

给SQL字段不赋值,而用?代替。   ?相当于一个具体的字段

15.JDBC事务默认支持自动提交,也就是只要执行一条DML语句则自动提交一次,显然是不符合现实业务的。通常使用这三个语句控制事务:conn.setAutoCommit(false);conn.commit();conn.rollback();*

   1.conn.setAutoCommit(false);来关闭自动提交方式
   2.提交结束事务(conn.commit()):事务中对数据库的修改被永久的保存到数据库中,所有的事务可以查询到这些修改
   3.回滚结束事务(conn.rollback()):事务中对数据库的修改被统统的放弃,数据库恢复到事务开始之前的状态

16.对于for update的使用,你理解吗?*

见名知意,就是我更新的时候你才可以操作,比如两个会话同时访问数据的时候,要等待一方完成对数据的修改或者查询操作(即commit之后)之后
另一个会话才可以操作查询或者修改。

17.能够独立完成MySQL数据库数据的导入和导出吗*

打开 neicat 找到数据库,比如bjpowernode,testpowernode;右键有导入,导出。

18.数据库设计三范式分别是什么*
第一范式:1.要求有PrimaryKey,2.数据是唯一的,且不能重复,3.每一个字段是原子性的不可以再分。
第二范式:建立在第一范式的基础上的,尽量避免使用联合主键2.数据库中的非主键要完全依赖主键,不能产生部分依赖。属于典型的多对多关系,如师生表。
第三范式:建立在第二范式的基础上,要求非主键字段不能产生传递依赖于主键字段,属于典型的一对多设计。

19.一对一,一对多,多对多关系,这些关系怎么设计数据库表*

一对一:方法一:共享主键primaryKey。方法二:外键唯一unique

一对多:建立俩个表,在多的一方添加外键foreignKey,外键引用一的一方主键字段。

多对多:分三张表存储,如学生表,课程表,选课表。
学生表,教师表,学生和教师的关系表。

20.数据库设计方面虽然有范式要求,但是实际开发中还是以满足客户的需求为前提。*

尽量遵循三范式。
21.我们在实际项目的开发中为什么很少使用数据库的”存储过程“*

一个存储过程是一个可编程的函数
在不同的数据库中,存储过程的语法都是不同的;只要我们使用了存储过程,就相当于放弃了数据库的移植性

存储过程:例子:声明一个存储过程,查询emp表中数据总数,并返回结果(相当于一个可编程的函数)?

步骤: CREATE PROCEDURE proc1 (out num int ) //1
BEGIN //2

   SELECT COUNT(*) INTO num FROM EMP;                             /3             //sql语句
   END ;                                                          //4
    CALL PROC1  (@num);                                             5.   //调用存储过程

select(@num);                                          //查看执行结果。

标准答案:(分号不能省)
CREATE PROCEDURE PROC4(OUT NUM INT)
BEGIN
SELECT COUNT(*) INTO NUM FROM EMP ;
END;
CALL PROC4(@NUM);
SELECT(@NUM);

//DROP PROCEDURE PROC1;  删除存储过程。

拓展提

-- 创建以存储过程,返回两个参数相加的结果

CREATE PROCEDURE PROC2 (NUM1 INT ,NUM2 INT , OUT RES INT)
BEGIN
– 把NUM1 + NUM2的结果赋值给OUT类型的参数RES;通过out类型的参数将结果返回给调用者
SET RES = NUM1 + NUM2;
END;

– 调用存储过程
CALL PROC2(10,20,@res);
SELECT @RES;

在JDBC操作中会出现的异常有哪些:ClassNotFoundExecption和SQLException

相关标签: jdbc