MySQL基础和jdbc基础操作

来源:互联网 发布:声音编辑软件中文版 编辑:程序博客网 时间:2024/06/08 02:30

*0 案例:

   a)JavaScript中使用正则表达式,在JS中正则表达式的定界符是://

var regexp = /^[0-9]+$/;

if(regexp.test(num));如果符合正则表达式的规则,返回true,否则返回false

<body>

    <script type="text/javascript">

    varnum = 123;

     var regexp = /^[0-9]+$/;

alert(regexp.test(num));

    </script>

  </body>

 

 

 1 什么是数据库

   1)SQL=Structure Query Language

   2)存数据的仓库/集合,并有一定的规则结构

   3)SQL是客户端操作数据库一种工具/命令,主要以存取为主

 

 2 各种常用数据库简介

   Oracle/Java

   SQLServler/Microsoft

   DB2/IBM

   ... ...

   MySQL->Linux+Apache+MySQL+PHP(最适合)

 

 3 SQL[通用/特定]与数据库的关系

   1)每种关系型数据库都支持的SQL命令,叫通用SQL

   2)每种关系型数据库都根据自身数据库的特点,量身定作的SQL,叫特定SQL

 

*4 MySQL数据库的安装,设置,进入和退出

   mysql > mysql -u root -p回车   

           ****回车

   mysql > exit回车

 

 5 数据库服务器、数据库和表的关系

   1:N:M的关系

   

*6 数据在数据库中的存储方式

   

*7 创建/使用/查看/删除数据库

   create database 数据库名;(以分号结束)SQL命令大小写无关   

   show databases;

   use 数据库名;

   

*8 修改、备份、恢复数据库数据

   备份:

   c:\> mysqldump -u root -p mydb2 > d:\mydb2.sql回车(可以无分号结束)

        密码回车

        注意:该SQL命令是MySQL特有的,必须是MySQL环境外执行,即WindowXp环境中执行

   恢复:

   mysql:\> source d:\mydb2.sql;回车(需要分号结束)

        注意:该SQL命令是MySQL特有的,必须是MySQL环境中执行。

 

 9 MySQL支持数据类型简介

   (1)Date/Datetime/TimeStamp,定界符使用''"",但部份数据库可能不支持"",优先推荐''作为定界符,对于日期类型,                                    MySQL数据库有一个的判段-功能

   (2)varchar(变长)/char(定长)

   (3)Text(大于65536字符的数据)/Blob(存储二进制多媒体数据,例如Mp3等),该二类型都有四个子类型,根据存储内容的大                                      小进行选择

   (4)INT型有带符号和无符号之分,int(5)表示int默认为5位,如果插入id值,小于5位,左补空格,如果插入id值,大于5位,按                                照插入值,但必须满足int类型的大小确定

   (5)FLOATMD),D表示小数点后的D位,按四舍五入计算,M表示除小数点外的所有位数总和

  

 

*10 创建/查看/修改/删除表

    create table 表名  

    show create table 表名

    desc 表名

    drop table 表名

    MySQL(MyISAM数据库引擎和InnoDB(支持表间查询,事务安全,)

 

11 MySQL解决插入中文乱码问题(WindowXP平台)

   二种解决方案:

   a)在当前MySQL客户端修改输入和输出的MySQL环境变量为GBKGB2312,注意,该种方式只在当前窗口中有效

   b)修改MySQL目录下的my.ini文件,将客户端的缺省编码方式改为GBKGB2312,注意,需要重新启动MySQL服务

   

*12 表的 增删改 操作

   a)insert

   b)update

   3)delete from truncate tabledrop table

     delete from:按行删除表中的所有记录,但会保留表,适合删除数据量不大的数据,可按条件删除

     truncate table:复制原表结构-〉一次性删除整表-> 自动恢复原表结构,适合删除数据量较大的数据,不能按条件删除

     drop table:删除表本身

     删除记录时,一定要留意表间的关联关系

   

