20175322 《Java程序设计》第九周学习总结
20175322 《Java程序设计》第九周学习总结
教材学习内容总结
11.1MySQL数据库管理系统
-
安装MySQL,版本为5.7
-
IDEA中输入测试代码
ConnectionDemo.java
import static java.lang.System.out;
import java.sql.*;
public class ConnectionDemo {
public static void main(String[] args)
throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
String jdbcUrl = "jdbc:mysql://localhost:3306/demo";
String user = "root";
String passwd = "";
try(Connection conn =
DriverManager.getConnection(jdbcUrl, user, passwd)) {
out.printf("已%s数据库连接%n",
conn.isClosed() ? "关闭" : "打开");
}
}
}
11.2启动MySQL数据库服务器
- 初始化data目录:
mysqld--initialize-insecure
- 修改root密码:
mysqladmin -u root -p password
11.3MySQL客户端管理工具
11.4JDBC
- 经常使用JDBC进行如下的操作 :
- 与一个数据库建立连接
- 向数据库发送SQL语句
- 处理数据库返回的结果
11.5 连接数据库
- 下载JDBC-MySQL数据库驱动
- 加载JDBC-MySQL数据库驱动
应用程序负责加载JDBC-MySQL数据库驱动的代码如下:
try{ Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e){}
- 连接数据库
java.sql包中的DriverManager类有两个用于建立连接的类方法(static方法)- Connection getConnection(java.lang.String, java.lang.String, java.lang.String)
- Connection getConnection(java.lang.String);
- 注意汉字问题
需要特别注意的是,如果数据库的表中的记录有汉字,那么在建立连接时需要额外多传递一个参数characterEncoding,并取值gb2312或utf-8
String uri = "jdbc:mysql://localhost/students?useSSL=true&characterEncoding=utf-8";
con = DriverManager.getConnection(uri, "root",""); //连接代码
11.6 查询操作
- 向数据库发送SQL查询语句
首先使用Statement声明一个SQL语句对象,然后让已创建的连接对象con调用方法createStatement()创建这个SQL语句对象,代码如下:
try{Statement sql = con.createStatement();
}
catch(SQLException e){}
- 处理查询结果
- 关闭连接
- 顺序查询
- 所谓顺序查询,是指ResultSet对象一次只能看到一个数据行,使用next()方法移到下一个数据行,next()方法最初的查询位置,即游标位置,位于第一行的前面。next()方法向下(向后、数据行号大的方向)移动游标,移动成功返回true,否则返回false
- 控制游标
为了得到一个可滚动的结果集,需使用下述方法获得一个Statement对象:
Statement stmt = con.createStatement(int type ,int concurrency);
- 条件与排序查询
- where子语句
- 排序,用order by子语句对记录排序
11.7 更新、添加与删除操作
- 更新
update 表 set 字段 = 新值 where <条件子句>
- 添加
insert into 表(字段列表) values (对应的具体的记录)
或
insert into 表 values (对应的具体的记录)
- 删除
delete from 表名 where <条件子句>
11.8 使用预处理语句
- 对于JDBC,如果使用Connection和某个数据库建立了连接对象con,那么con就可以调用prepareStatement(String sql)方法对参数sql指定的SQL语句进行预编译处理,生成该数据库底层的内部命令,并将该命令封装在PreparedStatement对象中,那么该对象调用下列方法都可以使得该底层内部命令被数据库执行:
ResultSet executeQuery()
boolean execute()
int executeUpdate()
11.9 通用查询
- 本节的目的是编写一个类,只要用户将数据库名、SQL语句传递给该类对象,那么该对象就用一个二维数组返回查询的记录
11.10 事务
- JDBC事务处理步骤
- 用setAutoCommit(boolean b)方法关闭自动提交模式
- 用commit()方法处理事务
- 用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);
}
- 加载Derby数据库驱动程序的代码:
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
- 连接(create取值是true)的代码:
Connection con =
DriverManager.getConnection("jdbc:derby:students;create=true");