• 1. MySQL1:MySQL简介 2:MySQL列类型 3:SQL语句语法 4:MySQL图形界面操作
  • 2. 1:MySQL简介MySQL是一种关系数据库管理系统 MySQL是一种开源软件,免费使用 MySQL是目前市场上运行速度最快的数据库系统 MySQL能够工作在众多不同的平台上 MySQL用户权限设置简单、有效
  • 3. 1:MySQL简介端口:3306 默认用户:root 字符集:默认字符集latin1,应设置为gbk或utf-8 可安装图形化操作界面,方便操作 卸载mysql后重新安装出现Error Nr1045错误,是因为卸载不彻底。卸载后再停止mysql服务,并手动删除mysql安装目录,重新安装即可成功。 连接mysql 格式: mysql -h主机地址 -u用户名-p用户密码
  • 4. 2:MySQL列类型数值类型: SMALLINT: 2个字节 INT: 4个字节 // age int(10) INTEGER:INT的同义词 BIGINT : 8个字节 FLOAT : 4个字节 DOUBLE : 8个字节 //score float(10,2)MySQL支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。 显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。
  • 5. 2:MySQL列类型日期/时间类型: DATE: YYYY-MM-DD DATETIME: YYYY-MM-DD HH:MM:SS TIMESTAMP: YYYY-MM-DD HH:MM:SS TIME:HH:MM:SS YEAR:YYYY 时间戳TIMESTAMP列用于INSERT或UPDATE操作时可自动记录日期和时间.
  • 6. 2:MySQL列类型字符串(字符)类型 CHAR:固定长度字符串 sex char(2) VARCHAR:可变长度字符串 name varchar(20) 虽然VARCHAR使用起来较为灵活,但是从整个系统的性能角度来说,CHAR数据类型的处理速度更快,有时甚至可以超出VARCHAR处理速度的50%。 TEXT: BLOB:如果用户需要把大段文本保存到数据库内的话,可以选用TEXT或BLOB数据类型。TEXT和BLOB这两种数据类型基本相同,区别在于TEXT不区分大小写,而BLOB对字符的大小写敏感。
  • 7. 3:SQL语句语法SQL语言包含4个部分: 数据定义语言(如create,drop,alter等语句) 数据查询语言(select语句) 数据操纵语言(insert,delete,update语句) 数据控制语言(如commit,rollback等语句) 数据操纵语言针对表中的数据,而数据定义语言针对数据库或表
  • 8. 3:SQL语句语法数据定义语言 create database school; /*创建数据库*/ show databases; /*显示所有数据库select database()*/ use school; /*指定默认数据库*/ create table student( /*创建表*/ id int(10) primary key auto_increment, /*主键,自增*/ name varchar(8), sex char(1), score float(6,2) );
  • 9. 3:SQL语句语法数据定义语言 show tables; /*显示当前库中表清单*/ /* 显示指定表结构show columns from student;*/ describe student; show create table student; /*显示建表sql语句*/ drop table student; /*删除表*/ drop database school; /*删除数据库*/
  • 10. 3:SQL语句语法数据操纵语言 insert into student values("张三", "t",87.5); insert into student values(null,"张三","t",87.5); //insert into student (name,sex,score) values("张三","t",87.5); select * from student; insert into student values(null,"李四","男",89); alter table student modify sex char(2); insert into student values(null,"李四","男",89); select * from student;
  • 11. 3:SQL语句语法数据操纵语言 update student set sex ="女"; select * from student; update student set sex="男" where id=1; select * from student; update student set name="王五" ,score=100 where id=2; select * from student; delete from student where name="王五"; select * from student; delete from student; select * from student;
  • 12. 3:SQL语句语法数据查询语言(select语句) select * from student; select id,name,score from student; select * from student where id<5 and sex=“男”; select count(*) from student ; select max(score) from student; select id ,name,score from student order by score desc; select * from stu where name like "张%";
  • 13. 3:SQL语句语法更改表结构语句 alter table student add birth date; insert into student values(null,"赵六","男",100, now() ); alter table student change birth birthday date ; alter table student modify sex char(4) not null ; alter table student modify sex char(2) after birthday; alter table student rename as stu; alter table stu drop birthday;
  • 14. 3:SQL语句语法多表查询和外键关联 create table person( id int primary key, name varchar(6), sex char(2), age int(10) ); insert into person values(1,"张三","男",45); insert into person values(2,"李四","男",32); insert into person values(3,"王五","女",32); create table pet( id int auto_increment , name varchar(6), masterid int, primary key(id), constraint fk foreign key (masterid) references person(id) );
  • 15. 3:SQL语句语法多表查询和外键关联 insert into pet (name,masterid) values("happy",1); insert into pet (name,masterid) values(“lucky",1); ………… select * from person p1,pet p2 where p1.id=p2.masterid; select * from person p1,pet p2 where p1.id=p2.masterid and p1.id=1; alter table pet drop foreign key fk; alter table pet add constraint fk foreign key (masterid) references person(id) on delete cascade on update cascade; update person set id=6 where id=2; delete from person where id=6;
  • 16. 4:MySQL图形界面操作Navicat 管理数据库 管理表 管理用户 导入导出
  • 17. JDBC1.JDBC原理概述 2.JDBC举例 3. JDBC应用步骤
  • 18. 1.JDBC原理概述1:JDBC是一种用于执行SQL语句的Java API。它由一组用Java语言编写的类和接口组成。这个API由java.sql.*和javax.sql.*两个包中的一些类和接口组成,它为数据库开发人员提供了一个标准的API,使他们能够用纯Java API 来编写数据库应用程序。 2:JDBC是由Sun定义一组接口,由数据库厂商来实现,以驱动程序形式提供。 3:JDBC在使用前要先加载驱动,JDBC对于使用者要有一致性,对不同的数据库其使用方法都是相同的。
  • 19. 2.JDBC举例import java.sql.*; public class select { public static void main(String[] args) { Connection conn=null; Statement stmt=null; ResultSet rs=null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch (InstantiationException e) {e.printStackTrace(); } catch (IllegalAccessException e) {e.printStackTrace(); } catch (ClassNotFoundException e) {e.printStackTrace(); } try { conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","root"); stmt=conn.createStatement(); rs=stmt.executeQuery("select * from student"); while(rs.next()) {int id=rs.getInt("id");String name=rs.getString("name"); int age=rs.getInt("age");float score=rs.getFloat("score"); System.out.println(id+" "+name+ " "+age+" "+score); } }catch (SQLException e) {e.printStackTrace();} try {conn.close();} catch (SQLException e) {e.printStackTrace();} } }使用Statement查询表中所有记录并输出
  • 20. 2.JDBC举例import java.sql.*; public class select { public static void main(String[] args) { Connection conn=null; Statement stmt=null; ResultSet rs=null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch (InstantiationException e) {e.printStackTrace(); } catch (IllegalAccessException e) {e.printStackTrace(); } catch (ClassNotFoundException e) {e.printStackTrace(); } try { conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","root"); stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs=stmt.executeQuery("select * from student"); rs.absolute(3); System.out.println(rs.getString("name")); rs.afterLast(); while(rs.previous()) { int id=rs.getInt("id");String name=rs.getString("name"); int age=rs.getInt("age");float score=rs.getFloat("score"); System.out.println(id+" "+name+ " "+age+" "+score); } }catch (SQLException e) {e.printStackTrace();} try { conn.close();} catch (SQLException e) { e.printStackTrace();} } }使用Statement创建可上下滚动的结果集,查询表中所有记录并逆序输出
  • 21. 2.JDBC举例import java.sql.*; class select2 { public static void main(String args[]) { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch (InstantiationException e) {e.printStackTrace(); } catch (IllegalAccessException e) {e.printStackTrace(); } catch (ClassNotFoundException e) {e.printStackTrace(); } String url="jdbc:mysql://localhost:3306/school"; String user="root"; String password="root"; Connection conn; PreparedStatement pstmt; try { conn = DriverManager.getConnection(url, user, password); pstmt=conn.prepareStatement("insert into student values(null,?,?,? )"); pstmt.setString(1, "姜昆"); pstmt.setInt(2, 27); pstmt.setFloat(3, 85); pstmt.executeUpdate(); pstmt.setString(1, "张信哲"); pstmt.setInt(2, 25); pstmt.setFloat(3, 85);pstmt.executeUpdate(); Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery("select * from student"); while(rs.next()){ int id=rs.getInt("id"); String name=rs.getString("name");int age=rs.getInt("age"); float score=rs.getFloat("score"); System.out.println(id+" "+name+ " "+age+" "+score);} } catch (SQLException e) {e.printStackTrace();} try {conn.close();} catch (SQLException e) { e.printStackTrace();}} } }使用PreparedStatement向表中插入多条记录
  • 22. 3. JDBC应用步骤 1:加载一个Driver驱动 2:创建数据库连接(Connection) 3:创建一个Statement或PreparedStatment(发送sql) 4:执行sql语句 5:处理sql结果(select语句) 6:关闭Statement 7:关闭连接Connection。
  • 23. 3.1 注册加载一个Driver驱动加载JDBC驱动是通过调用方法java.lang.Class.forName(),下面列出常用的几种数据库驱动程序加载语句的形式 : Class.forName(“oracle.jdbc.driver.OracleDriver”);//使用Oracle的JDBC驱动程序 Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);//使用SQL Server的JDBC驱动程序 Class.forName(“com.ibm.db2.jdbc.app.DB2Driver”);//使用DB2的JDBC驱动程序 Class.forName(“org.gjt.mm.mysql.Driver”); Class.forName("com.mysql.jdbc.Driver");//使用MySql的JDBC驱动程序
  • 24. 3.2 创建数据库连接(Connection)与数据库建立连接的方法是调用DriverManager.getConnection(String url, String user, String password )方法。 举例: Connection conn=null; String url="jdbc:mysql://localhost:3306/school"; String user="root"; String password="root"; conn = DriverManager.getConnection(url, user, password);
  • 25. 3.2 创建数据库连接(Connection)String url="jdbc:db2://localhost:5000/sample"; String user="admin"; String password=""; Connection conn= DriverManager.getConnection(url,user,password); String url="jdbc:mysql://localhost/softforum?user=soft&password=soft1234"; Connection conn= DriverManager.getConnection(url); Connection con=DriverManager.getConnection(“jdbc:oracle:oci8:@db”,“scott”,“tiger”);//使用Oracle的JDBC OCI驱动程序 Connection con=DriverManager.getConnection("jdbc:oracle:thin:@host:8080:db","scott", "tiger");//使用Oracle的JDBC Thin驱动程序 String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; String user="sa"; String password=“”; Connection conn= DriverManager.getConnection(url,user,password);sqlservermysqldb2oracle
  • 26. 3.3 创建Statement,执行sql语句Statement对象用于将 SQL 语句发送到数据库中,或者理解为执行sql语句。 有三种 Statement对象: Statement:用于执行不带参数的简单SQL语句; PreparedStatement(从 Statement 继承):用于执行带或不带参数的预编译SQL语句; CallableStatement(从PreparedStatement 继承):用于执行数据库存储过程的调用。
  • 27. 3.3.1 创建Statement对象Statement 对象用Connection的方法createStatement()创建。createStatement()的语法形式为: public Statement createStatement() throws SQLException 如下列代码段中所示: conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); ResultSet rs=stmt.executeQuery("select * from student");
  • 28. 3.3.1 StatementStatement接口中的主要方法 ResultSet executeQuery (String sql) //返回单个结果集,通常用于SELECT语句 int executeUpdate (String sql) //返回本次操作影响的行数,通常用于insert,update,delete语句 boolean execute (String sql) //返回布尔值,通常用于insert,update,delete语句 void close () //关闭Statement对象
  • 29. 3.3.2.PreparedStatement如果需要多次执行一个SQL语句,可以使用PreparedStatement对象。在创建PreparedStatement对象时,通过传递不同参数值多次执行PreparedStatement对象,可以得到多个不同的结果。 优势:执行效率高、代码可读性强、安全性高 PreparedStatement对象用Connection的prepareStatement()方法创建。如: pstmt=conn.prepareStatement("insert into student values(?,?,? )"); pstmt.setString(1, "姜昆"); pstmt.setInt(2, 27); pstmt.setFloat(3, 85); pstmt.executeUpdate();
  • 30. 3.3.2.PreparedStatementPreparedStatement接口中的主要方法 void setString (int parameterIndex, String x) void setFloat (int parameterIndex, float x) void setInt (int parameterIndex, int x) void setDate (int parameterIndex, java.sql.Date x) void setDouble (int parameterIndex, double x) ResultSet executeQuery () //返回单结果集,通常用于SELECT语句 boolean execute () //返回布尔值,通常用于insert,update,delete语句 int executeUpdate () //返回操作影响的行数,通常用于insert,update,delete语句
  • 31. 3.3.2.PreparedStatement因为x的类型是java.sql.Types中的类型,而参数的类型是某种数据库中的数据类型,因此应该保证它们的类型能够相对应。一般来说,它们有下面的对应关系如右表所示: 其中的参数parameterIndex表示在构造PreparedStatement对象时”?”从左到右出现的位置,从1开始。
  • 32. 3.4 ResultSet对象ResultSet对象是executeQuery()方法的返回值,它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。 ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
  • 33. 3.4 ResultSet对象ResultSet对象自动维护指向当前数据行的游标。每调用一次next()方法,游标向下移动一行。 初始状态下记录指针指向第一条记录的前面,通过next()方法指向第一条记录。循环完毕后指向最后一条记录的后面。 有时候需要结果集的游标前后移动,这是可滚动结果集。为了获得滚动结果集,必须先用下面方法得到一个Statement对象:Statement st=con.createStatement(int type, int concurrency);根据type和concurrency的取值,当执行ResultSet rs=st.executeQuery()时,返回不同类型结果集。
  • 34. 3.4 ResultSet对象返回可上下滚动的结果集 stmt=conn.createStatement( int Type, int Concurrency ) Type决定滚动方式 ResultSet.TYPE_FORWARD_ONLY 游标只能向下滚动 ResultSet.TYPE_SCROLL_INSENSITIVE游标可上下滚动,当数据库变化时,当前结果集不变 ResultSet.TYPE_SCROLL_SENSITIVE游标可上下滚动,当数据库变化时,当前结果集不变 Concurrency决定是否可用结果集更新数据库 ResultSet.CONCUR_READ_ONLY不能用结果集更新数据库 ResultSet.CONCUR_UPDATABLE能用结果集更新数据库
  • 35. 3.4 ResultSet对象ResultSet接口中的主要方法 boolean next() 游标向下移动一条记录 boolean previous()游标向上移动一条记录 int getRow() 得到游标当前所指行的行号 boolean absolute(int row)游标移动到row指定记录 void first()将游标移动到第一条记录 void last()将游标移动到最后第一条记录 void beforeFirst():将游标移动到第一条记录之前 void afterLast()将游标移动到最后第一条记录之后
  • 36. 3.5 关闭 Statement对象和Connection对象作为一种好的编程风格,应在不需要Statement对象和Connection对象时显式地关闭它们。关闭Statement对象和Connection对象的语法形式为: public void close() throws SQLException 用户不必关闭ResultSet。当它的 Statement 关闭、重新执行或用于从多结果序列中获取下一个结果时,该ResultSet将被自动关闭。 注意:要按先ResultSet结果集,后Statement,最后Connection的顺序关闭资源,因为Statement和ResultSet是需要连接是才可以使用的,所以在使用结束之后有可能其他的Statement还需要连接,所以不能先关闭Connection。
  • 37. 习题使用JDBC的基本过程是什么? 在mysql的school数据库中建立一个student表,包含学号id、姓名name、年龄age、生日birthday,系别department。编写java类接收来自客户端的学生信息,并存入数据库表中;把数据库表中所有记录输出到屏幕。 在mysql的pubs数据库中建立一个books表,包含书号bookid、书名name、出版社press、作者author和出版日期pdate字段。编写java类实现对books表的分别按书号、书名、作者的查询,并且实现信息的插入和删除。