《Java基础⼊门第2版》--⿊马程序员课后答案及其详解第9章JDBC
⽂章⽬录
⼀、填空题
1、 Java Database Connectivity
2、 java.sql.*
3、 classpath
4、 registerDriver()
5、 next()
⼆、判断题
1、对
2、错
3、对
4、错
5、错
三、选择题
1、A
2、C
3、A
4、D
5、AC
四、简答题
1、JDBC是⼀套⽤于执⾏SQL语句的Java API。应⽤程序可通过这套API连接到关系型数据库,并使⽤SQL语句来完成对数据库中数据的查询、新增、更新和删除等操作。
2、(1)加载数据库驱动
(2)通过DriverManager获取数据库连接
(3)通过Connection对象获取Statement对象
(4)使⽤Statement执⾏SQL语句
(5)操作ResultSet结果集
(6)关闭连接,释放资源
3、(1)代码的可读性和可维护性
(2)PreparedStatement尽最⼤可能提⾼性能,因为预编译语句有可能被重复调⽤,所以语句在被DB的编译器编译后的执⾏代码被缓存下来,那么下次调⽤时只要是相同的预编译语句就不需要编译,只要将参数直接传⼊编译过的语句执⾏代码中(相当于⼀个函数)就会得到执⾏。
(3)极⼤地提⾼了安全性传。递给PreparedStatement对象的参数可以被强制进⾏类型转换,使开发⼈员可以确保在插⼊或查询数据时与底层的数据库格式匹配;在公共Web站点环境下,防⽌Sq注⼊问题。
五、编程题
1.public static void main(String[] args)throws Exception {
// int i = insert();
// int i = delete();
// int i = update();
select();
// System.out.println(i);
}
// 获取连接对象
private static Connection getConn(){
String driver ="sql.jdbc.Driver";
String url ="jdbc:mysql://localhost:3306/javatest";
String username ="root";
String password ="1234";
Connection conn = null;
try{
Class.forName(driver);// classLoader,加载对应驱动
conn = Connection(url, username, password);
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
return conn;
}
// 插⼊操作
private static int insert(){
Connection conn =getConn();
int i =0;
String sql ="insert into tb_user(name,sex,email,birthday) values(?,?,?,?)";  PreparedStatement pstmt;
try{
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"itcast");
pstmt.setString(2,"男");
pstmt.setString(3,"itcast@126");
pstmt.setString(4,"2000-01-01");
i = uteUpdate();
pstmt.close();
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
return i;
}
/
/ 删除操作
private static int delete(){
Connection conn =getConn();
int i =0;
String sql ="delete from tb_user where name=?";
PreparedStatement pstmt;
try{
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"itcast");
i = uteUpdate();
}catch(Exception e){
e.printStackTrace();
}
return i;
}
// 更新操作
private static int update(){
Connection conn =getConn();
int i =0;
String sql ="update tb_user set name=? where name =?";
PreparedStatement pstmt;
try{
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"itcast");
pstmt.setString(2,"abc");
i = uteUpdate();
System.out.println("resutl: "+ i);
pstmt.close();
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
return i;
}
// 查询操作
private static void select(){
Connection conn =getConn();
String sql ="select * from tb_user";
PreparedStatement pstmt;
try{
pstmt = conn.prepareStatement(sql);
ResultSet rs = uteQuery();
()){
int id = rs.getInt("id");// 通过列名获取指定字段的值
String name = rs.getString("name");
String sex = rs.getString("sex");
String email = rs.getString("email");
Date birthday = rs.getDate("birthday");
System.out.println(id +" | "+ name +" | "+ sex +" | "+ email +" | "+ birthday); }
pstmt.close();
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
2.import java.sql.*;
public class Test {
public static void main(String[] args)throws Exception {
transferAccounts(2,1,100);
}
public static void transferAccounts(int fromid,int toid,int transferMoney)throws Exception{
Class.forName("sql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/jdbc";
Connection con = Connection(url,"root","root");
int fromMoney =getMoney(fromid);
// 转出账户
String sql ="update tb_count set money=? where id =?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, fromMoney-transferMoney);
ps.setInt(2, fromid);
// 转⼊账户
int toMoney =getMoney(toid);
String sql2 ="update tb_count set money=? where id =?";
PreparedStatement ps2 = con.prepareStatement(sql2);
ps2.setInt(1, toMoney+transferMoney);
ps2.setInt(2, toid);
ps.close();
ps2.close();
con.close();
}
// 获取当前账户id的账户余额
public static int getMoney(int id)throws Exception{
Class.forName("sql.jdbc.Driver");
String url ="jdbc:mysql://localhost:3306/jdbc";
Connection con = Connection(url,"root","root");
String sql ="select money from tb_count where id =?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, id);
ResultSet resultSet = ps.executeQuery();
int money =0;
()){
money = Int(1);
}
ps.close();
con.close();
return money;
}
java入门课件
}
六、原题及其解析
⼀.填空题
1.JDCB是( )的缩写,简称Java数据库连接。Java Database Connectivity
2.JDBC API主要位于( )包中。 java.sql.*
3.在编写JDBC程序时,必须要把所使⽤的数据库驱动程序或类库加载到项⽬的( )中。classpath
4.DriverManager类的( )⽅法可⽤于向DriverManager中注册给定的JDBC驱动程序。registerDriver( )
5.在ResultSet接⼝内部有⼀个指向表格数据⾏的游标(或指针),ResultSet对象初始化时,游标在表格的第⼀⾏之前,调⽤( )⽅法可将游标移动到下⼀⾏。next( )
⼆.判断题
1.JDBC(Java Database Connectivity,Java 数据库连接),它是⼀套⽤于执⾏SQL语句的Java API。( )对√
2.Statement是Java执⾏数据库操作的⼀个重要接⼝,它⽤于执⾏动态的SQL语句,并返回⼀个结果对象。( )错×
3.PreparedStatement是Statement的⼦接⼝,⽤于执⾏预编译的SQL语句。( )对√
4.PreparedStatement接⼝中的setData( )⽅法可以设置⽇期内容,但参数Date的类型必须是java.util.Date。( )错×
5.ResultSet接⼝既可以通过字段的名称来获取指定数据,也可以通过字段的索引来获取指定的数据,字段的索引是从0开始编号的。( )
错×
三.选择题
1.JDBC是⼀套⽤于执⾏什么的Java API ? ( ) A
A.SQL语句
B.数据库连接
C.数据库操作
D.数据库驱动
2.当应⽤程序使⽤JDBC访问特定的数据库时,只需要通过不同的什么与其对应的数据库进⾏连接,连接后即可对数据库进⾏响应的操作?( ) C
A. Java API
B.JDBC API
C.数据库驱动
D.JDBC驱动
3.JDBC API主要位于哪个包中,该包定义了⼀系列访问数据库的接⼝和类?( ) A
A.java.sql
B.java.util
C.java.jdbc
D.java.lang
4.在编写JDBC程序时,必须要把所使⽤的数据库驱动程序或类库加载到项⽬的什么位置?( ) D
A.根⽬录下
B.JDBC程序所在⽬录下
C.任意⽬录下
D.classpath
5.下⾯是Statement接⼝中常⽤的执⾏SQL语句的⽅法,哪些说明是正确的?(多选)( ) AC
四.简答题
1.请简述什么是JDBC。
答:JDBC是⼀套⽤于执⾏SQL语句的Java API。应⽤程序可通过这套API连接到关系型数据库,并使⽤SQL语句来完成对数据库中数据的查询、新增、更新和删除等操作。
2.简述JDBC的编程步骤。
(1)加载数据库驱动
(2)通过DriverManager获取数据库连接
(3)通过Connection对象获取Statement对象
(4)使⽤Statement执⾏SQL语句
(5)操作ResultSet结果集
(6)关闭连接,释放资源
3.简述PreparedStatement相⽐Statement优点。
(1)代码的可读性和可维护性
(2)PreparedStatement尽最⼤可能提⾼性能,因为预编译语句有可能被重复调⽤,所以语句在被DB的编译器编译后的执⾏代码被缓存下来,那么下次调⽤时只要是相同的预编译语句就不需要编译,只要将参数直接传⼊编译过的语句执⾏代码中(相当于⼀个函数)就会得到执⾏。
(3)极⼤地提⾼了安全性传。递给PreparedStatement对象的参数可以被强制进⾏类型转换,使开发⼈员可以确保在插⼊或查询数据时与底层的数据库格式匹配;在公共Web站点环境下,防⽌Sq注⼊问题。
五.编程题

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。