使用JDBC实现CRUD(增删改查)
使用JDBC进行增删改查是一切框架的基础,本文主要讲述使用JDBC进行增删改查,方便日后复习
1)获取连接(Connection),包括获取连接的四要素(用户名,使用的Driver具体类、密码、URL),Connection是获取其他信息的基础,但是这个连接是怎么获取的,还存在疑问。
public static Connection getConnection() throws Exception {
Connection connection;
//获取连接的四要素
String driver = "com.mysql.jdbc.Driver";
String username = "root";
String password = "root";
String url = "jdbc:mysql://localhost:3306/university";
Class.forName(driver);
connection = DriverManager.getConnection(url, username, password);
return connection;
}
2)通过Connection获取一些连接信息:
public static void main(String[] args) throws Exception {
Connection connection = InsertTest.getConnection();
//输出数据库名称
System.out.println(connection.getCatalog());
//是否自动提交
System.out.println(connection.getAutoCommit());
//这个事物隔离级别必须是1、2、4、8,不然的话会抛出异常(为啥不直接做成枚举呢?)
connection.setTransactionIsolation(2);
//获取事物隔离级别,1,2,4,8(事物隔离级别也是一大块,需要)
System.out.println(connection.getTransactionIsolation());
//判断当前连接是否断开,connection.close();可以手动断开连接
System.out.println(connection.isClosed());
//是否只读模式
System.out.println(connection.isReadOnly());
//验证连接是否有效,参数为0时,表示不用参数
System.out.println(connection.isValid(0));
}
3)插入数据,其中使用PreparedStatement比使用Statement好的原因,可以参考《PreparedStatement与Statement的区别》,PreparedStatement的API函数可以参考《PreparedStatement的使用》
public static void main(String[] args) throws Exception {
//插入数据
Connection connection = InsertTest.getConnection();
String sql = "insert into department (dept_name,building, budget) values(?,?,?)";
//使用PreparedStatement比使用Statement好的原因,可以参考《PreparedStatement与Statement的区别》
PreparedStatement ps;
int i = 0;
ps = connection.prepareStatement(sql);
//parameterIndex the first parameter is 1, the second is 2, ...
ps.setString(1, "Chinese");
ps.setString(2, "Tech and math");
ps.setDouble(3, 7692444.3332);
//执行插入,PreparedStatement的API函数可以参考《PreparedStatement的使用》
i = ps.executeUpdate();
System.out.println(i);
//测试程序,简单地进行关闭资源
ps.close();
connection.close();
}
4)执行查询操作
public static void main(String[] args) throws Exception {
Connection connection;
String sql = "select dept_name,building, budget from department";
PreparedStatement ps;
connection = getConnection();
ps = connection.prepareStatement(sql);
//ResultSet关于某个表的信息或一个查询的结果。您必须逐行访问数据行,但是您可以任何顺序访问列。
ResultSet set = ps.executeQuery();
//这样获取的是一行结果数据包含了多少个字段
//set.getMetaData().getColumnCount();
//获取到了ResultSet之后,ResultSet将会指向查询结果中的第一行
while(set.next()){
//通过ResultSetMetaData获取ResultSet的行名称
String deptName = set.getMetaData().getColumnName(1);
String buildingName = set.getMetaData().getColumnName(2);
String budgetName = set.getMetaData().getColumnName(3);
String dept_name = set.getString(deptName);
String building = set.getString(buildingName);
Double budget = set.getDouble(budgetName);
System.out.println(dept_name + "---" + building + "---" + budget);
}
ps.close();
connection.close();
}
5)执行修改操作
public static void main(String[] args) throws Exception {
Connection connection = getConnection();
//同样是使用一般的sql语句
String sql = "update department set budget = ? where dept_name = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setDouble(1, 1002.00);
statement.setString(2, "Math");
int i = statement.executeUpdate();
System.out.println(i);
}
6)执行删除操作
public static void main(String[] args) throws Exception {
Connection connection = InsertTest.getConnection();
String sql = "delete from department where dept_name = ?";
PreparedStatement ps = connection.prepareStatement(sql);
//删除dept_name为Chinese的列
ps.setString(1, "Chinese");
//connection.prepareStatement(sql);进行了预编译,那么executeUpdate是否还需要传入sql参数?
ps.executeUpdate();
ps.close();
connection.close();
}
总结:JDBC中的增删改查大体如此,但是还有很多细节的问题需要仔细了解一下,比如说,预编译的过程,PreparedStatement的executeUpdate()方法带参数和不带参数的区别,都需要琢磨一下。

浙公网安备 33010602011771号