OushuDB编程接口 - JDBC
编程接口 - JDBC
JDBC(Java DataBase Connectivity,Java 数据库连接)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。也就是在开发 Java 程序时,可以使用 JDBC 来连接数据库,对数据库进行增、删、改、查等等。
简而言之,JDBC 编程步骤分为三步:
- 加载驱动程序:
Class.forName("com.mysql.jdbc.Driver")
- 获得数据库连接:
DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "ChangLei", "Password");
- 创建 Statement\PreparedStatement 对象:
conn.createStatement();
conn.prepareStatement(sql);
在对数据库只执行一次性存取的时侯,可以用 Statement 对象进行处理。因为 PreparedStatement 对象的开销比 Statement 大,但使用 PreparedStatement 对象时数据库系统会对 SQL 语句进行预编译处理,这条预编译的 SQL 查询语句能在将来的查询中重用,所以如果大家需要 SQL 语句被多次执行时,可以优先选用 PreparedStatement。
开发准备
- 安装 JDK,并确认 Java 和 javac 命令可以正常工作
- 下载 JDBC 驱动:
wget https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar
- 准备 Java 开发环境,新建 OushuDBJDBC.java 文件。
获取连接
下面我们在 OushuDBJDBC.java 里进行 JDBC 连接 OushuDB 的开发。
要通过 JDBC 连接数据库,首先需要加载 JDBC 驱动,语法如下:
Class.forName("org.postgresql.Driver");
然后我们通过 DriverManager 来获取连接:
Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "ChangLei", "Password");
注意这里的 getConnection 函数的使用方式,getConnection 函数一共提供了三种实现
1.通过配置文件的形式连接数据库
getConnection(String paramString, Properties paramProperties)
2.通过关键字形式连接数据
getConnection(String paramString1, String paramString2, String paramString3)
3.通过连接字符串形式连接数据库
getConnection(String paramString)
我们在这里举例的方法为第二种。
下面,我们列举了一个完整的连接数据库的代码函数范例。
public static Connection getConn() {
Connection conn = null;
try {
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost:5432/postgres";
try {
conn = DriverManager.getConnection(url, "ChangLei", "");
}
catch (SQLException e) {
e.printStackTrace();
}
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
return conn;
}
执行语句
在获取到 Connection 对象后,我们就可利用 Connection 对象进行对数据库的操作了。
要进行查询操作,需要两个对象 Statement 和 ResultSet。在执行 SELECT 语句时,我们可以使用 executeQuery 方法,在执行后可以返回代表查询结果的 ResultSet 对象,即结果集。
public static void main(String[] args) {
Connection conn= getConn();
String sql = "select * from department";
try {
Statement stmt=conn.createStatement(); //准备Statement
ResultSet rs=stmt.executeQuery(sql); //执行查询
ResultSetMetaData rsmd = rs.getMetaData();
int numCol = rsmd.getColumnCount();
for (int i = 0; i < numCol; i++) {
System.out.print(rsmd.getColumnName(i + 1) + ' ');
}
System.out.println();
while(rs.next()) {
for (int i = 0; i < numCol; i++) {
System.out.print(rs.getString(i + 1) + ' ');
}
System.out.println();
}
}
catch (SQLException e) {
e.printStackTrace();
}
}
上述举例通过 executeQuery 方法获取了 select * from department 的结果集,然后通过 print 语句逐行输入展示。
insert,delete 和 update 的执行操作和 select 操作类似,但是不同的地方在于这些操作并不会返回 ResultSet,而是需要返回受影响的行数。在这里我们使用 executeUpdate 而不是 executeQuery,executeUpdate 的返回值是一个整数,即受影响的行数。
public static void main(String[] args) {
Connection conn= getConn();
String sql = "delete * from department where d_id=101";
try {
Statement stmt=conn.createStatement();
//准备Statement
int rs=stmt.executeUpdate();
//执行sql操作,获取受影响行数
}
catch (SQLException e) {
e.printStackTrace();
}
finally {
try {
conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
if (rs > 0) {
return true;
//如果受影响行数超过1行,则认为操作成功
}
return false;
//默认返回失败,只有受影响函数大于0时才返回true
/*实际环境中并不一定必须要受影响行数大于0才算执行成功,需根据实际情况判断*,这里的方法只是例子*/
}
以上代码通过函数返回值判断 insert,delete,update 操作是否成功。
在执行完 SQL 操作后,我们可以通过 close 方法来断开连接。
conn.close();
编译与运行
通过 javac 编译.java 文件。
javac -cp ./postgresql-9.4.1212.jar OushuDBJDBC.java
通过 Java 程序运行 OushuDBJDBC。
changlei:dev ChangLei$ java OushuDBJDBC
registration_order role status port hostname address description
0 m u 5432 changlei changlei null
1 p u 40000 localhost 127.0.0.1