Java的JDBC编程_我的总结

JDBC

JDBC,即Java Database Connectivity,java数据库连接。
是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。

JDBC 工作原理

JDBC访问数据库层次结构:
在这里插入图片描述
JDBC优势:

  1. Java语言访问数据库操作完全面向抽象接口编程
  2. 开发数据库应用不用限定在特定数据库厂商的API
  3. 程序的可移植性大大增强

JDBC使用

JDBC开发案例:

  • 建立数据库连接
// 加载JDBC驱动程序:反射,这样调用初始化com.mysql.jdbc.Driver类,
// 即将该类加载到JVM方法 区,并执行该类的静态方法块、静态属性。
Class.forName("com.mysql.jdbc.Driver");

// 创建数据库连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test? user=root&password=root&useUnicode=true&characterEncoding=UTF-8");
//MySQL数据连接的URL参数格式如下: 
jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值
  • 创建操作命令(Statement)
Statement statement = connection.createStatement();
  • 执行SQL语句
ResultSet resultSet= statement.executeQuery(
"select id, sn, name, qq_mail, classes_id from student");
  • 处理结果集
	while (resultSet.next()) {
        int id = resultSet.getInt("id");
        String sn = resultSet.getString("sn"); 
        String name = resultSet.getString("name");
        int classesId = resultSet.getInt("classes_id"); 
        System.out.println(String.format("Student: id=%d, sn=%s, name=%s, classesId=%s", id, sn, name, classesId));
    }
  • 释放资源(关闭结果集,命令,连接)
//关闭结果集
if (resultSet!= null) { 
    try {
        resultSet.close();
    } catch (SQLException e) { 
    	e.printStackTrace();
    }
}
    
//关闭命令
if (statement != null) { 
    try {
        statement.close();
    } catch (SQLException e) { 
    	e.printStackTrace();
    }
}

// 关闭连接命令
if (connection!= null) { 
    try {
        connection.close();
    } catch (SQLException e) { 
    	e.printStackTrace();
    }
}

JDBC使用步骤总结:

  1. 创建数据库连接Connection
  2. 创建操作命令Statement
  3. 使用操作命令来执行SQL
  4. 处理结果集ResultSet
  5. 释放资源

JDBC API

数据库连接Connection:

Connection接口实现类由数据库提供,获取Connection对象通常有两种方式:

  • 通过DriverManager(驱动管理类)的静态方法获取:
// 加载JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");

// 创建数据库连接
Connection connection = DriverManager.getConnection(url);
  • 通过DataSource(数据源)对象获取。
DataSource ds = new MysqlDataSource();
((MysqlDataSource) ds).setUrl("jdbc:mysql://localhost:3306/test"); 
((MysqlDataSource) ds).setUser("root");
((MysqlDataSource) ds).setPassword("root"); 
Connection connection = ds.getConnection();

以上两种方式的区别是:

  1. DriverManager类来获取的Connection连接,是无法重复利用的,每次使用完以后释放资源时,通过 connection.close() 都是关闭物理连接。
  2. DataSource提供连接池的支持。连接池在初始化时将创建一定数量的数据库连接,这些连接 是可以复用的,每次使用完数据库连接,释放资源调用connection.close()都是将 Conncetion连接对象回收。
Statement对象

Statement 对象主要是将SQL语句发送到数据库中。
在这里插入图片描述
PreparedStatement对象:
在这里插入图片描述
两种执行SQL的方法:

  • executeQuery() 方法执行后返回单个结果集的,通常用于select语句。
  • executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete 语句。
ResultSet对象

ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供 了对这些行中数据的访问。

ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next() 方法,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。

重点总结

JDBC使用步骤
  1. 创建数据库连接Connection
    DriverManager创建
    DataSource获取
  2. 创建操作命令Statement
    PreparedStatement
  3. 使用操作命令来执行SQL
// 查询操作
preparedStatement.executeQuery();

// 新增、修改、删除操作
preparedStatement.executeUpdate();
  1. 处理结果集ResultSet
while (resultSet.next()) {
	int xxx = resultSet.getInt("xxx"); 	
	String yyy= resultSet.getString("yyy");
	...
}
  1. 释放资源
