#2019-2020-4 《Java 程序设计》第九周总结

2019-2020-4 《Java 程序设计》第九周知识总结

第十一章:JDBC与MySQL数据库
11.1 MySQL数据库管理系统
下载安装:

11.2 启动MySQL数据库服务器
具体启动过程请看书。
命令:mysqld--initialize-insecure其作用是初始化data目录;
命令:mysqladmin -u root -p password其作用是修改root密码。

11.3 MySQL客户端管理工具

11.4 JDBC
一、 简介:JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
二、程序经常使用JDBC进行如下的操作 :
(1)与一个数据库建立连接。
(2)向数据库发送SQL语句。
(3)处理数据库返回的结果。

11.5 连接数据库
1.下载JDBC-MySQL数据库驱动
2.加载JDBC-MySQL数据库驱动
应用程序负责加载JDBC-MySQL数据库驱动的代码如下:

try{  Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){}

3.连接数据库
一、java.sql包中的DriverManager类有两个用于建立连接的类方法(static方法)
(1)Connection getConnection(java.lang.String, java.lang.String, java.lang.String);
(2)Connection getConnection(java.lang.String);
这两个方法都可能抛出SQLException异常,DriverManager类调用上述方法可以和数据库建立连接,即可返回一个Connection对象。
使用Connection getConnection(java.lang.String) 方法建立连接的代码如下:

Connection con;
String uri = 
"jdbc:mysql://192.168.100.1:3306/students?user=root&password=&useSSL=true";
try{
   con = DriverManager.getConnection(uri); //连接代码
 }
catch(SQLException e){
    System.out.println(e);
}

二、如果root用户密码是xx,将&password=更改为&password=xx即可
使用Connection getConnection(java.lang.String, java.lang.String, java.lang.String)方法建立连接的代码如下:

Connection con;
String uri = "jdbc:mysql:// 192.168.100.1:3306/students? useSSL=true";
String user ="root";
String password ="";
try{  
    con = DriverManager.getConnection(uri,user,password); //连接代码
 }
catch(SQLException e){
    System.out.println(e);
}

4.注意汉字问题
需要特别注意的是,如果数据库的表中的记录有汉字,那么在建立连接时需要额外多传递一个参数characterEncoding,并取值gb2312或utf-8

String uri = "jdbc:mysql://localhost/students?useSSL=true&characterEncoding=utf-8";
 con = DriverManager.getConnection(uri, "root","");  //连接代码

11.6 查询操作
1.向数据库发送SQL查询语句
首先使用Statement声明一个SQL语句对象,然后让已创建的连接对象con调用方法createStatement()创建这个SQL语句对象,代码如下:

try{Statement sql = con.createStatement();
}
catch(SQLException e){}

2.处理查询结果
(1)有了SQL语句对象后,这个对象就可以调用相应的方法实现对数据库中表的查询和修改,并将查询结果存放在一个ResultSet类声明的对象中。也就是说SQL查询语句对数据库的查询操作将返回一个ResultSet对象,ResultSet对象是按“列”(字段)组织的数据行构成。
ResultSet rs = sql.executeQuery("SELECT * FROM students");
结果集rs的列数是4列,刚好和students的列数相同
(2)而对于:ResultSet rs = sql.executeQuery("SELECT name,height FROM students");
(3)ResultSet对象一次只能看到一个数据行,使用next()方法移到下一个数据行,获得一行数据后,ResultSet对象可以使用getXxx方法获得字段值(列值),将位置索引(第一列使用1,第二列使用2等)或列名传递给getXxx方法的参数即可。
(4)无论字段是何种属性,总可以使用getString(int columnIndex)或getString(String columnName)方法返回字段值的串表示。
3.关闭连接
ResultSet对象和数据库连接对象(Connection对象)实现了紧密的绑定,一旦连接对象被关闭,ResultSet对象中的数据立刻消失。这就意味着,应用程序在使用ResultSet对象中的数据时,就必须始终保持和数据库的连接,直到应用程序将ResultSet对象中的数据查看完毕
如果在代码
ResultSet rs = sql.executeQuery("SELECT * FROM students");
之后立刻关闭连接:con.close();,程序将无法获取rs中的数据。

11.6.1 顺序查询
所谓顺序查询,是指ResultSet对象一次只能看到一个数据行,使用next()方法移到下一个数据行,next()方法最初的查询位置,即游标位置,位于第一行的前面。next()方法向下(向后、数据行号大的方向)移动游标,移动成功返回true,否则返回false。

11.6.2 控制游标
为了得到一个可滚动的结果集,需使用下述方法获得一个Statement对象。
Statement stmt = con.createStatement(int type ,int concurrency);

11.6.3 条件与排序查询
1.where子语句
一般格式:
select 字段 from 表名 where 条件
(1)字段值和固定值比较,例如:
select name,height from mess where name='李四'
(2)字段值在某个区间范围,例如:
select * from mess where height>1.60 and height<=1.8
2.排序
用order by子语句对记录排序
select * from mess where name like '%林%' order by name

11.7 更新、添加与删除操作
1.更新
update 表 set 字段 = 新值 where <条件子句>
2.添加
insert into 表(字段列表) values (对应的具体的记录)
or
insert into 表 values (对应的具体的记录)
3.删除
delete from 表名 where <条件子句>

