Java第八次作业--数据库编程
(一)学习总结
1.用思维导图对本周的学习内容进行总结。
参考资料: XMind。
2.通过实验内容中的具体实例说明在执行executeUpdate()方法和executeQuery()方法中使用动态参数时,为什么要使用PreparedStatement接口而不使用Statement,比较使用两种接口的不同之处。
1,Statement对象执行SQL语句:
CREATE、DELETE、UPDATE和INSERT等数据定义和更新语句,使用Statement对象的executeUpdate方法执行。
SELECT等数据查询语句,使用Statement对象的executeQuery 方法执行。
参数sql是要执行的SQL语句,执行成功返回受影响的行数,执行失败则抛出SQLException异常捕捉。
Statement stmt = null;
ResultSet rs = null;
ArrayList<Pet> list = new ArrayList<Pet>();
try{
conn = JDBCUtils.getConnection(1);
stmt = conn.createStatement();
String sql = "select no,type,nu,price from pet";
rs = stmt.executeQuery(sql);
while(rs.next()){
Pet thisPet = new Pet();
thisPet.SetNo(rs.getString("no"));
thisPet.SetType(rs.getString("type"));
thisPet.setPrice(rs.getDouble("price"));
thisPet.setNu(rs.getString("nu"));
list.add(thisPet);
}
while(rs.next()){
Pet thisPet = new Pet();
thisPet.SetNo(rs.getString("no"));
thisPet.SetType(rs.getString("type"));
thisPet.setPrice(rs.getDouble("price"));
thisPet.setNu(rs.getString("nu"));
list.add(thisPet);
}
return list;
}catch(Exception e ){
e.printStackTrace();
}finally{
JDBCUtils.close(conn);
}
return null;
}
2,PreparedStatement是Statement的子接口,属于预处理操作。
使用Connection对象的prepareStatement()方法创建一个preparedStatement对象用于执行SQL语句。
SQL语句用“?”作为所有动态参数的占位符,先进行预编译,当给占位符所在的变量赋值后,再执行该SQL语句。
PreparedStatement pstmt = null;
boolean result=false;
try{
conn = JDBCUtils.getConnection(1);
String sql = "insert into pet (no,type,nu,price) values (?,?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, pet.GetNo());
pstmt.setString(2,pet.GetType());
pstmt.setDouble(3,pet.getPrice());
pstmt.setString(4,pet.getNu());
int num = pstmt.executeUpdate();
3.其他需要总结的内容。
1,与MySQL数据库连接的方法:
Connection con=
DriverManager.getConnection(“jdbc:mysql://主机IP或主机名:3306/数据库名”,用户名,密码);
与Oracle数据库连接的方法:
Connection con=
DriverManager.getConnection(“jdbc:oracle:thin:@主机IP或主机名:1521:数据库名”,用户名,密码);
与SQLServer数据库连接的方法:
Connection con=
DriverManager.getConnection(“jdbc:sqlserver://主机IP或主机名:1433;databaseName=数据库名”,用户名,密码);
2,成功连接到数据库,获得Connection对象后,必须通过Connection对象的createStatement方法来创建语句对象Statement, Statement对象可以执行SQL语句。
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<Pet> list = new ArrayList<Pet>();
try{
conn = JDBCUtils.getConnection(1);
stmt = conn.createStatement();
String sql = "select no,type,nu,price from pet";
rs = stmt.executeQuery(sql);
(二)实验总结
实验内容:
使用JDBC实现实验七的宠物商店
完成实验内容,代码上传到码云,注意,务必将创建数据库的脚本文件随项目文件一起上传,在随笔中分析程序设计思路,用PowerDesigner画出类图结构,并对完成实验内容过程中遇到的问题、解决方案和思考等进行归纳总结,注意代码中必须有必要的注释。
格式如下:
程序设计思路:
1.pet类来设置动物基本属性的get()和set()方法。
2.WelcomeFrame类来设置用户的登录界面,设置构造方法添加组件
3.AdminDialog类,管理员窗口类,即是设置登录界面成功后里面存放数据,添加删除等操作。
4.AdminDao类管理员数据访问类来设置管理员对数据的取得删除等操作,
//添加数据
public boolean addPet(Pet pet){
Connection conn = null;
PreparedStatement pstmt = null;
boolean result=false;
try{
conn = JDBCUtils.getConnection(1);
String sql = "insert into pet (no,type,nu,price) values (?,?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, pet.GetNo());
pstmt.setString(2,pet.GetType());
pstmt.setDouble(3,pet.getPrice());
pstmt.setString(4,pet.getNu());
int num = pstmt.executeUpdate();
if(num > 0){
result = true;
}
}catch(Exception e ){
e.printStackTrace();
}finally{
JDBCUtils.close(conn);
}
return result;
}
5.AdminService类就是用户进行添加删除修改操作时要进行的,对用户进行的操作进行判断并执行,如果编号与原有的宠物编号相同则不能进行修改和添加数据。
6.GUITools类,工具类设置屏幕框架结构。
7.JDBCUtils类,负责数据库连接和关闭操作以及取得一个数据库的连接对象。
获取连接对象
public static Connection getConnection(int connection_type)throws Exception
{
switch (connection_type)
{
case CONNECTION_SQL:
return getConnectionSQL();
case CONNECTION_MYSQL:
return getConnectionMYSQL();
}
return null;
}
连接SQLSERVER数据库
private static Connection getConnectionSQL()
{
Connection conn=null;
final String DBDRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
final String DBURL = "jdbc:sqlserver://localhost:1433;databaseName=pet";
final String DBUSER = "sa";
final String DBPASS = "123456";
try {
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
连接MYSQL数据库
private static Connection getConnectionMYSQL()
{
final String DBDRIVER = "com.mysql.jdbc.Driver";
final String DBURL = "jdbc:mysql://localhost:3306/pet";
final String DBUSER = "sa";
final String DBPASS = "123456";
Connection conn=null;
try
{
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
关闭连接对象
public static void close(Connection conn)
{
if(conn!=null)
{
try
{
conn.close();
} catch(SQLException e)
{
e.printStackTrace();
}
conn = null;
}
}
类图结构:
三.码云commit历史截图
上传实验项目代码到码云,在码云项目中选择“统计-commits”,设置搜索时间段,搜索本周提交历史,并截图。
https://git.oschina.net/hebau_cs15/java-cs02zt06.git