第14周 预习、实验与作业:Java数据库编程


回想“流与文件”章节,如何将一组对象存储到文件中?主要步骤是什么。

把数据抽象为流,用字节输入输出流(InputStream,OutputStream)进行读写。
主要步骤为:创建一个输入流,通过该流写入文件

public static void writeObjectToFile(Object obj)
    {
        File file =new File("test.dat");
        FileOutputStream out;
        try {
            out = new FileOutputStream(file);
            ObjectOutputStream objOut=new ObjectOutputStream(out);
            objOut.writeObject(obj);
            objOut.flush();
            objOut.close();
            System.out.println("write object success!");
        } catch (IOException e) {
            System.out.println("write object failed");
            e.printStackTrace();
        }
    }


查阅资料得知,Java io包内的ObjectOutputStream可以实现写入对象,把对象序列化,变成字节序列。

关系数据库中使用表存储数据。查询资料回答:表的设计应该遵循什么基本规范?如果要将Student对象(学号、姓名、年龄、分数、学院)存入数据库,要怎么设计表?设计几个表?

数据命名规范

  • 所有数据库对象名称必须使用小写字母并用下划线分割。
  • 所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)。
  • 数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符。
  • 临时库表必须以 tmp 为前缀并以日期为后缀,备份表必须以 bak 为前缀并以日期 (时间戳) 为后缀。
  • 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低)。

设计规范

  • 数据库和表的字符集统一使用 UTF8MB4
  • 所有表和字段都需要添加注释
  • 禁止在数据库中存储图片,文件等大的二进制数据
  • 优先选择符合存储需要的最小的数据类型
  • .....

--引用自《知乎

学号 姓名 年龄 学院 :学生基本信息表
学号 分数 :学生成绩表

JDBC编程的一般步骤是哪些?

1、加载JDBC驱动程序。
2、提供JDBC连接的URL。
3、创建数据库的连接。
4、创建一个Statement,要执行SQL语句,必须获得java.sql.Statement实例。
5、执行SQL语句。
6、处理两种情况的结果。
7、关闭JDBC对象(关闭结果集-->关闭数据库操作对象-->关闭连接)。

Statement与PreparedStatement有何区别?

PreparedStatement是Statement的子类

  • ①PreparedStatement接口代表预编译的语句,它主要的优势在于可以减少SQL的编译错误并增加SQL的安全性(减少SQL注射攻击的可能性)
  • ②PreparedStatement中的SQL语句是可以带参数的,避免了用字符串连接拼接SQL语句的麻烦和不安全
  • ③当批量处理SQL或频繁执行相同的查询时,PreparedStatement有明显的性能上的优势,由于数据库可以将编译优化后的SQL语句缓存起来,下次执行相同结构的语句时就会很快(不用再次编译和生成执行计划)

怎么将数据库中表的数据组装成一个对象?