随笔小站

记录生活的点点滴滴

Java数据库编程学习记录(二)

昨天仅仅是依葫芦画瓢将代码输入到Eclipse中并成功运行了而已,这次是将对代码进行从上到下的理解,一些涉及到Java数据类型的基础跳过,主要针对的是数据库方面的代码。

依赖库

这里仅把Eclipse对这六个包的介绍进行截取和翻译,具体的作用详见之后的语句进行讲解

1
2
3
4
5
6
7
8
9
10
//SQL包,包含了一系列用于与数据库进行通信的类和接口
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
//util包,提供了一些实用的方法和数据结构,此次不详细讲解
import java.util.ArrayList;
import java.util.List;

java.sql.Connection

A connection (session) with a specific database. SQL statements are executed and results are returned within the context of a connection.

译:与特定数据库的连接(会话)。在连接上下文中执行SQL语句并返回结果。

java.sql.DriverManager

The basic service for managing a set of JDBC drivers.

译:用于管理一组JDBC驱动程序的基本服务。

java.sql.PreparedStatement

A SQL statement is precompiled and stored in a PreparedStatement object. This object can then be used to efficiently execute this statement multiple times.

译:SQL语句是预编译的,并存储在PreparedStatement对象中。然后可以使用此对象多次有效地执行此语句。

java.sql.ResultSet

A table of data representing a database result set, which is usually generated by executing a statement that queries the database.

译:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

java.sql.ResultSetMetaData

An object that can be used to get information about the types and properties of the columns in a ResultSet object.

译:一个可用于获取有关ResultSet对象中列的类型和属性的信息的对象。

java.sql.SQLException

An exception that provides information on a database access error or other errors.

译:提供有关数据库访问错误或其他错误的信息的异常。

获取数据库连接

常量声明:

1
2
3
4
5
6
7
8
// 数据库驱动
private static String dbdriver = "com.mysql.cj.jdbc.Driver";
// MySQL连接地址
private static String dburl = "jdbc:mysql://localhost:3306/myDatabaseName?useSSL=false";
// 用户名
private static String username = "root";
// 密码
private static String password = "123456";

核心语句如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
private static Connection getConn(String myProjName) {
Connection conn = null; // 获取连接对象
try {
Class.forName(dbdriver); // 加载数据库驱动程序
String myJdbcUrl = dburl.replace("myDatabaseName", myProjName); // 替换数据库名称
conn = DriverManager.getConnection(myJdbcUrl, username, password); // 连接数据库
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

注意:
(1)8.0以前的MySQL加载数据库驱动程序的名称为com.mysql.jdbc.Driver
(2)localhost也可以替换成127.0.0.1;
(3)3306为MySQL默认端口号;
(4)myDatabaseName是数据库名称,替换成自己需要的数据库就行;
(5)8.0之后的MySQL必须在数据库连接地址后面加上?useSSL=false,不然运行时会报错。

关闭数据库连接

核心代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
private static void closeAll(ResultSet rs, PreparedStatement ps, Connection conn) {
// 关闭ResultSet接口
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 关闭PreparedStatement接口
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 关闭Connection接口
if (conn == null)
return;
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

按行返回表的元素

核心代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public static List<List<Object>> getData(String ProjName, String sql) {
Connection conn = getConn(ProjName);
PreparedStatement ps = null;
List<List<Object>> list = new ArrayList<List<Object>>();
ResultSet rs = null;
try {
ps = conn.prepareStatement(sql); // 数据库操作对象
rs = ps.executeQuery(); //执行查询
ResultSetMetaData md = rs.getMetaData();
int columCount = md.getColumnCount();
// 插入查询数据到数组
while (rs.next()) {
List<Object> lst = new ArrayList<Object>();
for (int i = 1; i < columCount; i++) {
lst.add(rs.getObject(i) == null ? " " : rs.getObject(i));
}
list.add(lst);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeAll(rs, ps, conn);
}
return list;
}

主语句

1
2
3
4
public static void main(String[] args) {
List<List<Object>> x = getData("pjs", "select * from pjc"); //数据库名pjs,后面是最简单的查询语句
System.out.println("x = " + x);// 打印结果到命令窗口
}
-------------本文结束感谢您的阅读-------------