发表于: 2018-03-10 22:21:41
1 616
今日完成
回复师兄的提问:
1,整理出业务模型,确定需要几个对象,每个对象的属性是什么,对象和对象之间的关系是一对一,还是一对多。
对象:每个报名的学员就是一个对象,对象与对象之间的关系是一对一
属性:每个对象有10个属性,即姓名,QQ,修真类型,入学时间,毕业院校,学号,日报连接,立愿,辅导师兄,以及从何处了解到的修真院。
2,create_at,update_at 需要创建时间戳,以记录关于记录的创建时间和更新时间。想想应该怎么达到这种效果。
应该首先要获取创建和修改的时间,然后在用程序来判断操作是否为创建和修改,最后输入数据库。
3,关于索引,你可以去了解一下为什么性能会出现下降,不同数量级别下的索引和普通查询有怎样的性能差异,然后想想为什么还要用索引。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。
当表中有大量记录时,若要对表进行查询,第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
优点:
1,大大加快数据检索速度
2,创建唯一索引,保证数据库表中每行数据的唯一性
3,加速表之间的连接
4,减少查询中分组和排序的时间
缺点:
1,索引需要占物理空间
2,会降低添加、删除和更新行的速度。
自己的话说就是:索引会降低增、删、、改的效率,但会提高查询的效率,在需要频繁查询的表上需要建立索引。
4,数据库报错有时候会导致程序运行失败,想想如何避免这种情况
使用try,catch语句块
步骤17,了解了下基本概念
1,DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口。就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。
2,JDBC(Java DataBase Connectivity,java数据库连接):是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
jdbc的主要功能:
(1)建立与数据库或者其他数据源的链接
(2)向数据库发送SQL命令
(3)处理数据库的返回结果
3,JDBCTemplate:为了使 JDBC 更加易于使用,Spring 在 JDBCAPI 上定义了一个抽象层, 以此建立一个JDBC存取框架。Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。
使用JDBC来连接MySQL,看了教程
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Demo {
public static void main(String[] args)
{
String driver="com.mysql.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF8";
String username="root";
String password="612049";
Connection conn=null;
Statement st=null;
try{
Class.forName(driver);//加载驱动
conn= DriverManager.getConnection(url,username,password);//创建数据库连接
st=conn.createStatement();//向数据库发送要执行的SQL语句。Statement对象,用于执行不带参数的简单SQL语句
String sql1="insert into user_info values(null,'张三',12,'男')";
String sql2="insert into user_info values(null,'王宇',13,'男')";
int row1=st.executeUpdate(sql1);
int row2=st.executeUpdate(sql2);
if (row1!=-1 && row2!=-1){
ResultSet rs=st.executeQuery("select * from user_info");
while (rs.next()){
int id=rs.getInt("id");
String name=rs.getString("name");
int age=rs.getInt("age");
String sex=rs.getString("sex");
System.out.println("ID:"+id+",Name:"+name+",age:"+",sex:"+sex);
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally{
if(st!=null){
try{st.close();}catch(Exception e){e.printStackTrace();}}
if (conn!=null){
try{conn.close();}catch(Exception e){e.printStackTrace();}}
}
}
}
事先建的表如下
然后运行出错
原因是没有导入MySQL的驱动包
导包的方法是首先要了解到需要什么包,然后到中心仓库http://mvnrepository.com/搜索,在把格式复制到pom文件中即可。
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
</dependencies>
明天计划
学习JDBCTemplate连接数据库
遇到的问题
1,之前写的sql“insert into user_info values('张三',12,'男');”语句,运行时报错:[Err] 1136 - Column count doesn't match value count at row 1
经过师兄点拨,要实现id的自增,要改为(null,'张三',12,'男'),之前程序将“张三”写入id列,因为没有指定插入的列。可以改为"insert into user_info(name,age,sex) values('张三',12,'男');"
2,对于JDBC连接数据库的整个流程,还不是很清晰
收获
学会了如何在pom文件中添加依赖,了解了jdbc连接,加强了sql语句的掌握。
评论