JDBC学习日记--java实现SQLServel数据库的基本增删改查操作
程序员文章站
2022-05-06 20:56:40
...
数据库的基本操作
课前了解:
了解加载数据库驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
通过反射的方式加载数据区驱动,
也是数据库的注册操作 这是一个简化了的写法(原本写法如下)
DriverManager.registerDriver(Class.forName(driverClass).new Instance());
但Driver中有一个静态代码块会执行相关语句,所以省略了。
**了解DriverManager**
DriverManager是驱动的管理类,可以注册多个驱动程序,可以通过它的getConnection(url,user,password)方法直接获得一个Connection
代码
(1)为了便于解耦和程序的健壮性,我们将driverClass,url,user,password写成一个配置文件
(2)将Connection的获取抽取成一个方法
private static Connection getConnection() throws Exception {
//输入流
InputStream in = SelectOperator.class.getResourceAsStream("jdbc.properties");
//创建一个Properties对象
Properties properties = new Properties();
//读取配置文件中的数据
properties.load(in);
Connection conn;
//加载驱动
String driverName = properties.getProperty("driverName");
//String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
Class.forName(driverName);
//填写数据库url
String url = properties.getProperty("url");
//String url = "jdbc:sqlserver://localhost:1433; DatabaseName=sc";
//sql账号
String user = properties.getProperty("user");
//String user = "username";
//密码
String password = properties.getProperty("password");
//String password = "12356789";
//获得数据库连接
conn = DriverManager.getConnection(url, user, password);
return conn;
}
(3)将资源的关闭抽象成一个方法
private static void connectionClose(Connection conn, Statement stmt, ResultSet res) {
//conn不为空则关闭
if(conn != null) {
try {
conn.close();
} catch (Exception e) {
// TODO: handle exception
}
}
//stmt不为空则关闭
if(stmt != null) {
try {
stmt.close();
} catch (Exception e) {
// TODO: handle exception
}
}
//res不为空则关闭
if(res != null) {
try {
res.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
注:res是一个ResultSet对象,用于存储SQL返回的数据(后文会提到)
(4)实现插入、删除、修改操作
public static void main(String[] args) {
System.out.println("Open database:");
Connection conn = null;
Statement stmt = null;
ResultSet res = null;
try {
//得到数据库连接
conn = getConnection();
//得到执行SQL语句的对象
stmt = conn.createStatement();
//写SQL语句(更新记录)
String sql = "Delete from student where name='aa' ";
//写SQL语句(插入一条记录)
//String sql = "insert into student(name,age) values ('aa',33)";
//写SQL语句(更新记录)
//String sql = "update student set name = 'JIN1' where name = 'jin' ";
stmt.executeUpdate(sql);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
//关闭资源
connectionClose(conn,stmt,res);
}
System.out.println("end");
}
在插入、修改、删除中SQL没有返回结果(不需要ResultsSet)
(5)实现查找操作
在查询操作时需要用res(ResultSet对象来接受返回值)
稍作修改
//写SQL语句(查找记录)
String sql = "select name,age from student";
res = stmt.executeQuery(sql);
while(res.next()) {
System.out.println(res.getString(1) + " " + res.getString(2));
}
注解:
res.next()是将光标指向下一个元组(刚开始光标在第一个元组之前)
getString(1)是得到元组中第一个数据项的字符串(这儿第一个数据项是name)也可以用get(“name”)来得到对应的值
本次学习笔记中用的数据表是Student(name,age)