11.8 使用预处理语句
11.8.1 预处理语句的优点
对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么con就可以调用prepareStatement(String sql)方法对参数sql指定的SQL语句进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在PreparedStatement对象中,那么该对象调用下列方法都可以使得该底层内部命令被数据库执行:

ResultSet executeQuery()
boolean execute()
int executeUpdate()

11.8.2 使用通配符
在对SQL进行预处理时可以使用通配符?(英文问号)来代替字段的值,只要在预处理语句执行之前再设置通配符所代表的具体值即可。例如:

String str = "select * from mess where height < ? and name= ? "
PreparedStatement sql = con.prepareStatement(str);

在sql对象执行之前,必须调用相应的方法设置通配符?代表的具体值,如:

sql.setFloat(1,1.76f);
sql.setString(2, "武泽");

预处理SQL语句sql中第1个通配符?代表的值是1.76,第2个通配符?代表的值是'武泽'。通配符按着它们在预处理SQL语句中从左到右依次出现的顺序分别被称为第1个、第2个、……、第m个通配符。
预处理语句设置通配符?的值的常用方法有:

void setDate(int parameterIndex, Date x)
void setDouble(int parameterIndex, double x)
void setFloat(int parameterIndex, float x)
void setInt(int parameterIndex, int x)
void setLong(int parameterIndex, long x)
void setString(int parameterIndex, String x)

11.9 通用查询
本节的目的是编写一个类,只要用户将数据库名、SQL语句传递给该类对象,那么该对象就用一个二维数组返回查询的记录。
程序中的结果集ResultSet对象rs调用getMetaData()方法返回一个ResultSetMetaData对象(结果集的元数据对象):
ResultSetMetaData metaData = rs.getMetaData();
metaData,调用getColumnCount()方法就可以返回结果集rs中的列的数目:
int columnCount = metaData.getColumnCount();
metaData调用getColumnName(int i)方法就可以返回结果集rs中的第i列的名字:
String columnName = metaData.getColumnName(i);

11.10 事务
11.10.1 事务及处理
事务由一组SQL语句组成,所谓事务处理是指:应用程序保证事务中的SQL语句要么全部都执行,要么一个都不执行。

11.10.2 JDBC事务处理步骤
1.用setAutoCommit(boolean b)方法关闭自动提交模式
2.用commit()方法处理事务
3.用rollback()方法处理事务失败

11.11连接SQL Server数据库
加载SQL Server驱动程序代码如下:

try {  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e){
}

连接的代码如下:

try{
      String uri= "jdbc:sqlserver://192.168.100.1:1433;DatabaseName=warehouse";
      String user="sa";
      String password="dog123456";
      con=DriverManager.getConnection(uri,user,password);
   }
catch(SQLException e){
      System.out.println(e);
}

11.12连接Derby数据库
加载Derby数据库驱动程序的代码是:Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
连接(create取值是true)的代码是:

Connection con = 
DriverManager.getConnection("jdbc:derby:students;create=true");

数据库拓展知识(实用):
一、连接各种数据库方式速查表
下面罗列了各种数据库使用JDBC连接的方式,可以作为一个手册使用。

1、Oracle8/8i/9i数据库(thin模式)

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);

2、DB2数据库

Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample"; //sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);

3、Sql Server7.0/2000数据库

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb为数据库
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);

4、Sybase数据库

Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDB为你的数据库名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);

5、Informix数据库

Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword"; //myDB为数据库名
Connection conn= DriverManager.getConnection(url);

6、MySQL数据库

Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//myDB为数据库名
Connection conn= DriverManager.getConnection(url);

7、PostgreSQL数据库

Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB" //myDB为数据库名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);

8、access数据库直连用ODBC的

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");
Connection conn = DriverManager.getConnection(url,"","");
Statement stmtNew=conn.createStatement() ;

二、JDBC连接MySql方式
下面是使用JDBC连接MySql的一个小的教程

1、查找驱动程序

MySQL目前提供的java驱动程序为Connection/J,可以从MySQL官方网站下载,并找到mysql-connector-java-3.0.15-ga-bin.jar文件,此驱动程序为纯java驱动程序,不需做其他配置。

2、动态指定classpath

如果需要执行时动态指定classpath,就在执行时采用-cp方式。否则将上面的.jar文件加入到classpath环境变量中。

3、加载驱动程序

try{
Class.forName(com.mysql.jdbc.Driver);
System.out.println(Success loading Mysql Driver!);
}catch(Exception e)
{
System.out.println(Error loading Mysql Driver!);
e.printStackTrace();
}

4、设置连接的url

jdbc:mysql://localhost/databasename[?pa=va][&pa=va]

2019-2020-4 《Java 程序设计》第九周学习总结

1.通过第九周的学习,利用教材和老师在蓝墨云上的一些教学视频以及通过老师和同学的博客以及一些课外资料,充分学习了第11章的内容,对这章学习内容并不是十分理解,还有部分内容没有学习完毕,上面的知识总结也不是非常完整,有一部分知识的遗漏,但通过学习11章内容,会使得编程更加便捷、方便,总体来说,这章内容相对较难。

2.通过手打第11章代码,对语法有一定的帮助,并在调试完代码后上传至码云仓库,并提交脚本。

码云链接:https://gitee.com/zzm-zcc/zhang_zhi_min

原文地址:https://www.cnblogs.com/zzmzcc/p/10779779.html