JAVA数据库的操作(增、删、改、查)

一、首先与数据库建立连接

static Connection con; //声明了一个全局变量方便使用
public static void SQLConnect() {
		try {
			Class.forName("com.mysql.jdbc.Driver");  //加载数据库驱动
			String url="jdbc:mysql://localhost:3306/*****?autoReconnect=true&useSSL=false";   //*****位置填写数据库的名字
			String usename="root";  //数据库用户名
			String psw="root";      //数据库密码
			con = DriverManager.getConnection(url,usename,psw); //建立连接
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

具体步骤参考这个链接
https://blog.csdn.net/weixin_44652589/article/details/117999530

二、数据库的增、删、改、查

1.增

PreparedStatement继承自Statement,都是接口。这里我们推荐使用PreparedStatement,来执行数据库的增加操作,而不用Statement。
因为PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高。

PreparedStatement 是一个特殊的Statement对象,如果我们只是来查询或者更新数据的话,最好用PreparedStatement代替Statement,因为它有以下有点:
1.简化Statement中的操作
2.提高执行语句的性能
3.可读性和可维护性更好
4.安全性更好。
5.使用PreparedStatement能够预防SQL注入攻击,所谓SQL注入,指的是通过把SQL命令插入到Web表单提交或者输入域名或者页面请求的查询字符串,最终达到欺骗服务器,达到执行恶意SQL命令的目的。注入只对SQL语句的编译过程有破坏作用,而执行阶段只是把输入串作为数据处理,不再需要对SQL语句进行解析,因此也就避免了类似select * from user where name=‘aa’ and password=‘bb’ or 1=1的sql注入问题的发生。

①首先我们编写SQL语句

String insertSQL = "insert into stubase(id,name,sex,dep,math,eng) values (?,?,?,?,?,?)";

②预编译

PreparedStatement stat = con.prepareStatement(insertSQL);

③设置占位符的值

需要设置整形数据就使用setInt()方法。
需要设置字符串数据就使用setString()方法。
方法中的第一个参数是第几个占位符,从1开始。

stat.setInt(1,100);
stat.setString(2,"String");
stat.setString(3,"String");
stat.setString(4,"String");
stat.setInt(5,100);
stat.setInt(6,100);

④执行

stat.executeUpdate();

⑤完整代码

		try {
			String insertSQL = "insert into stubase(id,name,sex,dep,math,eng) values (?,?,?,?,?,?)";
			PreparedStatement stat = con.prepareStatement(insertSQL);
			stat.setInt(1,100);
			stat.setString(2,"String");
			stat.setString(3,"String");
			stat.setString(4,"String");
			stat.setInt(5,100);
			stat.setInt(6,100);
			stat.executeUpdate();
			System.out.println(con);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

2.删

与上述同理,首先我们编写SQL语句
然后创建Statement对象(也可以用PreparedStatement,这里演示一下Statement的使用)
最后执行。

	String deleteSQL = "delete from stubase where id=18000";
	Statement stmt = con.createStatement();
	stmt.executeUpdate(deleteSQL);

3.改

这里仍然使用的是PreparedStatement,但是我在写SQL语句时没有使用占位符,而是使用了转义字符,两者都可以,我本人也认为占位符比较方便,这里只是演示转义字符的使用。

try {
			String sql="update stubase set "
					+ "name=\'"+s.getName()
					+"\',sex=\'"+s.getSex()
					+"\',dep=\'"+s.getDep()
					+"\',math="+s.getMath()
					+",eng="+s.getEng()+" "
					+"where id="+s.getId();
			PreparedStatement stat = con.prepareStatement(sql);
			stat.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

4.查

查相对比较麻烦,增、删、改执行后的返回值位受影响的行数,而查询操作则会返回一张数据表。要对这张数据表进行操作,来获取值。

①首先我们编写SQL语句

这里我们查询全部

	String sql = "select * from stubase";

②创建Statement对象用于执行SQL语句

	Statement stmt = con.createStatement();

③执行SQL语句

	ResultSet res = stmt.executeQuery(sql);

④遍历结果集

res初始指向查询到的数据表的第一行的上一行。
res.next()会使指针移动至下一行,它的返回值位布尔类型(boolean)。如果下一行有数据那么返回值位true,否则为false。

获取整形数据就使用getInt()方法。
获取字符串数据就使用getString()方法。
方法中的参数是查询到的结果表的第几列,依旧从1开始。.

可以在while循环中对获取的数据进行操作,例如添加到ArrayList中,方便我们的使用。

	while(res.next()) {
			int id = res.getInt(2);
			String name = res.getString(3);
			String sex = res.getString(4);
			String dep = res.getString(5);					
			int math = res.getInt(6);
			int eng = res.getInt(7);
	}

⑤完整代码

	String sql = "select * from stubase";
	Statement stmt = con.createStatement();
	ResultSet result = stmt.executeQuery(sql);
	while(res.next()) {
			int id = res.getInt(2);
			String name = res.getString(3);
			String sex = res.getString(4);
			String dep = res.getString(5);					
			int math = res.getInt(6);
			int eng = res.getInt(7);
	}

三、总结

我们既可以用Statement,也可以用PreparedStatement。
使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement对象的开销比Statement大,对于一次性操作并不会带来额外的好处。
PreparedStatement可以使用占位符。

1、对于Statement

1.执行查询操作时使用executeQuery(String sql),返回值为Resultset 类型。

Resultset res = executeQuery(String sql) ;

2.执行增、删、改操作时使用executeUpdate(String sql) ,返回值是整形,意义为受影响的行数。

int res = executeUpdate(String sql) ;

2、对于PreparedStatement

1.执行查询操作时使用executeQuery( ),返回值为Resultset 类型。

Resultset res = executeQuery() ;

2.执行增、删、改操作时使用executeUpdate( ) ,返回值是整形,意义为受影响的行数。

int res = executeUpdate() ;
  • 41
    点赞
  • 307
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要实现Java数据库增删改查操作,您可以参考以下步骤和代码: 1. 首先,您需要创建数据库和表。可以使用以下SQL语句创建一个名为testdb的数据库,并在其创建一个名为user的表。 ```sql DROP DATABASE IF EXISTS `testdb`; CREATE DATABASE testdb; USE testdb; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户 ID', `user_name` varchar(255) DEFAULT NULL COMMENT '用户名', `status` varchar(255) DEFAULT NULL COMMENT '用户状态', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; ``` 2. 接下来,您需要配置数据源,以便您的Java应用程序可以连接到数据库。在配置文件添加以下内容,将URL、用户名和密码替换为您的实际数据库连接信息。 ```properties spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true spring.datasource.username=root spring.datasource.password=123456 ``` 3. 然后,您需要创建一个UserService接口,其定义了用于新、更新、除、统计和询用户数据的方法。 ```java public interface UserService { int addUser(User user); int updateUser(User user); int deleteUser(User user); int countUser(User user); List<User> getUserList(User user); User getUser(User user); void batchAddUser(List<Object[]> batchArgs); } ``` 4. 最后,您需要在实现层编写具体的代码来实现UserService接口。根据您的需求,您可以使用JDBC、MyBatis或者其他ORM框架来操作数据库。以下是一个简单的示例,使用JDBC实现了UserService接口的方法。 ```java @Repository public class UserServiceImpl implements UserService { @Autowired private JdbcTemplate jdbcTemplate; @Override public int addUser(User user) { String sql = "INSERT INTO user (user_name, status) VALUES (?, ?)"; return jdbcTemplate.update(sql, user.getUserName(), user.getStatus()); } @Override public int updateUser(User user) { String sql = "UPDATE user SET user_name = ?, status = ? WHERE user_id = ?"; return jdbcTemplate.update(sql, user.getUserName(), user.getStatus(), user.getUserId()); } @Override public int deleteUser(User user) { String sql = "DELETE FROM user WHERE user_id = ?"; return jdbcTemplate.update(sql, user.getUserId()); } @Override public int countUser(User user) { String sql = "SELECT COUNT(*) FROM user"; return jdbcTemplate.queryForObject(sql, Integer.class); } @Override public List<User> getUserList(User user) { String sql = "SELECT * FROM user"; return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class)); } @Override public User getUser(User user) { String sql = "SELECT * FROM user WHERE user_id = ?"; return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), user.getUserId()); } @Override public void batchAddUser(List<Object[]> batchArgs) { String sql = "INSERT INTO user (user_name, status) VALUES (?, ?)"; jdbcTemplate.batchUpdate(sql, batchArgs); } } ``` 这样,您就可以在Java实现数据库增删改查操作了。根据需要调用UserService接口的不同方法来执行相应的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [java连接数据库实现基本的增删改查](https://blog.csdn.net/fcx1234/article/details/131198956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值