*13 表的 查询   操作  

    (1)select distinct/*/列名 from表名

    (2)select 表达式/对列名加别名from 表名

       NULL+X=NULL

    (3)where子句,出现在from后面,where是按行筛选

    (4)逻辑运算和关系运算

    (5)排序:NULL值为最小,使用order by子句,默认升序,order by子句必须放置在最后

   

 

 

14 复合函数

   (1)count()函数,统计之用,不统计NULL

   (2)sum()函数,统计和之用,不要统计非数值,如果统计非数值,返回0

 

 

15 表的约束

 

16 表的关联

 

 

0 合计函数

  avg()

  max(),min(),当max()min()函数位于日期类型时,分别取得最近日期和最早日期

 

1 表的完整性

  (1)实体完整性:每条记录有一个唯一标识符,通常用无任何业务含义的字段表示

  (2)参照完整性:一张表的某个字段必须引用另一张表的某个字段值

  (3)域完整性:域即单元数据,域中的数值必须符合一定的规则

 

2 键的概念

  (1)主键:只有唯一字段

  (2)组合主键:由多个字段组合起来,形成唯一字段

  (3)外键:针对多张表之间的关联

 

3 主键的特点

  (1)主键不能重复,唯一,

  (2)主键不能为NULL,非空

  (3)auto_incrementMySQL特有的,默认从1开始,该ID值与表同生亡

  (4)多人项目中,通常使用UUID来生成唯一的主键值,便于多个合并数据时依然保持实体完整性

 

4 唯一约束的特点

  (1)NULL值不能重复

  (2)可以插入多个NULL

  (3)'NULL'空串和NULL是不同的概念

 

5 非空约束特点

  (1)不能插入NULL

  (2)主键约束=NULL约束+唯一约束

 

6 外健特点

  (1)外键值必须来源于所引用别一个表主键值,或NULL

  

*7 关联关系

  (1)一对一(外健根业务有关)  

  (2)一对多或多对一(外键放置在多方)

  (3)多对多(外健放置在关联表中,即将一个多对多拆分成二个一对多关系)

 

8 什么是JDBC?为什么使用JDBC

  1)SUN公司为使Java程序灵活的访问各种不同的关系型数据库提供的规则。

  2)为什么使用JDBC

a)降低Java程序操作数据库的成本

b)使Java程序灵活移植

 

 

*9 祥解JDBC连接数据库的各个步骤

package cn.itcast.web.jdbc;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

//体验JDBC开发的过程

public class Demo1 {

public static void main(String[]args) throws Exception {

//注册数据库的驱动

//DriverManager.registerDriver(new Driver());

//利用反射机制间接加载数据库驱劝

Class.forName("com.mysql.jdbc.Driver");

//取得与MySQL数据库连接的桥梁

Connection conn = DriverManager.getConnection(

"jdbc:mysql://127.0.0.1:3306/mydb2","root","root");

//创建封装SQL命令的对象

String sql = "select * from user";

Statement stmt = conn.createStatement();

//执行SQL命令,并返回符合条件的记录集合

ResultSet rs = stmt.executeQuery(sql);

//处理结果集合

while(rs.next()){

int id =rs.getInt("id");

String name = rs.getString("name");

String gender = rs.getString("gender");

float salary =rs.getFloat("salary");

System.out.println(id+":"+name+":"+gender+":"+salary);

}

//依次关闭所用过的连接对象

rs.close();

stmt.close();

conn.close();

}

}

 

 

  1)注册驱动:DriverManager.registerDriver(new com.mysql.jdbc.Driver());

    java.sql.Driver(接口)-com.mysql.jdbc.Driver(实现类)

 (首先返回true)boolean acceptsURL(String url)

           查询驱动程序是否认为它可以打开到给定 URL 的连接。

 (然后)Connection connect(String url, Properties info)

           试图创建一个到给定 URL 的数据库连接。

 

    注意:上述代码会向DriverManager注册二次相同的MySQL驱动,其中一次在Driver实现类中

    项目中推荐使用以下代码间接注册数据库驱动:

Class.forName("com.mysql.jdbc.Driver");

 

优点:

a)只注册一次

b)无需导入与具体数据库驱动相关的包

   

  2)获取数据库连接对象:

Connection conn = DriverManager.getConnection(

"jdbc:mysql://127.0.0.1:3306/mydb2","root","root");   

  

  3)关闭流

    a)依次按resul->statement->connection顺序关闭

    b)在能完成业务的情况下,尽早关闭

  

 

*10 JDBC的六个固定步骤

   1,注册数据库驱动[利用反射]

   2,取得数据库连接对象Connection

   3,创建SQL对象

   4,执行SQL命令,并返回结果集

   5,处理结果集

   6,依次关闭结果集  

 

*11 使用JDBC完成CURD操作

   insert/update/delete----Statement.executeUpdate(sql):返回值表示影响记录的行数

   select------------------Statement.exeucteQuery():返回值表示符合条件的记录

   create------------------ ?

   drop-------------------- ?

 

package cn.itcast.web.jdbc;

 

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

 

import org.junit.Test;

 

//基于JDBCCURD操作

public class Crud {

@Test

public void create(){

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

String sql = "insert into user(id,name,gender,salary) values(4,'丝丝','felmale',3000)";

try {

conn = JdbcUtil.getMySqlConnection();

stmt = conn.createStatement();

int i = stmt.executeUpdate(sql);

System.out.println(i>0?"成功":"失败");

} catch (Exception e) {

e.printStackTrace();

}finally{

JdbcUtil.close(rs);

JdbcUtil.close(stmt);

JdbcUtil.close(conn);

}

}

@Test

public void read(){

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

String sql = "select * from user where gender='male'";

try {

conn = JdbcUtil.getMySqlConnection();

stmt = conn.createStatement();

rs = stmt.executeQuery(sql);

while(rs.next()){

String name = rs.getString("name");

String gender = rs.getString("gender");

System.out.println(name+":"+gender);

}

} catch (Exception e) {

e.printStackTrace();

}finally{

JdbcUtil.close(rs);

JdbcUtil.close(stmt);

JdbcUtil.close(conn);

}

}

@Test

public void update(){

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

String sql = "update user set gender='female' where id = 8";

try {

conn = JdbcUtil.getMySqlConnection();

stmt = conn.createStatement();

int i = stmt.executeUpdate(sql);

System.out.println(i>0?"成功":"失败");

} catch (Exception e) {

e.printStackTrace();

}finally{

JdbcUtil.close(rs);

JdbcUtil.close(stmt);

JdbcUtil.close(conn);

}

}

@Test

public void delete(){

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

String sql = "delete from user where salary IS NULL";

try {

conn = JdbcUtil.getMySqlConnection();

stmt = conn.createStatement();

int i = stmt.executeUpdate(sql);

System.out.println(i>0?"成功":"失败");

} catch (Exception e) {

e.printStackTrace();

}finally{

JdbcUtil.close(rs);

JdbcUtil.close(stmt);

JdbcUtil.close(conn);

}

}

@Test

public void read(String name){

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

String sql = "select * from user where name='"+name+"'";

System.out.println("sql="+sql);

try {

conn = JdbcUtil.getMySqlConnection();

stmt = conn.createStatement();

rs = stmt.executeQuery(sql);

while(rs.next()){

//while(rs!=null)

name = rs.getString("name");

String gender = rs.getString("gender");

System.out.println(name+":"+gender);

}

} catch (Exception e) {

e.printStackTrace();

}finally{

JdbcUtil.close(rs);

JdbcUtil.close(stmt);

JdbcUtil.close(conn);

}

}

public void createTable(String tableName){

}

public void dropTable(String tableName){

}

public static void main(String[] args) {

Crud crud = new Crud();

//crud.read(" 'or true or' ");

crud.createTable("system");

crud.dropTable("system");

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击