您的位置:首页 > 编程语言 > Java开发

Java中操作数据库语句JDBC基础

2018-03-22 19:35 579 查看

JDBC

JDBC Java Database connectivity
Java数据库连接规范(一套接口) 由SUn公司提供的

JDBC四个核心类
DriverManager 创建连接
Connection 连接类
Statement 执行sql语句
ResultSet 结果集

JDBC连接步骤:
1.注册驱动
2.获取连接 Connection
3.获取sql 语句的执行对象 Statement
4.执行sql 语句 返回结果集
5.处理结果集
6.关闭资源


JDBC 连接

// 注册驱动
// 这种注册方式 相当于注册了两遍
// Driver 类 内部的静态代码块 已经注册了一遍
//DriverManager.registerDriver(new Driver());
// 直接把该类加载到内存当中 参数是 全限定类名
// 包名+类名
Class.forName("com.mysql.jdbc.Driver");
// 获取连接对象
// url 是访问数据库 链接地址
// 3306是数据库的端口号
// myjdbc是库名
String url = "jdbc:mysql://localhost:3306/myjdbc";
// 连接方式一
// root是数据库账号
// 123456是数据库密码
// Connection connection = DriverManager.getConnection(url, "root", "123456");

/*
//获取连接的方式2
Properties info = new Properties();
// 添加用户名 密码
// 注意键值别拼错了
info.setProperty("user", "root");
info.setProperty("password", "123456");
Connection connection = DriverManager.getConnection(url, info);
*/

// 获取连接方式3 相当于使用了一个get请求
// 携带参数 访问链接
String url2 = "jdbc:mysql://localhost:3306/myjdbc?user=root&password=123456";
Connection connection = DriverManager.getConnection(url2);

// 获取执行sql语句的对象 Statement
Statement statement = connection.createStatement();
// 执行sql语句 返回结果集

// users 是表名
String sql = "select * from users";
ResultSet resultSet = statement.executeQuery(sql);
// 处理结果集
// 循环遍历结果集 输出结果
// 有记录 next()方法 返回true 反之 返回 false
// next方法是查看数据库下一条记录有没有值
// 有就返回true 没有就返回false
while (resultSet.next()) {
// 打印数据
// 结果集中添加的 索引 要和 查询语句中的 字段对应
// 注意:查询数据库时 索引从1开始
// 这里的12345 是数据库列的索引
// 1 代码 id
System.out.println(resultSet.getObject(1));
System.out.println(resultSet.getObject(2));
System.out.println(resultSet.getObject(3));
System.out.println(resultSet.getObject(4));
System.out.println(resultSet.getObject(5));
System.out.println("--------------------");
}
// 关闭资源
resultSet.close();
statement.close();
connection.close();
}


测试增删改查

// 注解 用来测试方法
// 注意: 要使用public修饰 无返回值方法

// 插入方法
@Test
public void testInsert() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/myjdbc";
Connection connection = DriverManager.getConnection(url, "root", "123456");

Statement statement = connection.createStatement();
String sql = "insert into users values(5,'f','123456','w@qq.com','1997-06-01')";
int row = statement.executeUpdate(sql);
if (row > 0) {
System.out.println("插入成功");
}

statement.close();
connection.close();

}
// 修改方法
@Test
public void testUpdate() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/myjdbc";
Connection connection = DriverManager.getConnection(url, "root", "123456");

Statement statement = connection.createStatement();
String sql = "update users set name = 'g' where name='f'";
// 受影响的行数
int update = statement.executeUpdate(sql);
if (update > 0) {
System.out.println("更新成功" + update + "行");
}

statement.close();
connection.close();

}

// 删除方法
@Test
public void testDelete() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/myjdbc";
Connection connection = DriverManager.getConnection(url, "root", "123456");

Statement statement = connection.createStatement();
String sql = "delete from users where id=5 ";
int row = statement.executeUpdate(sql);
if (row > 0) {
System.out.println("删除成功");
}

statement.close();
connection.close();

}

// 查询方法
//@Test写入时需要选择导入 import org.junit.Test;
@Test
public void testSelect() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/myjdbc";
Connection connection = DriverManager.getConnection(url, "root", "123456");
Statement statement = connection.createStatement();

