您的位置:首页 > 数据库 > MySQL

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

2013-04-08 20:36 148 查看
 ------- 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培训、期待与您交流!
----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: