1、回想“流与文件”章节,如何将一组对象存储到文件中?主要步骤是什么。
package ObjectStudent;
import java.io.Serializable;
public class Student implements Serializable{
private String name;
private Integer id;
public Student(String name, Integer id) {
super();
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Override
public String toString() {
return "Student [name=" + name + ", id=" + id + "]";
}
}
package ObjectStudent;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
public class Test {
public static void main(String[] args) {
Student stu1 = new Student("张三", 1);
Student stu2 = new Student("李四", 2);
OutputStream os = null;//创建一个字节流
ObjectOutputStream oos = null;
try {
os = new FileOutputStream("D:/aaaaaaaaa.txt");//需要保存的文件位置,如果没有文件他会给你自动生成一个
oos = new ObjectOutputStream(os);
oos.writeObject(stu1);//将对象stu1写到文件中
oos.writeObject(stu2);//将对象stu1写到文件中
oos.flush();//穿进去之后要刷新
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
oos.close();//释放流
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
2、关系数据库中使用表存储数据。查询资料回答:表的设计应该遵循什么基本规范?如果要将Student对象(学号、姓名、年龄、分数、学院)存入数据库,要怎么设计表?设计几个表?
查询资料可得表设计原则如下:
1) 标准化和规范化
遵循三范式:遵守3NF 标准的数据库的表设计原则是:“One Fact in One Place”即某个表只包括其本身基本的属性,当不是它们本身所具有的属性时需进行分解。表之间的关系通过外键相连接。
2)满足三大范式
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
3)表与表之间的关系(一对一、一对多、多对多)
如果要将Student对象(学号、姓名、年龄、分数、学院)存入数据库,需要设计两个表,一个表存储的信息为学号、姓名、年龄、学院,另一个存储的信息为分数。
3、JDBC编程的一般步骤是哪些?
第一步:注册驱动(告诉Java程序,即将要连接那个品牌的数据库)
第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完后一定要关闭)
第三步:获取数据库操作对象(专门执行sql语句的对象)
第四步:执行SQL语句(DQL DML ...)
第五步:处理查询结果集(只有第四步执行select语句时,才会执行第五步)
第六步:释放资源(使用完资源后一定要关闭资源。Java和数据库属于进程间通信,开启后一定要关闭)
4、Statement与PreparedStatement有何区别?
(1)PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高
(2)使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
(3)statement每次执行sql语句,相关数据库都要执行sql语句的编译,preparedstatement预编译得, preparedstatement支持批处理 。
(4)执行许多SQL语句的JDBC程序产生大量的Statement和PreparedStatement对象。通常认为PreparedStatement对象比Statement对象更有效,特别是如果带有不同参数的同一SQL语句被多次执行的时候。PreparedStatement对象允许数据库预编译SQL语句,这样在随后的运行中可以节省时间并增加代码的可读性。
(5) PreparedStatement 可以规避 Statement弊端:①拼串 ②sql注入问题
(6)PreparedStatement 可以实现操作Blob类型、Clob类型的数据
5、怎么将数据库中表的数据组装成一个对象?
查询资料可得将数据库中表的数据组装成一个对象具体步骤为:
(1)定义一个emp类
(2)定义方法 public List findAll() {}查询所有
(3)实现方法 select *from emp,表代表类,一条数据代表一个对象