学习日记-mysql数据库以及jdbc编程

 ------- android培训java培训、期待与您交流! ----------

mysql数据库以及jdbc编程

java语言的各种跨平台特性,都采用了相似的结构,因为它们都需要让相同的程序在不同的平台上运行,所以都需要中间的转换程序,同样为了jdbc程序可以在不同的平台上运行,就需要不同数据库厂商提供相应的驱动程序。

sql的基础语法无非是增删改查,下边列出一些最基本的语法:
1. 查询
select * from table

2. 更新
update table set field=value

3. 插入
insert [into] table (field) values(value)

4. 删除
delete [from] table

经过查资料找到select语句的执行顺序与大家分享:

第一步:from
首先对from子句中的前两个表执行一个笛卡尔乘积,此时生成虚拟表vt1 .

第二步:on
接下来便是应用on筛选器,on 中的逻辑表达式将应用到 vt1 中的各个行,筛选出满足on逻辑表达式的行,生成虚拟表 vt2 .

第三步:join
如果是outer join 那么这一步就将添加外部行,left outer jion 就把左表在第二步中过滤的添加进来,如果是right outer join 那么就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表 vt3.

第四步:多表
如果 from 子句中的表数目多余两个表,那么就将vt3和第三个表连接从而计算笛卡尔乘积,生成虚拟表,该过程就是一个重复1-3的步骤,最终得到一个新的虚拟表 vt3.

第五步:where
应用where筛选器,对上一步生产的虚拟表引用where筛选器,生成虚拟表vt4,在这有个比较重要的细节不得不说一下,对于包含outer join子句的查询,就有一个让人感到困惑的问题,到底在on筛选器还是用where筛选器指定逻辑表达式呢?on和where的最大区别在于,如果在on应用逻辑表达式那么在第三步outer join中还可以把移除的行再次添加回来,而where的移除的最终的。

第六步:group by
分组,生成虚拟表 vt4

第七步:having
         对vt4应用having筛选器,生成虚拟表 vt5

第八步:select
处理select 列表,生成虚拟表vt6

第九步:distinct
将vt6 中重复的行去掉,生成虚拟表vt7

第十步:order   by
将vt7中的行按order by 子句中的列列表排序,生成一个游标vc8

第十一步: top
从vc8的开始处选择指定数量或比例的行,生成虚拟表vt9,并返回给调用者

 select语句扩展:Insert into  table1 (field1 )  Select field2 from table2
要求table1必须存在。

select field1 into table1 from table2
 要求table1不存在,在运行时会自动创建表名为table1,字段名为field1的一个表。

数据库的约束:

在学习之前我建议应该记住以下的几个单词:

Alter:改变;Primary:主要;Constraint:约束;Unique:唯一的、独特的;Foreign::外国的,外交的;Reference:参考,引用,提及;Cascade: 层叠,串联的

主要的约束有主键约束(PK) Primary key constraint、唯一约束(UQ) Unique constraint、默认约束(DF) Default constraint、检查约束(CK) Check constraint、外键约束(FK) Foreign key constraint。

 

 

jdbc的最重要的接口是: 
java.sql.DriverManager 处理驱动的调入并且对产生新的数据库连接提供支 持。 
java.sql.Connection 代表对特定数据库的连接。 
java.sql.Statement  代表一个特定的容器,来对一个特定的数据库执行SQL 语句。 
java.sql.ResultSet  控制对一个特定语句的行数据的存取。其中 java.sql.Statement 又有两个子类型: 
1. java.sql.PreparedStatement  用于执行预编译的SQL语句。 
2. java.sql.CallableStatement  用于执行对一个数据库内嵌过程的调用。 

jdbc编程时基本步骤总结:

(1)加载类的驱动:Class.forName(driverClass);

(2)通过driverManager获取数据库连接:DriverManager.getConnection(String url,String user,String password);

(3)通过Connection创建Statement对象方法有三种1、createStatement()创建基本的Statement 2、prepareStatement(String sql)根据传进来的sql 来创建预编译的Statement对象 3、prepareCall(String sql)根据传入的Sql来创建CallableStatement对象;

(4)根据statement执行sql语句:1、execute() 2、executeUpdate() 3、executeQuery()只能执行查询语句。

(5)操作结果集:next(),previous()等移动记录指针的方法。

(6)回收数据库资源。

下边给出一个小例子:

public class ConnMySql
{
 public static void main(String[] args) throws Exception
 {
  // 1.加载驱动
  Class.forName("com.mysql.jdbc.Driver");
  try(
   // 2.使用DriverManager获取数据库连接,
   // 其中返回的Connection就代表了Java程序和数据库的连接
   // 不同数据库的URL写法需要查驱动文档知道,用户名、密码由DBA分配
   Connection conn = DriverManager.getConnection(
    "jdbc:mysql://127.0.0.1:3306/select_test"
    , "root" , "32147");
   // 3.使用Connection来创建一个Statment对象
   Statement stmt = conn.createStatement();
   // 4.执行SQL语句
   /*
   Statement有三种执行sql语句的方法:
   1 execute 可执行任何SQL语句。- 返回一个boolean值,
     如果执行后第一个结果是ResultSet,则返回true,否则返回false
   2 executeQuery 执行Select语句 - 返回查询到的结果集
   3 executeUpdate 用于执行DML语句。- 返回一个整数,
     代表被SQL语句影响的记录条数
   */
   ResultSet rs = stmt.executeQuery("select s.* , teacher_name"
    + " from student_table s , teacher_table t"
    + " where t.teacher_id = s.java_teacher"))
  {
   // ResultSet有系列的getXxx(列索引 | 列名),用于获取记录指针
   // 指向行、特定列的值,不断地使用next()将记录指针下移一行,
   // 如果移动之后记录指针依然指向有效行,则next()方法返回true。
   while(rs.next())
   {
    System.out.println(rs.getInt(1) + "\t"
     + rs.getString(2) + "\t"
     + rs.getString(3) + "\t"
     + rs.getString(4));
   }
  }
 }
}
------- 
android培训java培训、期待与您交流! ----------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值