水果超市管理系统运用的IDE是eclipse,在这里的话借助了mysql.
侧重点讲jdbc 代码不全。
- 任务描述
结合JDBC技术改写水果超市管理系统本任务做了图形化界面,讲水果超市管理系统结合JDBC技术,连接mysql数据库管理水果信息的形式。
2.实现思路
从任务描述中可知要实现任务,需要讲项目与数据库连接,所以我们会做一个数据库表储存水果的信息
有了数据库环境后需要导入数据库驱动 每次使用需要加载数据库。为了方便代码重写需要建立一个数据库的工具类。
创建完工具类就可以在项目中使用JDBC对数据库中的数据进行操作。 由原项目中的是使用数据访问类AdminDao对存储类DataBase进行操作,所以只需要修改数据访问类,由于类已经实现了查询,修改和删除的方法。但是方法体所操作的是存储类的集合,在职李只需要讲方法体中的内容改为使用jdbc即可
那么接下来看看项目目录
在fruitstore项目的根目录,创建一个名为lib的文件夹,将mysql的驱动包复制到lib文件夹下
在cn.itcast.fruitstore.tools包中创建一个封装了上述操作的工具类 JDBCUtlis.`
package cn.itcast.fruitstore.tools;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* 工具类
*/
public class JDBCUtils {
// 加载驱动,并建立数据库连接
public static Connection getConnection() throws SQLException,
ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/jdbc?characterEncoding=utf8";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
// 关闭数据库连接,释放资源
public static void release(Statement stmt, Connection conn) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
public static void release(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
release(stmt, conn);
}
}
修改数据访问类AdimnDao中的查询添加 和删除方法,改为jdbc的操作
package cn.itcast.fruitstore.dao;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
//import cn.itcast.fruitstore.data.DataBase;
import cn.itcast.fruitstore.domain.FruitItem;
import cn.itcast.fruitstore.tools.JDBCUtils;
/*
* 管理员数据访问类
*/
public class AdminDao {
/*
*
//获取所有数据
public ArrayList<FruitItem> queryAllData() {
return DataBase.data;
}
//添加数据
public void addFruitItem(FruitItem fruitItem) {
DataBase.data.add(fruitItem);
}
//删除数据
public void delFruitItem(String delNumber) {
//查询集合中数据
for (int i = 0; i < DataBase.data.size(); i++) {
FruitItem thisFruitItem = DataBase.data.get(i);
//如果有水果项的编号与传入编号相同,则从集合中删除
if(thisFruitItem.getNumber().equals(delNumber)) {
DataBase.data.remove(i);
}
}
}
*/
//------为了方便读者学习,以上为原来使用集合模拟数据库的方法,以下为连接MySQL数据库后的方法--------------------------------------------
// 获取所有数据
public ArrayList<FruitItem> queryAllData() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<FruitItem> list = new ArrayList<FruitItem>();
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句
String sql = "SELECT * FROM fruit";
rs = stmt.executeQuery(sql);
// 处理结果集
while (rs.next()) {
FruitItem fruitItem = new FruitItem();
fruitItem.setNumber(rs.getString("number"));
fruitItem.setName(rs.getString("fruitname"));
fruitItem.setPrice(rs.getDouble("price"));
fruitItem.setUnit(rs.getString("unit"));
list.add(fruitItem);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
return null;
}
//添加数据
public void addFruitItem(FruitItem fruitItem) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句
String sql = "INSERT INTO fruit(number,fruitname,price,unit)"
+ "VALUES(" + fruitItem.getNumber() + ",'" + fruitItem.getName()
+ "','" + fruitItem.getPrice() + "','" + fruitItem.getUnit()+ "')";
int num = stmt.executeUpdate(sql);
if (num > 0) {
System.out.println("插入数据成功!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
}
//删除数据
public void delFruitItem(String delNumber) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句
String sql = "DELETE FROM fruit WHERE number=" + delNumber;
int num = stmt.executeUpdate(sql);
if (num > 0) {
System.out.println("删除数据成功!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
}
}
这是gui的图形化界面。说实话当我看到插入数据为??的时候有点懵居然错错了。然后自己不断的寻找问题最后发现并不是代码编译的问题,也不是数据库编译的错误,但是他就是错误了。最后发现是数据库驱动没有写编码。
这两张图呢是数据库的表,可以看出数据还是错的(懒得改了)。
以上就是jdbc的一个修改。