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

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() ;
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