mysql与jdbc

JDBC连接数据库实现增删改查,我连接成功了但是没有运行成功,我想要一份关于这个连接后的代码

java

// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");

// 连接数据库
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");

// 查询数据
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");
while (rs.next()) {
    System.out.println(rs.getString("name"));
}

// 新增数据
PreparedStatement pstmt = conn.prepareStatement("insert into user(name, age) values (?, ?)"); 
pstmt.setString(1, "张三");
pstmt.setInt(2, 30);
pstmt.executeUpdate();

// 修改数据
pstmt = conn.prepareStatement("update user set age=? where name=?");
pstmt.setInt(1, 35);
pstmt.setString(2, "张三"); 
pstmt.executeUpdate();

// 删除数据
pstmt = conn.prepareStatement("delete from user where name=?");
pstmt.setString(1, "张三");
pstmt.executeUpdate();

// 关闭连接
conn.close();

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7795320
  • 你也可以参考下这篇文章:通过JDBC在mysql数据库中查询所有表名
  • 除此之外, 这篇博客: 使用JDBC技术连接MYSQL数据库并实现增删改查的操作中的 JDBC使用数据库连接池来实现MYSQL数据库的连接 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1、项目中引入druid的jar包
    首先把阿里巴巴提供的数据库连接池druid(此druid为数据库连接池,而不是数据存储里的druid),复制到lib目录,并添加到项目库中。

    在这里插入图片描述

    在这里插入图片描述

    driverName=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/实验数据库?serverTimezone=UTC&charactorEncoding=utf8
    user=root
    password=123456
    MaxActive=10
    MinIdle=10
    InitialSize=10
    
    public class JDBCDemo {
        static DruidDataSource pool;
        static {
            try {
                pool = new DruidDataSource();
                pool.setDriverClassName(getProperties().getProperty("driverName"));
                pool.setUrl(getProperties().getProperty("url"));
                pool.setUsername(getProperties().getProperty("user"));
                pool.setPassword(getProperties().getProperty("password"));
                pool.setMaxActive(Integer.valueOf(getProperties().getProperty("MaxActive")));//最大允许的连接数量
                pool.setMinIdle(Integer.valueOf(getProperties().getProperty("MinIdle")));//最小的空闲连接数量
                pool.setInitialSize(Integer.valueOf(getProperties().getProperty("InitialSize")));//创建池时初始创建的连接数量
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) throws Exception {
    
            for (int i = 0; i <100 ; i++) {
                new Thread(){
                    @Override
                    public void run() {
                       Connection connection=getConnection();
                        System.out.println(connection);
                        try {
                            connection.close(); //归还连接对象给连接池。(因为此时是连接池)
                        } catch (SQLException throwables) {
                            throwables.printStackTrace();
                        }
                    }
                }.start();
    
            }
    
    
        }
    
        private static Properties getProperties(){
    
            Properties properties = new Properties();
            try {
                properties.load(new FileReader("E:\\IDEA .3代码文件\\src\\db.properties"));
                return properties;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        private static Connection getConnection() {
            try {
               return pool.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    

    此时,不光使用了db.properties来存储那些重要的连接属性了,同时还使用了数据库连接池,来替代了之前单独通过DriverManager类来获取Connection连接对象的实现方法(这种方式获取Connection连接对象是单例的,也就是无论从DriverManager类获取多少次Connection连接对象,返回的都是同一对象),而是使用数据库连接池来直接创建一些Connection连接对象,在使用完时,使用close()方法,来使Connection连接对象返回数据库连接池中反复利用,避免了反复创建与销毁Connection连接对象,降低了所消耗的时间与资源。

  • 您还可以看一下 CSDN就业班老师的大数据从基础到入门-Java与Linux实践课程中的 JDBC操作MySQL数据库小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以提供一份连接数据库后实现增删改查的代码。代码如下:

    package com.example.jdbc;
    
    import java.sql.*;
    
    public class JdbcDemo {
    
        // JDBC 驱动和数据库 URL
        static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://localhost:3306/实验数据库?serverTimezone=UTC&charactorEncoding=utf8";
    
        // 数据库的用户名与密码
        static final String USER = "root";
        static final String PASS = "123456";
    
        public static void main(String[] args) {
            Connection conn = null;
            Statement stmt = null;
            try {
                // 注册 JDBC 驱动器
                Class.forName(JDBC_DRIVER);
    
                // 打开连接
                System.out.println("连接数据库...");
                conn = DriverManager.getConnection(DB_URL, USER, PASS);
    
                // 执行查询
                System.out.println("实例化statement对象...");
                stmt = conn.createStatement();
                String sql = "SELECT * FROM 用户表";
                ResultSet rs = stmt.executeQuery(sql);
    
                // 展开结果集数据库
                while (rs.next()) {
                    // 通过字段检索
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    String gender = rs.getString("gender");
                    String address = rs.getString("address");
    
                    // 输出数据
                    System.out.print("ID: " + id);
                    System.out.print(", 姓名: " + name);
                    System.out.print(", 性别: " + gender);
                    System.out.print(", 地址: " + address);
                    System.out.print("\n");
                }
    
                // 插入操作
                System.out.println("\n插入一条数据...");
                String sql_insert = "INSERT INTO 用户表 (id, name, gender, address) VALUES (4, 'Mark', '男', '上海')";
                int result_insert = stmt.executeUpdate(sql_insert);
                if (result_insert > 0) {
                    System.out.println("插入成功");
                } else {
                    System.out.println("插入失败");
                }
    
                // 更新操作
                System.out.println("\n更新一条数据...");
                String sql_update = "UPDATE 用户表 SET name='Lucy' WHERE id=4";
                int result_update = stmt.executeUpdate(sql_update);
                if (result_update > 0) {
                    System.out.println("更新成功");
                } else {
                    System.out.println("更新失败");
                }
    
                // 删除操作
                System.out.println("\n删除一条数据...");
                String sql_delete = "DELETE FROM 用户表 WHERE id=4";
                int result_delete = stmt.executeUpdate(sql_delete);
                if (result_delete > 0) {
                    System.out.println("删除成功");
                } else {
                    System.out.println("删除失败");
                }
    
                // 完成后关闭
                rs.close();
                stmt.close();
                conn.close();
            } catch (SQLException | ClassNotFoundException se) {
                // 处理 JDBC 错误
                se.printStackTrace();
            } finally {
                // 关闭资源
                try {
                    if (stmt != null) stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                try {
                    if (conn != null) conn.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                }
            }
            System.out.println("Goodbye!");
        }
    }
    

    另外,我也注意到你提到了使用数据库连接池来连接数据库。这种方式比单独通过DriverManager来获取连接对象更加高效、安全和可靠。以下是使用Druid数据库连接池来连接数据库的示例代码:

    package com.example.jdbc;
    
    import com.alibaba.druid.pool.DruidDataSource;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class JdbcDemoWithPool {
    
        private static DruidDataSource dataSource;
    
        public static void main(String[] args) {
            Connection conn = null;
            Statement stmt = null;
            try {
                // 初始化数据源
                dataSource = new DruidDataSource();
                dataSource.setUrl(getProperties().getProperty("url"));
                dataSource.setUsername(getProperties().getProperty("user"));
                dataSource.setPassword(getProperties().getProperty("password"));
                dataSource.setInitialSize(Integer.parseInt(getProperties().getProperty("InitialSize")));
                dataSource.setMinIdle(Integer.parseInt(getProperties().getProperty("MinIdle")));
                dataSource.setMaxActive(Integer.parseInt(getProperties().getProperty("MaxActive")));
    
                // 打开连接
                System.out.println("连接数据库...");
                conn = dataSource.getConnection();
    
                // 执行查询
                System.out.println("实例化statement对象...");
                stmt = conn.createStatement();
                String sql = "SELECT * FROM 用户表";
                ResultSet rs = stmt.executeQuery(sql);
    
                // 展开结果集数据库
                while (rs.next()) {
                    // 通过字段检索
                    int id = rs.getInt("id");
                    String name = rs.getString("name");
                    String gender = rs.getString("gender");
                    String address = rs.getString("address");
    
                    // 输出数据
                    System.out.print("ID: " + id);
                    System.out.print(", 姓名: " + name);
                    System.out.print(", 性别: " + gender);
                    System.out.print(", 地址: " + address);
                    System.out.print("\n");
                }
    
                // 插入操作
                System.out.println("\n插入一条数据...");
                String sql_insert = "INSERT INTO 用户表 (id, name, gender, address) VALUES (4, 'Mark', '男', '上海')";
                int result_insert = stmt.executeUpdate(sql_insert);
                if (result_insert > 0) {
                    System.out.println("插入成功");
                } else {
                    System.out.println("插入失败");
                }
    
                // 更新操作
                System.out.println("\n更新一条数据...");
                String sql_update = "UPDATE 用户表 SET name='Lucy' WHERE id=4";
                int result_update = stmt.executeUpdate(sql_update);
                if (result_update > 0) {
                    System.out.println("更新成功");
                } else {
                    System.out.println("更新失败");
                }
    
                // 删除操作
                System.out.println("\n删除一条数据...");
                String sql_delete = "DELETE FROM 用户表 WHERE id=4";
                int result_delete = stmt.executeUpdate(sql_delete);
                if (result_delete > 0) {
                    System.out.println("删除成功");
                } else {
                    System.out.println("删除失败");
                }
    
                // 完成后关闭
                rs.close();
                stmt.close();
                conn.close();
            } catch (SQLException se) {
                // 处理 JDBC 错误
                se.printStackTrace();
            } finally {
                // 关闭资源
                try {
                    if (stmt != null) stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                try {
                    if (conn != null) conn.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                }
            }
            System.out.println("Goodbye!");
        }
    
        private static Properties getProperties() {
            Properties properties = new Properties();
            try {
                properties.load(JdbcDemoWithPool.class.getResourceAsStream("/db.properties"));
                return properties;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    

    除了少量的语法上的差异,这份代码和前面那份代码非常相似。主要不同之处在于连接数据库的方式。这里使用了Druid数据库连接池来管理数据库连接,并通过读取配置文件来获取数据库连接的相关信息。它支持连接数池、预编译语句池、防火墙、负载均衡、监控等功能,可以大幅提高数据库操作的执行效率和灵活性。


这里是一个使用JDBC连接MySQL数据库的示例:
java
// 1. 加载驱动程序
Class.forName("com.mysql.jdbc.Driver");

// 2. 连接数据库
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);

// 3. 创建语句对象
String sql = "SELECT * FROM user";
Statement stmt = conn.createStatement();

// 4. 执行查询语句
ResultSet rs = stmt.executeQuery(sql);

// 5. 处理结果
while (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("name");
    String password = rs.getString("password");
    System.out.println(id + ", " + name + ", " + password); 
}

// 6. 关闭连接
rs.close();
stmt.close();
conn.close();
这个示例连接到test数据库,执行查询user表的SQL,并输出结果。
关于增删改的示例:
java
// INSERT
String sql = "INSERT INTO user(name, password) VALUES('Tom', '1234')";
stmt.executeUpdate(sql);

// UPDATE 
String sql = "UPDATE user SET name='John' WHERE id=1";
stmt.executeUpdate(sql);

// DELETE
String sql = "DELETE FROM user WHERE id=2"; 
stmt.executeUpdate(sql);
使用`executeUpdate()`方法执行INSERT、UPDATE和DELETE语句。
希望这个示例能帮助你连接MySQL并实现基本的CRUD操作。如有任何其他问题,欢迎在评论区提出。