mysql数据库编程
![mysql数据库编程](https://img.360docs.net/img17/0phnh1jl3r2ojer0wv6-71.webp)
![mysql数据库编程](https://img.360docs.net/img17/0phnh1jl3r2ojer0wv6-92.webp)
Mysql数据库
◆了解mysql数据库
◆掌握mysql数据库的安装及配置
◆掌握mysql中的基本命令
Mysql是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16日被Sun公司收购。目前MySQL被广泛地应用在internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开发源码这一特点,许多中小网站为了降低网站总体拥有成本选择了MySQL作为网站数据库。其官方网址:https://www.360docs.net/doc/109176453.html, 连接数据命令:mysql –u用户名–p密码
查看mysql帮助命令:?
创建数据库:creat database 数据库名称;
删除数据库:drop database 数据库名称;
使用数据库:use 数据名称;
创建数据库表:creat table 表名(字段名1 字段类型[DEFAULT 默认值] [约束],
字段名2 字段类型[DEFAULT 默认值] [约束],
。。。
字段名n 字段类型[DEFAULT 默认值] [约束]);例如:creat table mytable(id int auto_increment primery key,
name varchar(14)not aull,
password varchar(32) not null,
age int not null);
删除数据库表:drop table 表名称;
查看表结构:desc 表名称;
查看全部数据库:show databases;
查看一个数据库的全部表:show tables;
运行SQL脚本:\. ***.ql
SQL语法基础:
SQL(Structured Query Language,结构化查询语言)是一个功能强大的数据库语言。SQL通常用于与数据库的通讯。ANSI(美国国家标准学会)声称,SQL是关系数据库管理系统的标准语言。现在的数据库系统中,基本上都支持标准的SQL语法的。
SQL分类:SQL功能强大,概括起来,它可以分成以下几组:
DML(Data Manipulation Language,数据操作语言)-----用于检索或者修改数据;--是开发中经常使用到的。
DDL(Data Definition Language,数据定义语言)-----用于定义数据结构,如创建、修改或者删除数据库对象;
DCL(Data Control Language,数据控制语言)-----用于定义数据库用户的权限。
插入表信息:insert into 表名称values(按字段顺序及对应类型分别为各字段赋值);
执行以上插入信息:commit;
Mysql的数据类型
mysql数据类型(2)
增加数据:
Insert into 表名称(字段1,字段2,字段3,。。。,字段n)values(值1,值2,值3,。。。,值n);
删除数据:delete from 表名称[删除条件];//若未指出删除条件,则表示删除一张表的全部数据,一般在描述条件时都是使用id表示。
更新数据:update 表名称set 字段1=值1,。。。字段n=值n [where更新条件];简单查询语句:select {* |column alias} from 表名称[where condition(s)];
对于数据库操作而言,查询是最复杂的了,查询分为以下几种:
简单查询
限定查询,指定查询的条件
多表查询
分组统计
子查询
交、并、补
例如1: //查询出姓名或密码中包含字母“m”的用户。
select * from user where nam like ‘%m%’ or password like ‘%m%’;
例如2://查询部分数据,有分页功能
select * from user where name like ‘%m%’or password like ‘%m%’ limt 10,5; JDBC操作步骤及数据库连接操作
目标:
?掌握JDBC的操作步骤
?掌握数据库驱动程序的配置方法
?可以使用JDBC进行数据库连接
JDBC本身是一个标准,所以其操作步骤是固定的,以后需要修改很少的一部分代码就可以达到不同数据库间的连接转换功能。
JDBC操作步骤
数据库安装并配置完成后,就可以按照以下的步骤进行数据库的操作了:
(1)加载数据库驱动程序:各个数据库都会提供JDBC的驱动程序开发包,直接把JDBC操作所需要的开发包(一般为*.jar或*.zip)直接配置到classpath路径即
可。
(2)连接数据库:根据各个数据库的不同,连接的地址也不同,此连接地址将由数据库厂商提供,一般在使用JDBC连接数据库的时候都要求用户输入数据库连
接的用户名和密码,本章使用的是mysql数据库,所以用户名为“root”,密码
为“mysqladmin”,用户在取得连接之后才可以对数据库进行查询或更新的操
作。
(3)使用语句进行数据库操作:数据库操作分为更新和查询两种操作,除了可以使用标准的SQL语句之外,对于各个数据库也可以使用其自己提供的各种命令。
(4)关闭数据库连接:数据库操作完毕之后需要关闭连接以释放资源。
注意:如果要想连接数据库,则肯定要使用连接地址。而且数据库的连接时非常有限的,所以打开
之后一定要关
闭。
JDBC操作步
骤
(1)配置数据
库的驱动程序
数据库的驱动
程序是由各个数据库生产商提供,只要在java中要想连接数据库,则肯定各个DB要有所支持。
下载地址:https://www.360docs.net/doc/109176453.html,/downloads/connector/j/5.1.html
假如将下载好的驱动程序放在C盘目录中。所以此时直接修改classpath即可,在windows中的环境中直接修改即可,如果没有classpath则自己增加一个新的。
(2)加载驱动程序
通过Class.forName()语句可以加载一个驱动程序。
Class实例化需要一个完整的包.类名称,此:“包.类”名称的路径就应该是驱动程序的名称。例如:
public class ConnectionDemo01{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
public static void main(String args[]){
try{
Class.forName(DBDRIVER) ; // 加载驱动程序
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
}
}
(3)连接及关闭数据库
数据库驱动程序可以正常加载的话,下面就可以连接数据库了,使用DriverManager类进行连接操作,DriverManager类中的常用方法如下:
注意:在DriverManger中,提供的主要操作就是得到一个数据库的连接,getConnection
()方法就是取得连接对象,此方法返回的类型是Connection对象,不管使用哪种方式连接,都必须提供一个数据库的连接地址,如果在连接数据库的时候需要用户名和密码,则还需要将用户名和密码设置上。
数据库在连接的时候肯定需要一个连接地址,这些连接地址将由各个数据库生产商提供的。Mysql数据库的连接地址格式:jdbc:mysql://IP地址:端口号/数据库名称
数据库连接地址的形式:
JDBC虽然提供了与平台无关的数据库操作,但是各个数据库的连接地址是有差异的,JDBC的连接地址实际上是由以下的三个部分组成。
jdbc协议:JDBC URL中的协议总是jdbc;
子协议:驱动程序或数据库连接机制(这种机制可由一个或多个驱动程序支持)
的名称,例如:mysql
子名称:一种标识数据库的方法。必须遵循“//主机名:端口/子协议”的标
准URL命名约定,例如://localhost:3306/mldn
Connection:通过DriverManager取得Connection对象之后,实际上就表示数据库连接上了,
连接上数据库之后就可以进行数据库的更新及查询操作,但是操作的最后数据库连接必须关闭。
例如:ConnectionDeMO02.java
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
public class ConnectionDemo02{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "mysqladmin" ;
public static void main(String args[]){
Connection conn = null ; // 数据库连接
try{
Class.forName(DBDRIVER) ; // 加载驱动程序
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
try{
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
}catch(SQLException e){
e.printStackTrace() ;
}
System.out.println(conn) ; // 如果此时可以打印表示连接正常
try{
conn.close() ; // 数据库关闭
}catch(SQLException e){
e.printStackTrace() ;
}
}
}
执行数据库的更新操作
目标:
?可以使用Connection对象取得Statement实例
?可以使用Statement进行数据增加、修改、删除操作
Statement接口:
数据库可以连接之后,下面就可以进行数据库的具体操作了,如果要想对数据库进行操作,则肯定要使用Statement接口完成,此接口可以使用Connection接口中提供的createStatement()方法实例化。此接口中定义了以下的常用方法:
以user表为例,user表的建立如下:
范例:InsertDemo01.java
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.Statement ;
public class InsertDemo01{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "mysqladmin" ;
public static void main(String args[]) throws Exception { // 所有的异常抛出Connection conn = null ; // 数据库连接
Statement stmt = null ; // 数据库操作
Class.forName(DBDRIVER) ; // 加载驱动程序
String sql = "INSERT INTO user(name,password,age,sex,birthday) "+
" VALUES ('李兴华','https://www.360docs.net/doc/109176453.html,',30,'男','2008-08-27')" ;
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
stmt = conn.createStatement() ; // 实例化Statement对象
stmt.executeUpdate(sql) ; // 执行数据库更新操作
stmt.close() ; // 关闭操作
conn.close() ; // 数据库关闭
}
}
注意:一般JDBC中要进行正着打开,倒着关闭。
ResultSet接口
掌握ResultSet接口的主要作用
使用ResultSet接口查询数据
数据库的操作中要分为更新和查询操作,查询操作的时候会将全部的查询结果返回给用户。使用SQL中的select语句可以将数据库的全部结果查询出来,在JDBC的操作中数据库的所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容。
在操作的时候使用Statement中的executeQuery()方法进行数据库的查询操作。此方法的返回值就是ResultSet接口。
范例:ResultSetDemo01.java
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.Statement ;
import java.sql.ResultSet ;
public class ResultSetDemo01{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "mysqladmin" ;
public static void main(String args[]) throws Exception {
Connection conn = null ; // 数据库连接
Statement stmt = null ; // 数据库的操作对象
ResultSet rs = null ; // 保存查询结果
String sql = "SELECT id,name,password,age,sex,birthday FROM user" ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
stmt = conn.createStatement() ;
rs = stmt.executeQuery(sql) ;
while(rs.next()){ // 依次取出数据
int id = rs.getInt("id") ; // 取出id列的内容,也可以通过编号比如rs.getInt(1)获得
String name = rs.getString("name") ; // 取出name列的内容
String password = rs.getString("password") ; // 取出password列的内容
int age = rs.getInt("age") ; // 取出age列的内容
String sex = rs.getString("sex") ; // 取出sex列的内容
java.util.Date d = rs.getDate("birthday") ; // 取出birthday列的内容
System.out.print("编号:" + id + ";") ;
System.out.print("姓名:" + name + ";") ;
System.out.print("密码:" + password + ";") ;
System.out.print("年龄:" + age + ";") ;
System.out.print("性别:" + sex + ";") ;
System.out.println("生日:" + d + ";") ;
System.out.println("-----------------------") ;
}
rs.close() ;
stmt.close() ;
conn.close() ; // 数据库关闭
}
}
PreparedStatement接口
◆掌握PreparedStatemen接口的工作原理
◆可以使用PreparedStatemen进行数据库的更新及查询操作
PreparedStatemen是Statement的子接口,属于预处理操作,与直接使用Statement不同的是,PreparedStatemen在
操作时,是先在数据表之中准
备好了一条SQL语句,但是此
SQL语句的具体内容暂时不设
置,而是之后再进行设置,以
插入数据为例,使用
PreparedStatemen插入数据
时,数据表中的指针首先指向最后一条数据之后,但是里面的内容不不知道的,而是等待用户分别设置。
PreparedStatemet的基本操作方法
注意:(1)关于日期的输入问题,在正常情况下都使用java.util.Date表示日期,但是在PreparedStatement中如果想使用日期则必须使用java.sql.Date类型。
(2)在PreparedStatement中定义了setDate()方法,此方法可以设置日期内容,但是此方法使用时,后面的Date类型变量是java.sql.Date,而不是java.util.Date,所以如果要想将一个java.util.Date类型的内容变为java.sql.Date类型的内容应该使用如下的语句形式:
例如:String birthday=“2011-01-08”;
Java.util.Date temp=null;
//通过SimpleDateFormat类将一个字符串变为java.util.Date类型
temp=new SimleDateFormat(“YYYY-MM-dd”)。parse(birthday);
//通过java.util.Date取出具体的日期数,并将其变为java.sql.Date类型
java.sql.Date bir=new java.sql.Date(temp.getTime());
范例:使用PreapredStatement执行数据库的插入操作,PreparedStatementDemo01。Java import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.PreparedStatement ;
import java.text.SimpleDateFormat ;
public class PreparedStatementDemo01 {
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "mysqladmin" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
PreparedStatement pstmt = null ; // 数据库操作
String name = "李兴华" ; // 姓名
String password = "https://www.360docs.net/doc/109176453.html," ; // 密码
int age = 30 ; // 年龄
String sex = "男" ; // 性别
String birthday = "2007-08-27" ; // 生日
java.util.Date temp = null ;
temp = new SimpleDateFormat("yyyy-MM-dd").parse(birthday) ;
java.sql.Date bir = new java.sql.Date(temp.getTime()) ;
String sql = "INSERT INTO user(name,password,age,sex,birthday) VALUES (?,?,?,?,?) " ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
pstmt = conn.prepareStatement(sql) ; // 实例化PreapredStatement对象
pstmt.setString(1,name) ;
pstmt.setString(2,password) ;
pstmt.setInt(3,age) ;
pstmt.setString(4,sex) ;
pstmt.setDate(5,bir) ;
int t = pstmt.executeUpdate() ; // 执行更新
System.out.println(t);
pstmt.close() ;
conn.close() ; // 数据库关闭
}
}
范例2:通过PreparedStatement进行查询操作
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.ResultSet ;
import java.sql.PreparedStatement ;
import java.text.SimpleDateFormat ;
public class PreparedStatementDemo02 {
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "mysqladmin" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出Connection conn = null ; // 数据库连接
PreparedStatement pstmt = null ; // 数据库操作
String keyWord = "李" ; // 设置查询关键字
ResultSet rs = null ; // 接收查询结果
String sql = "SELECT id,name,password,age,sex,birthday " +
" FROM user WHERE name LIKE ? OR password LIKE ? OR sex LIKE ?" ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
pstmt = conn.prepareStatement(sql) ; // 实例化PreapredStatement对象
pstmt.setString(1,"%"+keyWord+"%") ;
pstmt.setString(2,"%"+keyWord+"%") ;
pstmt.setString(3,"%"+keyWord+"%") ;
rs = pstmt.executeQuery() ; // 执行查询
while(rs.next()){
int id = rs.getInt(1) ;
String name = rs.getString(2) ;
String pass = rs.getString(3) ;
int age = rs.getInt(4) ;
String sex = rs.getString(5) ;
java.util.Date d = rs.getDate(6) ;
System.out.print("编号:" + id + ";") ;
System.out.print("姓名:" + name + ";") ;
System.out.print("密码:" + pass + ";") ;
System.out.print("年龄:" + age + ";") ;
System.out.print("性别:" + sex + ";") ;
System.out.println("生日:" + d + ";") ;
System.out.println("-------------------------") ;
}
rs.close() ;
pstmt.close() ;
conn.close() ; // 数据库关闭
}
}
在开发中到底是使用PreapredStatemet还是Statement接口操作呢?实际开发中不会使用Statement接口的。因为其采用的是拼凑的SQL语句形式,那么这样一来就有可能造成SQL 的注入漏洞。
CallableStatemet接口
了解MySQL存储过程的建立
了解存储过程中参数传递的三种方式
了解CallableStatement调用存储过程的操作
CallableStatement接口的常用方法
由于现在在开发过程中,存储过程用的是越来越少了,因此制作了解。
CallableStatement主要是调用数据库中的存储过程,它也是Statement接口的子接口,在使用CallableStatement的时候可以接收过程的返回值。
建立存储过程:
DELIMITER //
DROP PROCEDURE myproc // -- 删除过程
CREATE PROCEDURE myproc(IN p1 int,INOUT p2 int,OUT p3 int)
BEGIN
SELECT p1,p2,p3 ; -- 输出p1、p2、p3的内容
SET p1=10 ;
SET p2=20 ;
SET p3=30 ;
END
//
DELIMITER ;
SET @x1=70 ; -- 定义变量x1,内容为70
SET @x2=80 ; -- 定义变量x2,内容为80
CALL myproc(@x1,@x2,@x3) ;
SELECT @x1,@x2,@x3 ;
范例:
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.CallableStatement ;
import java.sql.Types ;
public class ProcDemo{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "mysqladmin" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出Connection conn = null ; // 数据库连接
CallableStatement cstmt = null ; // 数据库操作
String sql = "{CALL myproc(?,?,?)}" ; // 调用过程
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
cstmt = conn.prepareCall(sql) ;
cstmt.setInt(1,70) ; // 设置第一个参数是70
cstmt.setInt(2,80) ; // 设置第二个参数是80
cstmt.registerOutParameter(2,Types.INTEGER) ;
cstmt.registerOutParameter(3,Types.INTEGER) ;
cstmt.execute() ; // 执行过程
System.out.println("INOUT的返回值:" + cstmt.getInt(2)) ;
System.out.println("OUT的返回值:" + cstmt.getInt(3)) ;
cstmt.close() ;
conn.close() ; // 数据库关闭
}
}
使用元数据分析数据库
DatabaseMetaData,使用元数据可以分析数据库的基本信息,包括版本,数据库的名称等等,或者得到指定表的主键,常用方法包括:
范例:
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.DatabaseMetaData ;
import java.sql.ResultSet ;
public class DatabaseMetaDataDemo{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "mysqladmin" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
DatabaseMetaData dmd = null ; // 数据库元数据
ResultSet rs = null ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
dmd = conn.getMetaData() ; // 实例化对象
System.out.println("数据库名称:" + dmd.getDatabaseProductName() ) ;
System.out.println("数据库版本:" + dmd.getDatabaseMajorVersion() + "."
+ dmd.getDatabaseMinorVersion()) ;
rs = dmd.getPrimaryKeys(null,null,"user") ;// 取得user表的主键
while(rs.next()){
System.out.println("表类别:" + rs.getString(1)) ;
System.out.println("表模式:" + rs.getString(2)) ;
System.out.println("表名称:" + rs.getString(3)) ;
System.out.println("列名称:" + rs.getString(4)) ;
System.out.println("主键序列号:" + rs.getString(5)) ;
System.out.println("主键名称:" + rs.getString(6)) ;
}
conn.close() ; // 数据库关闭
}
}
ResultSetMetaData:使用它可以获取关于ResultSet对象中列的类型和属性信息的对象,ResultSetMetaData存储了ResultSet的MetaData,可以通过以下的方法取得一些ResultSet 的信息。
范例:
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.ResultSetMetaData ;
import java.sql.PreparedStatement ;
public class ResultSetMetaDataDemo{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "mysqladmin" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
ResultSetMetaData rsmd = null ; // 数据库元数据
PreparedStatement pstmt = null ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
String sql = "SELECT id,name,password,age,sex,birthday FROM user" ;
pstmt = conn.prepareStatement(sql) ; // 实例化对象
rsmd = pstmt.getMetaData() ;
System.out.println("一共返回" + rsmd.getColumnCount() + "条数据。") ;
if(rsmd.isAutoIncrement(1) ){
System.out.println(rsmd.getColumnName(1)+"列是自动增长的。") ;
}
conn.close() ; // 数据库关闭
}
}