我还没想好
发布于

OushuDB编程接口 - JDBC

编程接口 - JDBC

JDBC(Java DataBase Connectivity,Java 数据库连接)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。也就是在开发 Java 程序时,可以使用 JDBC 来连接数据库,对数据库进行增、删、改、查等等。

简而言之,JDBC 编程步骤分为三步:

  1. 加载驱动程序:
Class.forName("com.mysql.jdbc.Driver")
  1. 获得数据库连接:
DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "ChangLei", "Password");
  1. 创建 Statement\PreparedStatement 对象:
conn.createStatement();
conn.prepareStatement(sql);

在对数据库只执行一次性存取的时侯,可以用 Statement 对象进行处理。因为 PreparedStatement 对象的开销比 Statement 大,但使用 PreparedStatement 对象时数据库系统会对 SQL 语句进行预编译处理,这条预编译的 SQL 查询语句能在将来的查询中重用,所以如果大家需要 SQL 语句被多次执行时,可以优先选用 PreparedStatement。

开发准备

  1. 安装 JDK,并确认 Java 和 javac 命令可以正常工作
  2. 下载 JDBC 驱动:
wget https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar
  1. 准备 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
评论
    test