数据库和java(eclipse)连接查询users表中的所有记录

本文提供了一个Java示例程序,演示了如何使用JDBC连接MySQL数据库并查询users表中的所有记录。程序包括加载驱动、建立连接、执行SQL查询及结果集处理等步骤。
package cn.itcast.ch10.demo;


import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/*
 * 查询users表中的所有记录
 */
public class Example01 {


public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
//1.加载驱动程序
Class.forName("com.mysql.jdbc.Driver");
//数据库的url
String url = "jdbc:mysql://localhost:3306/ch10";
//数据库用户名
String user = "root";
//数据库密码
String password = "111";
//2.获取到数据库的连接对象
conn = DriverManager.getConnection(url, user, password);
//3.获取语句对象
stmt = conn.createStatement();
//定义一个sql语句
String sql = "select * from users";
//4.语句对象将sql语句发送到数据库上,执行后得到结果集
rs = stmt.executeQuery(sql);
//5.遍历结果集,通过向下移动光标,光标指向哪一行就可以获取当前记录行的各个字段的值
while(rs.next()){
//获取当前记录行的各个字段的值,根据字段名获取字段值
int id = rs.getInt("id");
String name = rs.getString("name");
String pwd = rs.getString("password");
Date birthday = rs.getDate("birthday");
//打印当前行各个字段值
System.out.println(id+","+name+","+pwd+","+birthday);
}


} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//6.释放资源
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rs = null;
}

if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
stmt = null;
}

if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
conn = null;
}
}


}


}
### Eclipse 连接 MySQL 数据库 NullPointerException 的原因分析与解决方案 当在使用 Eclipse 开发环境中尝试连接 MySQL 数据库时,如果出现了 `java.lang.NullPointerException` 错误,这通常是由于某些必要的初始化步骤未能成功完成所致。以下是可能的原因及对应的解决办法: #### 1. **数据库驱动加载失败** 确保已正确引入 MySQL 驱动程序至项目依赖项中。若采用 Maven 构建工具,则应在 pom.xml 文件里声明如下依赖关系: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> ``` 此外还需注意检查 Class.forName() 方法调用是否指向恰当的 Driver 类名,在较新版本 (>=8.x) 中应改为 `com.mysql.cj.jdbc.Driver` 而非旧式的 `com.mysql.jdbc.Driver`[^2]。 #### 2. **数据源配置有误** 依据所提供的 druid.properties 设置样例可知,各项参数都需精确设定才能保障正常运作。特别是 URL 字符串部分容易因拼写失误引发解析问题进而抛出 NPE 异常。例如这里的 "&" 实际上应该替换成为普通的 "&" 符号以便于正确定义查询字符串选项: ```properties url=jdbc:mysql://localhost:3306/db_1?useSSL=false&serverTimezone=UTC&characterEncoding=utf8&characterSetResults=utf8 ``` #### 3. **SQL 映射文件定义缺失或错误** 从第三个引用可以看出 MyBatis 框架下的 Mapper 接口中所指代的结果集映射并未被有效注册进 Configuration 对象之中,从而触发 IllegalArgumentException 继而间接导致 NullPointerException 发生。为此应当核实 XML 或者 Annotation 方式下描述的 SQL 达式及其返回结构是否完备并与实体类相吻合[^3]。 #### 4. **资源关闭顺序不当** 最后一点值得注意的是关于 InputStream 参数为空的情形往往是因为先前打开过的流对象尚未妥善释放便再次试图读取其内容造成的后果之一。所以在编写 DAO 层逻辑代码过程中要严格遵循先读后关的原则以防止意外状况的发生。 下面给出一段修正后的测试函数作为示范用途: ```java public class DBTest { private static final String DRIVER = "com.mysql.cj.jdbc.Driver"; private static final String URL = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=UTC"; private static final String USER = "root"; private static final String PASSWORD = "password"; public static void main(String[] args){ Connection conn = null; Statement stmt = null; ResultSet rs = null; try{ Class.forName(DRIVER); conn = DriverManager.getConnection(URL,USER,PASSWORD); stmt = conn.createStatement(); rs = stmt.executeQuery("SELECT * FROM users LIMIT 1"); while(rs.next()){ System.out.println("User ID:"+rs.getInt("id")+", Name:"+rs.getString("name")); } } catch(ClassNotFoundException | SQLException ex){ ex.printStackTrace(); } finally{ try{if(conn!=null&&!conn.isClosed()) {conn.close();}}catch(SQLException e){} try{if(stmt!=null&&!stmt.isClosed()) {stmt.close();}}catch(SQLException e){} try{if(rs!=null&&!rs.isClosed()) {rs.close();}}catch(SQLException e){} } } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值