使用JDBC实现CRUD(增删改查)
Posted dingcx2013
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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()方法带参数和不带参数的区别,都需要琢磨一下。
以上是关于使用JDBC实现CRUD(增删改查)的主要内容,如果未能解决你的问题,请参考以下文章