一.使用JDBC API对数据库进行CRUD(create,receive,update,delete)操作,开发JDBC的步骤是:
package com.yjw.j3;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test {
public static void main(String[] args) {
Connection c = null;
Statement s = null;
ResultSet r = null;
try {
//1.加载数据库驱动(提供一个jdbc的数据库驱动的名称)
Class.forName("com.mysql.jdbc.Driver");
//2.获取数据库连接
String a = "jdbc:mysql://localhost:3306/school";
c = DriverManager.getConnection(a, "root", "root");
//3.获取Statment对象(该对象用于对数据库进行CRUD操作)
s = c.createStatement();
//4.执行SQL语句
String sql = "SELECT id,classname FROM t_class";
r = s.executeQuery(sql);
while(r.next()){
int id = r.getInt("id");
String b = r.getString("classname");
System.out.println("id"+id+"\t"+"classname"+b);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//5.释放连接
r.close();
} catch (Exception e2) {
e2.printStackTrace();
}finally{
try {
//5.释放连接
s.close();
} catch (Exception e3) {
e3.printStackTrace();
}finally{
try {
//5.释放连接
c.close();
} catch (Exception e4) {
e4.printStackTrace();
}
}
}
}
}
}
二.在statement类的对象调用executeUpdate()方法用来对数据进行insert update,delete操作,该方法返回影响数据库的行数,对象调用executeQuery()方法用来对数据进行select操作,输出要使用while迭代器
三.释放连接时对象的顺序不能变,释放的顺序和创建对象的顺序相反
四.如果操作的事本地的数据库,在连接数据库时,有三种方法
1.”jdbc:mysql://本地ip:端口号/数据库名字”
2.”jdbc:mysql://localhost:端口号/数据库名字”
3.”jdbc:mysql:///数据库名字”
五.如果不知道数据库列的数据类型,可以通过这三步在控制台上查看
1.输入:mysql –u用户名 –p密码
2.输入:use 数据库名
3.输入: desc 表名
一.在java中的异常中,Throwable类有两个子类,Error和Exception,在Exception类中有两个子类,RuntimeException(运行时异常)和非运行时异常,运行时异常是指只有在运行时才会报错的异常,不会编译错,但是非运行时异常是会编译错的,在运行前就报错了。
二.在cry {语句1}catch(Exception e){语句2}finally{语句3}语句中,语句1放的是可能会发生异常的语句,语句2放的是发生异常后执行的语句,语句3放的是一定会执行的语句,不管有异常没有,
三。PrintStackTrace()方法用于输出有关的异常信息,包括异常的原因,以及该异常发生在类的第几行代码中,getMessage()方法用于返回异常相关的详细信息,但是无法跟踪到具体的行。
四.在自定义异常中,如果是继承自Exception类时,有两种方法处理
1.在有可能发生异常的方法中,在这个方法名后利用throws跑出自定义异常,
在对象调用此方法的时,需要对象自己利用try catch语句处理此方法
2在有可能发生异常的方法中,自己利用try catch语句处理异常,在对象调用此方法时,不在需要对象自己利用try catch语句处理此方法,直接调用方法就可以
五.在自定义异常中,如果继承自RuntimeException类时,在对象调用此方法的时,需要对象自己利用try catch语句处理此方法。
一.在内连接中的等值连接中,适用于两个表,且两个表中都有共同的一项,根据这一项来连接两表中其他的项,但是如果不在where中约束两表中共同的一项相等,会产生笛卡尔积。
比如select stuname,score from t_student,t_scores where t_student.id=t_sccores.stu_id;
标准的内连接是 select stuname,scores from t_student inner join t_scores on
T_student.id=t_scores.stu_id;
二.左连接会全部显示左边的信息,比如 select stuname,score from t_student
Left join t_scores on t_student.id=t_scores.stu_id;
三.只要是几个表的连接查询,都要在其中直接连接的两个表中找到相同的项,作为纽带,查询其他的列。
四.表之间的关系包括1对1,1对多,多对多,其中1对1 时比如建立人的表和身份证表,他们是1对1的,在建立身份证表时,表的id号不是自动增长的,并且id即使身份证表的主键,也是人表的外键,也就是说id不但不能重复,还要一定时人表中存在的,1对1的。
在1对多时,比如人表和银行卡表,一个人可以有多个银行卡,但是一个银行卡只能属于一个人,所以把人的id放在银行卡表中,作为人表的外键,也就是说,在1对多时,在多的表中存放1的主键。
在多对多时,比如学生表和课程表,一个学生可以选多个课,一个课可以有多个学生上课,这就是多对多的情况,需要建立第三张关系表,在关系表中包括学生表和课程表的俩主键,这俩主键也是关系表的主键,
在mysql中,group by 分组后,可用sun()来计算每组的莫一列的内容和,比如价格总额,数量总额,count()是用来计算列的个数和,不是内容和,
在查询中,关键字的使用顺序是1.select,2.from,3.where,4.group by,5.having,
6.order by,7.limit
在子查询中又是可以把子查询分解为几个单表查询,最后再整合在一起
在相关子查询中,比如SELECT customers.cust_id, customers.cust_name,(SELECT COUNT(*) FROM orders WHERE orders.cust_id=customers.cust_id) FROM customers;中是先在customers表中拿到第一个cust_id 带到小括号里进行比对,如果有相同的就计算总和,没有相同的为0,以此类推,最后算出结果,。
数据库就是用来保存有组织数据的容器,数据库软件应该成为DBMS(数据库管理系统),数据库是通过DBMS来操作的容器。用户不能直接操作数据库,是通过数据库管理系统来操作数据库的,常见的数据库管理系统有SQLServer,MYSQL,Oracle,Db2等。
数据库元素包括视图,存储过程,触发器,用户,表等。SQL的全称是Structured Query Language结构化查询语言,所有的DBMS都支持SQL语言,并且会在SQL语言中有一些发展,SQL语言是不区分大小写的。