JDBC是Java访问数据库的基本的技术JDBC
目标
通过编写JDBC程序, 调用数据库的JDBC驱动程序, 对数据库进行增删改查的操作.
数据库
使用Java自带的数据库JavaDB, 又名Apache Derby.
在数据库中创建表person, 建表用的SQL语句为:
CREATE TABLE person(
userID varchar(255),
age int,
CONSTRAINT pk_userID PRIMARY KEY (userID)
);
JavaDB的JDBC驱动程序
在项目中添加JavaDB的JDBC驱动程序. 程序的整体结构如下图:
访问数据库的程序示例
数据库的查询操作
文件oop08/MainJdbcDemo.java的内容如下:
package oop08;
import java.sql.*;
import java.util.*;
public class MainJdbcDemo {
public static Connection connection;
public static boolean connectDb() {
if (connection != null) {
return true;
}
try {
Class.forName("org.apache.derby.jdbc.ClientDriver");
connection = DriverManager.getConnection(
"jdbc:derby://localhost:1527/sample",
"app",
"app");
} catch (Exception e) {
connection = null;
return false;
}
return true;
}
public static List<Person> getPersons() {
List<Person> persons = new ArrayList<>();
try {
Statement s = connection.createStatement();
String sql = "SELECT * from app.person ";
ResultSet rs = s.executeQuery(sql);
while (rs.next()) {
Person person = new Person(rs.getString("userid"), rs.getInt("age"));
persons.add(person);
}
} catch (Exception e) {
System.out.println(e);
}
return persons;
}
public static void main(String[] args) {
boolean connectDb = connectDb();
if (connectDb == false) {
System.out.println("ConnectDB Failde!");
return;
}
List<Person> persons = getPersons();
for (int i = 0; i < persons.size(); i++) {
System.out.println(persons.get(i).getName());
}
}
}
文件oop08/Person.java的内容如下
package oop08;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
运行结果
运行结果是显示数据库中person表中全部userid字段的值. 实际结果与数据库中的值相关.
user00
user01
user03
用户02
用户05
数据库的插入操作
文件oop08/MainJdbcDemo.java中, 增加方法add, 用于向表person增加一条新记录.
public static boolean add(Person person) {
String sql = "INSERT INTO APP.PERSON (USERID, AGE) VALUES (?, ?)";
try {
PreparedStatement p = connection.prepareStatement(sql);
p.setString(1, person.getName());
p.setInt(2, person.getAge());
p.execute();
//connection.commit();
} catch (Exception e) {
System.out.println(e);
}
return true;
}
在主函数中增加一行调用方法add的语句
add(new Person("用户06", 22));
运行结果
运行结果是显示数据库中person表中增加了 “用户06”. 实际结果与数据库中的已有的值相关.
user00
user01
user03
用户02
用户05
用户06