1.原生jdbc实例

jdbc存在的问题
1、数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率
解决方式:使用数据库连接池
2、sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护。
解决方式:将sql语句 统一配置在文件中,修改sql不需要修改java代码。
3、通过preparedStatement向占位符设置参数,存在硬编码( 参数位置,参数)问题。系统不易维护。
解决方式:将sql中的占位符及对应的参数类型配置在配置文件中,能够自动输入 映射。
4、遍历查询结果集存在硬编码(列名)。
解决方式:自动进行sql查询结果向java对象的映射(输出映射)。


public class Jdbc {


    public static void main(String[] args) {
        Connection connection = null;
        //PreparedStatement是预编译的Statement,通过Statement发起数据库的操作
        //PreparedStatement防止sql注入,执行数据库效率高(利用缓存如果是相同的sql不会重新编译)
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

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

            //通过驱动管理类获取数据库链接
            connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=utf-8", "root", "admin");
            //定义sql语句 ?表示占位符
        String sql = "select * from user where username = ?" ;
            //获取预处理statement
            preparedStatement = connection.prepareStatement(sql);
            //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
            preparedStatement.setString(1, "cjq");
            //向数据库发出sql执行查询,查询出结果集
            resultSet =  preparedStatement.executeQuery();
            //遍历查询结果集
            while(resultSet.next()){
                System.out.println(resultSet.getString("id")+"  "+resultSet.getString("username"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //释放资源
            if(resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(preparedStatement!=null){
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }

    }

}
### 使用原生JDBC执行SQL查询 为了高效地利用数据库资源并提高性能,建议使用最新版本的JDBC驱动程序,并优先选用第4类纯Java驱动(Type 4)。这类驱动可以直接与目标数据库通信而无需中间层支持[^1]。 下面是一个简单的例子来展示如何通过原生JDBC连接到MySQL数据库并执行基本的`SELECT`语句: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JdbcExample { public static void main(String[] args) { String jdbcUrl = "jdbc:mysql://localhost:3306/mydatabase"; String username = "root"; String password = "password"; try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT id, name FROM users")) { while (resultSet.next()) { int userId = resultSet.getInt("id"); String userName = resultSet.getString("name"); System.out.println("User ID: " + userId + ", Name: " + userName); } } catch (Exception e) { e.printStackTrace(); } } } ``` 此代码片段展示了建立数据库连接、创建SQL命令以及处理返回的结果集的过程。对于不同的数据库产品,只需更改相应的URL格式即可适用其他类型的数据库服务器,比如PostgreSQL或Microsoft SQL Server等[^2]。 当应用程序需要访问数据源时,可以通过全局JNDI资源配置文件中的定义获取已配置的数据源实例。这通常用于企业级应用环境中,其中多个组件可能共享同一个持久化服务[^3]。 另外,在某些情况下,调用存储过程可能是更好的选择,因为它们可以提供更高的安全性、可维护性和效率。例如,可以在Java代码中准备CallableStatement对象并通过它传递参数给预编译好的PL/SQL脚本[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值