// 查询
String sql = "select id,name,email from users";
ResultSet resultSet = statement.executeQuery(sql);
// 处理结果集
while (resultSet.next()) {
// 可以直接填字段名称
System.out.println(resultSet.getObject("id"));
System.out.println(resultSet.getObject("name"));
System.out.println(resultSet.getObject("email"));
}
resultSet.close();
statement.close();
connection.close();

}


连接数据库的异常处理

Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/myjdbc";
connection = DriverManager.getConnection(url, "root", "123456");
statement = connection.createStatement();
String sql = "select * from users";
resultSet = statement.executeQuery(sql);
// 处理结果集(把数据库的记录封装到对象中)
// 把对象保存到数组当中并遍历打印
// 创建集合
ArrayList<User> arrayList = new ArrayList<>();
while (resultSet.next()) {
// 创建User对象
User user = new User();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
user.setPassword(resultSet.getString("password"));
user.setEMail(resultSet.getString("email"));
user.setBirthday(resultSet.getDate("birthday"));
// 放入集合当中
arrayList.add(user);
}
// 遍历查看
for (User user : arrayList) {
System.out.println(user);
}
} catch (ClassNotFoundException e) {
// 停止程序
throw new RuntimeException("驱动加载失败");
} catch (SQLException e) {
throw new RuntimeException("获取连接失败");
} finally {
// 关闭资源前 要做非空判断 防止空指针出现
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
throw new RuntimeException("关闭失败");
}
// 加快系统回收的速度
resultSet = null;
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
throw new RuntimeException("关闭失败");
}
// 加快系统回收的速度
statement = null;
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
throw new RuntimeException("关闭失败");
}
// 加快系统回收的速度
connection = null;
}
}


JDBC工具类

//在src目录下创建一个文件
//文件名为 dbinfo.properties
//将以下代码写入文件中
//这个文件成为配置文件
driverClass=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/myjdbc
user=root
password=123456

private static String driverClass;
private static String url;
private static String user;
private static String password;

// 使用静态代码块加载驱动 读取配置文件
static {

// 使用系统类来读取配置文件
ResourceBundle rb = ResourceBundle.getBundle("dbinfo");
// 获取文件中的数据
driverClass = rb.getString("driverClass");
url = rb.getString("url");
user = rb.getString("user");
password = rb.getString("password");

// 利用集合读取文件
//      Properties properties = new Properties();
//      try {
//          FileInputStream fis = new FileInputStream("src/dbinfo.properties");
//          properties.load(fis);
//          // 读文件
//          driverClass = properties.getProperty("driverClass");
//          url = properties.getProperty("url");
//          user = properties.getProperty("user");
//          password = properties.getProperty("password");
//      } catch (IOException e) {
//
//      }

// 让驱动类只加载一次
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

// 获取数据库的连接方法
public static Connection getConnection() throws SQLException, ClassNotFoundException {
return DriverManager.getConnection(url, user, password);
}

// 关闭数据库的方法 如果没有结果集需要关闭 直接传空就好了
public static void closeALL(ResultSet resultSet, Statement statement, Connection connection) {
// 关闭资源前 要做非空判断 防止空指针出现
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
throw new RuntimeException("关闭失败");
}
// 加快系统回收的速度
resultSet = null;
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
throw new RuntimeException("关闭失败");
}
// 加快系统回收的速度
statement = null;
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
throw new RuntimeException("关闭失败");
}
// 加快系统回收的速度
connection = null;
}
}

// 创建测试类 测试 JDBC工具类

@Test
public void testSelect() {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
// 获取连接
try {
connection = JDBCUtil.getConnection();
statement = connection.createStatement();
String sql = "select * from users";
re
a3dd
sultSet = statement.executeQuery(sql);
// 创建集合
ArrayList<User> arrayList = new ArrayList<>();
while (resultSet.next()) {
// 创建User对象
User user = new User();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
user.setPassword(resultSet.getString("password"));
user.setEMail(resultSet.getString("email"));
user.setBirthday(resultSet.getDate("birthday"));
// 放入集合当中
arrayList.add(user);
}
// 遍历查看
for (User user : arrayList) {
System.out.println(user);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
// 关闭资源
JDBCUtil.closeALL(resultSet, statement, connection);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 java jdbc 基础