try {
	if(resultSet != null){
		resultSet.close();
	}
	if(preparedStatement != null){ 	
		preparedStatement.close();
	}
	if(connection != null){ 
		connection.close();
	}
} catch (SQLException e) {
	e.printStackTrace();
	throw new RuntimeException("数据库错误");
}
public class DbUtil {
    public static final String URL = "jdbc:mysql://localhost:3306/imooc";
    public static final String USER = "liulx";
    public static final String PASSWORD = "123456";

    public static void main(String[] args) throws Exception {
        //1.加载驱动程序
        Class.forName("com.mysql.jdbc.Driver");
        //2. 获得数据库连接
        Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
        //3.操作数据库,实现增删改查
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
        //如果有数据,rs.next()返回true
        while(rs.next()){
            System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age"));
        }
    }
}

实例

public class DbUtil {
    public static final String URL = "jdbc:mysql://localhost:3306/imooc";
    public static final String USER = "liulx";
    public static final String PASSWORD = "123456";
    private static Connection conn = null;
    static{
        try {
            //1.加载驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            //2. 获得数据库连接
            conn = DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection(){
        return conn;
    }
}
//模型
public class Goddess {
    private Integer id;
    private String user_name;
    private Integer sex;
    private Integer age;
    private Date birthday; //注意用的是java.util.Date
    private String email;
    private String mobile;
    private String create_user;
    private String update_user;
    private Date create_date;
    private Date update_date;
    private Integer isDel;
    //getter setter方法。。。
}
//---------dao层--------------
public class GoddessDao {
    //增加
    public void addGoddess(Goddess g) throws SQLException {
        //获取连接
        Connection conn = DbUtil.getConnection();
        //构建sql
        String sql = "INSERT INTO imooc_goddess(user_name, sex, age, birthday, email, mobile,"+
            "create_user, create_date, update_user, update_date, isdel)"
                +"values("+"?,?,?,?,?,?,?,CURRENT_DATE(),?,CURRENT_DATE(),?)";
        //预编译SQL,减少sql执行
        PreparedStatement ptmt = conn.prepareStatement(sql); 

        //传参
        ptmt.setString(1, g.getUser_name());
        ptmt.setInt(2, g.getSex());
        ptmt.setInt(3, g.getAge());
        ptmt.setDate(4, new Date(g.getBirthday().getTime()));
        ptmt.setString(5, g.getEmail());
        ptmt.setString(6, g.getMobile());
        ptmt.setString(7, g.getCreate_user());
        ptmt.setString(8, g.getUpdate_user());
        ptmt.setInt(9, g.getIsDel());

        //执行
        ptmt.execute();
    }

	//修改
    public void updateGoddess(){
        //获取连接
        Connection conn = DbUtil.getConnection();
        //sql, 每行加空格
        String sql = "UPDATE imooc_goddess" +
                " set user_name=?, sex=?, age=?, birthday=?, email=?, mobile=?,"+
                " update_user=?, update_date=CURRENT_DATE(), isdel=? "+
                " where id=?";
        //预编译SQL,减少sql执行
        PreparedStatement ptmt = conn.prepareStatement(sql); 

        //传参
        ptmt.setString(1, g.getUser_name());
        ptmt.setInt(2, g.getSex());
        ptmt.setInt(3, g.getAge());
        ptmt.setDate(4, new Date(g.getBirthday().getTime()));
        ptmt.setString(5, g.getEmail());
        ptmt.setString(6, g.getMobile());
        ptmt.setString(7, g.getUpdate_user());
        ptmt.setInt(8, g.getIsDel());
        ptmt.setInt(9, g.getId());

        //执行
        ptmt.execute();
    }

	//删除
    public void delGoddess(){
        //获取连接
        Connection conn = DbUtil.getConnection();
        //sql, 每行加空格
        String sql = "delete from imooc_goddess where id=?";
        //预编译SQL,减少sql执行
        PreparedStatement ptmt = conn.prepareStatement(sql);

        //传参
        ptmt.setInt(1, id);

        //执行
        ptmt.execute();
    }

	//查询
    public List<Goddess> query() throws SQLException {
        Connection conn = DbUtil.getConnection();
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");

        List<Goddess> gs = new ArrayList<Goddess>();
        Goddess g = null;
        while(rs.next()){
            g = new Goddess();
            g.setUser_name(rs.getString("user_name"));
            g.setAge(rs.getInt("age"));

            gs.add(g);
        }
        return gs;
    }

    public Goddess get(){
        Goddess g = null;
        //获取连接
        Connection conn = DbUtil.getConnection();
        //sql, 每行加空格
        String sql = "select * from  imooc_goddess where id=?";
        //预编译SQL,减少sql执行
        PreparedStatement ptmt = conn.prepareStatement(sql);
        //传参
        ptmt.setInt(1, id);
        //执行
        ResultSet rs = ptmt.executeQuery();
        while(rs.next()){
            g = new Goddess();
            g.setId(rs.getInt("id"));
            g.setUser_name(rs.getString("user_name"));
            g.setAge(rs.getInt("age"));
            g.setSex(rs.getInt("sex"));
            g.setBirthday(rs.getDate("birthday"));
            g.setEmail(rs.getString("email"));
            g.setMobile(rs.getString("mobile"));
            g.setCreate_date(rs.getDate("create_date"));
            g.setCreate_user(rs.getString("create_user"));
            g.setUpdate_date(rs.getDate("update_date"));
            g.setUpdate_user(rs.getString("update_user"));
            g.setIsDel(rs.getInt("isdel"));
        }
        return g;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题是如何利用javagui和jdbc编程实现学生信息查询系统。 首先,您需要创建一个Java GUI应用程序,可以使用Swing或JavaFX库来实现。您可以使用文本框和标签等GUI控件来收集和显示学生信息。 然后,您需要使用JDBC连接到您的数据库,可以使用MySQL或Oracle等数据库。您需要编写SQL查询来检索学生信息,并将结果显示在您的GUI应用程序中。 以下是一个简单的示例程序,它演示了如何使用Java GUI和JDBC编程来查询学生信息: ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class StudentQuery extends JFrame implements ActionListener { private JLabel idLabel; private JTextField idField; private JButton queryButton; private JTextArea resultArea; public StudentQuery() { // 设置窗口标题 super("学生信息查询"); // 创建GUI控件 idLabel = new JLabel("学生ID:"); idField = new JTextField(10); queryButton = new JButton("查询"); resultArea = new JTextArea(10, 40); // 添加GUI控件到窗口 JPanel panel = new JPanel(); panel.add(idLabel); panel.add(idField); panel.add(queryButton); getContentPane().add(panel, BorderLayout.NORTH); getContentPane().add(new JScrollPane(resultArea), BorderLayout.CENTER); // 添加事件处理程序 queryButton.addActionListener(this); // 设置窗口大小和位置 setSize(500, 300); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e) { if (e.getSource() == queryButton) { try { // 连接到数据库 Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); // 执行查询 PreparedStatement stmt = conn.prepareStatement("SELECT * FROM student WHERE id = ?"); stmt.setInt(1, Integer.parseInt(idField.getText())); ResultSet rs = stmt.executeQuery(); // 显示查询结果 resultArea.setText(""); while (rs.next()) { resultArea.append("ID: " + rs.getInt("id") + "\n"); resultArea.append("姓名: " + rs.getString("name") + "\n"); resultArea.append("年龄: " + rs.getInt("age") + "\n"); } // 关闭连接 rs.close(); stmt.close(); conn.close(); } catch (Exception ex) { resultArea.setText("查询失败:" + ex.getMessage()); } } } public static void main(String[] args) { StudentQuery app = new StudentQuery(); app.setVisible(true); } } ``` 在这个示例中,我们创建了一个包含一个文本框、一个按钮和一个文本区域的GUI界面,当用户点击查询按钮时,我们使用JDBC从数据库中检索学生信息,并将结果显示在文本区域中。 请注意,这只是一个简单的示例程序,您需要根据您的实际需求进行更改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值